diff --git a/jsQR b/jsQR deleted file mode 160000 index 8e6a036beafa7053dd44b1b76ac578d22b1b3311..0000000000000000000000000000000000000000 --- a/jsQR +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8e6a036beafa7053dd44b1b76ac578d22b1b3311 diff --git a/jsQR/.gitignore b/jsQR/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..15833966aa74e4a28fd638e8b35b386c4304e84c --- /dev/null +++ b/jsQR/.gitignore @@ -0,0 +1,33 @@ +.DS_Store + +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git +node_modules + +# Don't commit package-lock.json - We don't have any direct dependencies, and the dev dependencies for now at least +# dont't need to be locked beyond the package.json +package-lock.json diff --git a/jsQR/.npmignore b/jsQR/.npmignore new file mode 100644 index 0000000000000000000000000000000000000000..909c2af11461c77d811bd7a5f61707c54a495c39 --- /dev/null +++ b/jsQR/.npmignore @@ -0,0 +1,5 @@ +* + +!dist/** +!package.json +!LICENSE diff --git a/jsQR/.travis.yml b/jsQR/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..23b3bedd4a6c6c89a044dc8af70a85f3a6277626 --- /dev/null +++ b/jsQR/.travis.yml @@ -0,0 +1,13 @@ +language: node_js +node_js: + - "node" # Latest + - "10" + - "8" + - "6" +deploy: + provider: npm + on: + branch: master + email: cosmo.wolfe@gmail.com + api_key: $NPM_API_TOKEN +script: npm run-script lint && node --max-old-space-size=4096 ./node_modules/.bin/jest --runInBand diff --git a/jsQR/LICENSE b/jsQR/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..8f71f43fee3f78649d238238cbde51e6d7055c82 --- /dev/null +++ b/jsQR/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/jsQR/README.md b/jsQR/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d1932735ca0277294a6016b52df106e6d67f3a94 --- /dev/null +++ b/jsQR/README.md @@ -0,0 +1,107 @@ +# jsQR + +[](https://travis-ci.org/cozmo/jsQR) + +A pure javascript QR code reading library. +This library takes in raw images and will locate, extract and parse any QR code found within. + +[Demo](https://cozmo.github.io/jsQR) + + +## Installation + + + +### NPM +Available [on npm](https://www.npmjs.com/package/jsqr). Can be used in a Node.js program or with a module bundler such as Webpack or Browserify. + +``` +npm install jsqr --save +``` + +```javascript +// ES6 import +import jsQR from "jsqr"; + +// CommonJS require +const jsQR = require("jsqr"); + +jsQR(...); +``` + +### Browser +Alternatively for frontend use [`jsQR.js`](./dist/jsQR.js) can be included with a script tag + +```html +<script src="jsQR.js"></script> +<script> + jsQR(...); +</script> +``` + +### A note on webcams +jsQR is designed to be a completely standalone library for scanning QR codes. By design it does not include any platform specific code. This allows it to just as easily scan a frontend webcam stream, a user uploaded image, or be used as part of a backend Node.js process. + +If you want to use jsQR to scan a webcam stream you'll need to extract the [`ImageData`](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) from the video stream. This can then be passed to jsQR. The [jsQR demo](https://cozmo.github.io/jsQR) contains a barebones implementation of webcam scanning that can be used as a starting point and customized for your needs. For more advanced questions you can refer to the [`getUserMedia` docs](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia) or the fairly comprehensive [webRTC sample code](https://github.com/webrtc/samples), both of which are great resources for consuming a webcam stream. + +## Usage + +jsQR exports a method that takes in 3 arguments representing the image data you wish to decode. Additionally can take an options object to further configure scanning behavior. + +```javascript +const code = jsQR(imageData, width, height, options?); + +if (code) { + console.log("Found QR code", code); +} +``` + +### Arguments +- `imageData` - An `Uint8ClampedArray` of RGBA pixel values in the form `[r0, g0, b0, a0, r1, g1, b1, a1, ...]`. +As such the length of this array should be `4 * width * height`. +This data is in the same form as the [`ImageData`](https://developer.mozilla.org/en-US/docs/Web/API/ImageData) interface, and it's also [commonly](https://www.npmjs.com/package/jpeg-js#decoding-jpegs) [returned](https://github.com/lukeapage/pngjs/blob/master/README.md#property-data) by node modules for reading images. +- `width` - The width of the image you wish to decode. +- `height` - The height of the image you wish to decode. +- `options` (optional) - Additional options. + - `inversionAttempts` - (`attemptBoth` (default), `dontInvert`, `onlyInvert`, or `invertFirst`) - Should jsQR attempt to invert the image to find QR codes with white modules on black backgrounds instead of the black modules on white background. This option defaults to `attemptBoth` for backwards compatibility but causes a ~50% performance hit, and will probably be default to `dontInvert` in future versions. + +### Return value +If a QR is able to be decoded the library will return an object with the following keys. + +- `binaryData` - `Uint8ClampedArray` - The raw bytes of the QR code. +- `data` - The string version of the QR code data. +- `chunks` - The QR chunks. +- `version` - The QR version. +- `location` - An object with keys describing key points of the QR code. Each key is a point of the form `{x: number, y: number}`. +Has points for the following locations. + - Corners - `topRightCorner`/`topLeftCorner`/`bottomRightCorner`/`bottomLeftCorner`; + - Finder patterns - `topRightFinderPattern`/`topLeftFinderPattern`/`bottomLeftFinderPattern` + - May also have a point for the `bottomRightAlignmentPattern` assuming one exists and can be located. + +Because the library is written in [typescript](http://www.typescriptlang.org/) you can also view the [type definitions](./dist/index.d.ts) to understand the API. + +## Contributing + +jsQR is written using [typescript](http://www.typescriptlang.org/). +You can view the development source in the [`src`](./src) directory. + +Tests can be run with + +``` +npm test +``` + +Besides unit tests the test suite contains several hundred images that can be found in the [/tests/end-to-end/](./tests/end-to-end/) folder. + +Not all the images can be read. In general changes should hope to increase the number of images that read. However due to the nature of computer vision some changes may cause images that pass to start to fail and visa versa. To update the expected outcomes run `npm run-script generate-test-data`. These outcomes can be evaluated in the context of a PR to determine if a change improves or harms the overall ability of the library to read QR codes. A summary of which are passing +and failing can be found at [/tests/end-to-end/report.json](./tests/end-to-end/report.json) + +After testing any changes, you can compile the production version by running +``` +npm run-script build +``` + +- Source hosted at [GitHub](https://github.com/cozmo/jsQR) +- Report issues, questions, feature requests on [GitHub Issues](https://github.com/cozmo/jsQR/issues) + +Pull requests are welcome! Please create seperate branches for seperate features/patches. diff --git a/jsQR/dist/BitMatrix.d.ts b/jsQR/dist/BitMatrix.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..ba5a8812712d7924bbf50d8d1a7b9c21251277ef --- /dev/null +++ b/jsQR/dist/BitMatrix.d.ts @@ -0,0 +1,10 @@ +export declare class BitMatrix { + static createEmpty(width: number, height: number): BitMatrix; + width: number; + height: number; + private data; + constructor(data: Uint8ClampedArray, width: number); + get(x: number, y: number): boolean; + set(x: number, y: number, v: boolean): void; + setRegion(left: number, top: number, width: number, height: number, v: boolean): void; +} diff --git a/jsQR/dist/binarizer/index.d.ts b/jsQR/dist/binarizer/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..22f863b135a13604c1cd430a7038a66be77bfa84 --- /dev/null +++ b/jsQR/dist/binarizer/index.d.ts @@ -0,0 +1,8 @@ +import { BitMatrix } from "../BitMatrix"; +export declare function binarize(data: Uint8ClampedArray, width: number, height: number, returnInverted: boolean): { + binarized: BitMatrix; + inverted: BitMatrix; +} | { + binarized: BitMatrix; + inverted?: undefined; +}; diff --git a/jsQR/dist/decoder/decodeData/BitStream.d.ts b/jsQR/dist/decoder/decodeData/BitStream.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..5a8f8cfe5fdcb283c0f36492b7c2e1fe6efd8c21 --- /dev/null +++ b/jsQR/dist/decoder/decodeData/BitStream.d.ts @@ -0,0 +1,8 @@ +export declare class BitStream { + private bytes; + private byteOffset; + private bitOffset; + constructor(bytes: Uint8ClampedArray); + readBits(numBits: number): number; + available(): number; +} diff --git a/jsQR/dist/decoder/decodeData/index.d.ts b/jsQR/dist/decoder/decodeData/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..6ecd99a7ee6e35ba2747538341ce0b7cdea62d0d --- /dev/null +++ b/jsQR/dist/decoder/decodeData/index.d.ts @@ -0,0 +1,27 @@ +export interface Chunk { + type: Mode; + text: string; +} +export interface ByteChunk { + type: Mode.Byte | Mode.Kanji; + bytes: number[]; +} +export interface ECIChunk { + type: Mode.ECI; + assignmentNumber: number; +} +export declare type Chunks = Array<Chunk | ByteChunk | ECIChunk>; +export interface DecodedQR { + text: string; + bytes: number[]; + chunks: Chunks; + version: number; +} +export declare enum Mode { + Numeric = "numeric", + Alphanumeric = "alphanumeric", + Byte = "byte", + Kanji = "kanji", + ECI = "eci" +} +export declare function decode(data: Uint8ClampedArray, version: number): DecodedQR; diff --git a/jsQR/dist/decoder/decodeData/shiftJISTable.d.ts b/jsQR/dist/decoder/decodeData/shiftJISTable.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9ac2e62ec726c23d42ee1f94110dc6e91c2d8168 --- /dev/null +++ b/jsQR/dist/decoder/decodeData/shiftJISTable.d.ts @@ -0,0 +1,3 @@ +export declare const shiftJISTable: { + [key: number]: number; +}; diff --git a/jsQR/dist/decoder/decoder.d.ts b/jsQR/dist/decoder/decoder.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..8336365f48a8cb50ab831d31d0f84177554a343a --- /dev/null +++ b/jsQR/dist/decoder/decoder.d.ts @@ -0,0 +1,3 @@ +import { BitMatrix } from "../BitMatrix"; +import { DecodedQR } from "./decodeData"; +export declare function decode(matrix: BitMatrix): DecodedQR; diff --git a/jsQR/dist/decoder/version.d.ts b/jsQR/dist/decoder/version.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..9d71230fbff7db0455f50aa3c48afc5ebff24873 --- /dev/null +++ b/jsQR/dist/decoder/version.d.ts @@ -0,0 +1,13 @@ +export interface Version { + infoBits: number; + versionNumber: number; + alignmentPatternCenters: number[]; + errorCorrectionLevels: Array<{ + ecCodewordsPerBlock: number; + ecBlocks: Array<{ + numBlocks: number; + dataCodewordsPerBlock: number; + }>; + }>; +} +export declare const VERSIONS: Version[]; diff --git a/jsQR/dist/extractor/index.d.ts b/jsQR/dist/extractor/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d1ee205e9f24cccff8776365ebff33eaa601c56d --- /dev/null +++ b/jsQR/dist/extractor/index.d.ts @@ -0,0 +1,9 @@ +import { BitMatrix } from "../BitMatrix"; +import { QRLocation } from "../locator"; +export declare function extract(image: BitMatrix, location: QRLocation): { + matrix: BitMatrix; + mappingFunction: (x: number, y: number) => { + x: number; + y: number; + }; +}; diff --git a/jsQR/dist/index.d.ts b/jsQR/dist/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..d341eb77ee4a70a8bf10e0ea680b43ab35bce9b4 --- /dev/null +++ b/jsQR/dist/index.d.ts @@ -0,0 +1,23 @@ +import { Chunks } from "./decoder/decodeData"; +import { Point } from "./locator"; +export interface QRCode { + binaryData: number[]; + data: string; + chunks: Chunks; + version: number; + location: { + topRightCorner: Point; + topLeftCorner: Point; + bottomRightCorner: Point; + bottomLeftCorner: Point; + topRightFinderPattern: Point; + topLeftFinderPattern: Point; + bottomLeftFinderPattern: Point; + bottomRightAlignmentPattern?: Point; + }; +} +export interface Options { + inversionAttempts?: "dontInvert" | "onlyInvert" | "attemptBoth" | "invertFirst"; +} +declare function jsQR(data: Uint8ClampedArray, width: number, height: number, providedOptions?: Options): QRCode | null; +export default jsQR; diff --git a/jsQR/dist/jsQR.js b/jsQR/dist/jsQR.js new file mode 100644 index 0000000000000000000000000000000000000000..1b242c29380531c138a0531bb176fbc9c97fc4cd --- /dev/null +++ b/jsQR/dist/jsQR.js @@ -0,0 +1,9766 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["jsQR"] = factory(); + else + root["jsQR"] = factory(); +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix = /** @class */ (function () { + function BitMatrix(data, width) { + this.width = width; + this.height = data.length / width; + this.data = data; + } + BitMatrix.createEmpty = function (width, height) { + return new BitMatrix(new Uint8ClampedArray(width * height), width); + }; + BitMatrix.prototype.get = function (x, y) { + if (x < 0 || x >= this.width || y < 0 || y >= this.height) { + return false; + } + return !!this.data[y * this.width + x]; + }; + BitMatrix.prototype.set = function (x, y, v) { + this.data[y * this.width + x] = v ? 1 : 0; + }; + BitMatrix.prototype.setRegion = function (left, top, width, height, v) { + for (var y = top; y < top + height; y++) { + for (var x = left; x < left + width; x++) { + this.set(x, y, !!v); + } + } + }; + return BitMatrix; +}()); +exports.BitMatrix = BitMatrix; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var binarizer_1 = __webpack_require__(2); +var decoder_1 = __webpack_require__(3); +var extractor_1 = __webpack_require__(8); +var locator_1 = __webpack_require__(9); +function scan(matrix) { + var locations = locator_1.locate(matrix); + if (!locations) { + return null; + } + for (var _i = 0, locations_1 = locations; _i < locations_1.length; _i++) { + var location_1 = locations_1[_i]; + var extracted = extractor_1.extract(matrix, location_1); + var decoded = decoder_1.decode(extracted.matrix); + if (decoded) { + return { + binaryData: decoded.bytes, + data: decoded.text, + chunks: decoded.chunks, + version: decoded.version, + location: { + topRightCorner: extracted.mappingFunction(location_1.dimension, 0), + topLeftCorner: extracted.mappingFunction(0, 0), + bottomRightCorner: extracted.mappingFunction(location_1.dimension, location_1.dimension), + bottomLeftCorner: extracted.mappingFunction(0, location_1.dimension), + topRightFinderPattern: location_1.topRight, + topLeftFinderPattern: location_1.topLeft, + bottomLeftFinderPattern: location_1.bottomLeft, + bottomRightAlignmentPattern: location_1.alignmentPattern, + }, + }; + } + } + return null; +} +var defaultOptions = { + inversionAttempts: "attemptBoth", +}; +function jsQR(data, width, height, providedOptions) { + if (providedOptions === void 0) { providedOptions = {}; } + var options = defaultOptions; + Object.keys(options || {}).forEach(function (opt) { + options[opt] = providedOptions[opt] || options[opt]; + }); + var shouldInvert = options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst"; + var tryInvertedFirst = options.inversionAttempts === "onlyInvert" || options.inversionAttempts === "invertFirst"; + var _a = binarizer_1.binarize(data, width, height, shouldInvert), binarized = _a.binarized, inverted = _a.inverted; + var result = scan(tryInvertedFirst ? inverted : binarized); + if (!result && (options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst")) { + result = scan(tryInvertedFirst ? binarized : inverted); + } + return result; +} +jsQR.default = jsQR; +exports.default = jsQR; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +var REGION_SIZE = 8; +var MIN_DYNAMIC_RANGE = 24; +function numBetween(value, min, max) { + return value < min ? min : value > max ? max : value; +} +// Like BitMatrix but accepts arbitry Uint8 values +var Matrix = /** @class */ (function () { + function Matrix(width, height) { + this.width = width; + this.data = new Uint8ClampedArray(width * height); + } + Matrix.prototype.get = function (x, y) { + return this.data[y * this.width + x]; + }; + Matrix.prototype.set = function (x, y, value) { + this.data[y * this.width + x] = value; + }; + return Matrix; +}()); +function binarize(data, width, height, returnInverted) { + if (data.length !== width * height * 4) { + throw new Error("Malformed data passed to binarizer."); + } + // Convert image to greyscale + var greyscalePixels = new Matrix(width, height); + for (var x = 0; x < width; x++) { + for (var y = 0; y < height; y++) { + var r = data[((y * width + x) * 4) + 0]; + var g = data[((y * width + x) * 4) + 1]; + var b = data[((y * width + x) * 4) + 2]; + greyscalePixels.set(x, y, 0.2126 * r + 0.7152 * g + 0.0722 * b); + } + } + var horizontalRegionCount = Math.ceil(width / REGION_SIZE); + var verticalRegionCount = Math.ceil(height / REGION_SIZE); + var blackPoints = new Matrix(horizontalRegionCount, verticalRegionCount); + for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + var sum = 0; + var min = Infinity; + var max = 0; + for (var y = 0; y < REGION_SIZE; y++) { + for (var x = 0; x < REGION_SIZE; x++) { + var pixelLumosity = greyscalePixels.get(hortizontalRegion * REGION_SIZE + x, verticalRegion * REGION_SIZE + y); + sum += pixelLumosity; + min = Math.min(min, pixelLumosity); + max = Math.max(max, pixelLumosity); + } + } + var average = sum / (Math.pow(REGION_SIZE, 2)); + if (max - min <= MIN_DYNAMIC_RANGE) { + // If variation within the block is low, assume this is a block with only light or only + // dark pixels. In that case we do not want to use the average, as it would divide this + // low contrast area into black and white pixels, essentially creating data out of noise. + // + // Default the blackpoint for these blocks to be half the min - effectively white them out + average = min / 2; + if (verticalRegion > 0 && hortizontalRegion > 0) { + // Correct the "white background" assumption for blocks that have neighbors by comparing + // the pixels in this block to the previously calculated black points. This is based on + // the fact that dark barcode symbology is always surrounded by some amount of light + // background for which reasonable black point estimates were made. The bp estimated at + // the boundaries is used for the interior. + // The (min < bp) is arbitrary but works better than other heuristics that were tried. + var averageNeighborBlackPoint = (blackPoints.get(hortizontalRegion, verticalRegion - 1) + + (2 * blackPoints.get(hortizontalRegion - 1, verticalRegion)) + + blackPoints.get(hortizontalRegion - 1, verticalRegion - 1)) / 4; + if (min < averageNeighborBlackPoint) { + average = averageNeighborBlackPoint; + } + } + } + blackPoints.set(hortizontalRegion, verticalRegion, average); + } + } + var binarized = BitMatrix_1.BitMatrix.createEmpty(width, height); + var inverted = null; + if (returnInverted) { + inverted = BitMatrix_1.BitMatrix.createEmpty(width, height); + } + for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + var left = numBetween(hortizontalRegion, 2, horizontalRegionCount - 3); + var top_1 = numBetween(verticalRegion, 2, verticalRegionCount - 3); + var sum = 0; + for (var xRegion = -2; xRegion <= 2; xRegion++) { + for (var yRegion = -2; yRegion <= 2; yRegion++) { + sum += blackPoints.get(left + xRegion, top_1 + yRegion); + } + } + var threshold = sum / 25; + for (var xRegion = 0; xRegion < REGION_SIZE; xRegion++) { + for (var yRegion = 0; yRegion < REGION_SIZE; yRegion++) { + var x = hortizontalRegion * REGION_SIZE + xRegion; + var y = verticalRegion * REGION_SIZE + yRegion; + var lum = greyscalePixels.get(x, y); + binarized.set(x, y, lum <= threshold); + if (returnInverted) { + inverted.set(x, y, !(lum <= threshold)); + } + } + } + } + } + if (returnInverted) { + return { binarized: binarized, inverted: inverted }; + } + return { binarized: binarized }; +} +exports.binarize = binarize; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +var decodeData_1 = __webpack_require__(4); +var version_1 = __webpack_require__(7); +// tslint:disable:no-bitwise +function numBitsDiffering(x, y) { + var z = x ^ y; + var bitCount = 0; + while (z) { + bitCount++; + z &= z - 1; + } + return bitCount; +} +function pushBit(bit, byte) { + return (byte << 1) | bit; +} +// tslint:enable:no-bitwise +var FORMAT_INFO_TABLE = [ + { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } }, + { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } }, + { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } }, + { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } }, + { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } }, + { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } }, + { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } }, + { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } }, + { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } }, + { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } }, + { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } }, + { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } }, + { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } }, + { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } }, + { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } }, + { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } }, + { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } }, + { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } }, + { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } }, + { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } }, + { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } }, + { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } }, + { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } }, + { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } }, + { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } }, + { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } }, + { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } }, + { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } }, + { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } }, + { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } }, + { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } }, + { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } }, +]; +var DATA_MASKS = [ + function (p) { return ((p.y + p.x) % 2) === 0; }, + function (p) { return (p.y % 2) === 0; }, + function (p) { return p.x % 3 === 0; }, + function (p) { return (p.y + p.x) % 3 === 0; }, + function (p) { return (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0; }, + function (p) { return ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0; }, + function (p) { return ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, + function (p) { return ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, +]; +function buildFunctionPatternMask(version) { + var dimension = 17 + 4 * version.versionNumber; + var matrix = BitMatrix_1.BitMatrix.createEmpty(dimension, dimension); + matrix.setRegion(0, 0, 9, 9, true); // Top left finder pattern + separator + format + matrix.setRegion(dimension - 8, 0, 8, 9, true); // Top right finder pattern + separator + format + matrix.setRegion(0, dimension - 8, 9, 8, true); // Bottom left finder pattern + separator + format + // Alignment patterns + for (var _i = 0, _a = version.alignmentPatternCenters; _i < _a.length; _i++) { + var x = _a[_i]; + for (var _b = 0, _c = version.alignmentPatternCenters; _b < _c.length; _b++) { + var y = _c[_b]; + if (!(x === 6 && y === 6 || x === 6 && y === dimension - 7 || x === dimension - 7 && y === 6)) { + matrix.setRegion(x - 2, y - 2, 5, 5, true); + } + } + } + matrix.setRegion(6, 9, 1, dimension - 17, true); // Vertical timing pattern + matrix.setRegion(9, 6, dimension - 17, 1, true); // Horizontal timing pattern + if (version.versionNumber > 6) { + matrix.setRegion(dimension - 11, 0, 3, 6, true); // Version info, top right + matrix.setRegion(0, dimension - 11, 6, 3, true); // Version info, bottom left + } + return matrix; +} +function readCodewords(matrix, version, formatInfo) { + var dataMask = DATA_MASKS[formatInfo.dataMask]; + var dimension = matrix.height; + var functionPatternMask = buildFunctionPatternMask(version); + var codewords = []; + var currentByte = 0; + var bitsRead = 0; + // Read columns in pairs, from right to left + var readingUp = true; + for (var columnIndex = dimension - 1; columnIndex > 0; columnIndex -= 2) { + if (columnIndex === 6) { // Skip whole column with vertical alignment pattern; + columnIndex--; + } + for (var i = 0; i < dimension; i++) { + var y = readingUp ? dimension - 1 - i : i; + for (var columnOffset = 0; columnOffset < 2; columnOffset++) { + var x = columnIndex - columnOffset; + if (!functionPatternMask.get(x, y)) { + bitsRead++; + var bit = matrix.get(x, y); + if (dataMask({ y: y, x: x })) { + bit = !bit; + } + currentByte = pushBit(bit, currentByte); + if (bitsRead === 8) { // Whole bytes + codewords.push(currentByte); + bitsRead = 0; + currentByte = 0; + } + } + } + } + readingUp = !readingUp; + } + return codewords; +} +function readVersion(matrix) { + var dimension = matrix.height; + var provisionalVersion = Math.floor((dimension - 17) / 4); + if (provisionalVersion <= 6) { // 6 and under dont have version info in the QR code + return version_1.VERSIONS[provisionalVersion - 1]; + } + var topRightVersionBits = 0; + for (var y = 5; y >= 0; y--) { + for (var x = dimension - 9; x >= dimension - 11; x--) { + topRightVersionBits = pushBit(matrix.get(x, y), topRightVersionBits); + } + } + var bottomLeftVersionBits = 0; + for (var x = 5; x >= 0; x--) { + for (var y = dimension - 9; y >= dimension - 11; y--) { + bottomLeftVersionBits = pushBit(matrix.get(x, y), bottomLeftVersionBits); + } + } + var bestDifference = Infinity; + var bestVersion; + for (var _i = 0, VERSIONS_1 = version_1.VERSIONS; _i < VERSIONS_1.length; _i++) { + var version = VERSIONS_1[_i]; + if (version.infoBits === topRightVersionBits || version.infoBits === bottomLeftVersionBits) { + return version; + } + var difference = numBitsDiffering(topRightVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + difference = numBitsDiffering(bottomLeftVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + } + // We can tolerate up to 3 bits of error since no two version info codewords will + // differ in less than 8 bits. + if (bestDifference <= 3) { + return bestVersion; + } +} +function readFormatInformation(matrix) { + var topLeftFormatInfoBits = 0; + for (var x = 0; x <= 8; x++) { + if (x !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(x, 8), topLeftFormatInfoBits); + } + } + for (var y = 7; y >= 0; y--) { + if (y !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(8, y), topLeftFormatInfoBits); + } + } + var dimension = matrix.height; + var topRightBottomRightFormatInfoBits = 0; + for (var y = dimension - 1; y >= dimension - 7; y--) { // bottom left + topRightBottomRightFormatInfoBits = pushBit(matrix.get(8, y), topRightBottomRightFormatInfoBits); + } + for (var x = dimension - 8; x < dimension; x++) { // top right + topRightBottomRightFormatInfoBits = pushBit(matrix.get(x, 8), topRightBottomRightFormatInfoBits); + } + var bestDifference = Infinity; + var bestFormatInfo = null; + for (var _i = 0, FORMAT_INFO_TABLE_1 = FORMAT_INFO_TABLE; _i < FORMAT_INFO_TABLE_1.length; _i++) { + var _a = FORMAT_INFO_TABLE_1[_i], bits = _a.bits, formatInfo = _a.formatInfo; + if (bits === topLeftFormatInfoBits || bits === topRightBottomRightFormatInfoBits) { + return formatInfo; + } + var difference = numBitsDiffering(topLeftFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + if (topLeftFormatInfoBits !== topRightBottomRightFormatInfoBits) { // also try the other option + difference = numBitsDiffering(topRightBottomRightFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + } + } + // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match + if (bestDifference <= 3) { + return bestFormatInfo; + } + return null; +} +function getDataBlocks(codewords, version, ecLevel) { + var ecInfo = version.errorCorrectionLevels[ecLevel]; + var dataBlocks = []; + var totalCodewords = 0; + ecInfo.ecBlocks.forEach(function (block) { + for (var i = 0; i < block.numBlocks; i++) { + dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] }); + totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock; + } + }); + // In some cases the QR code will be malformed enough that we pull off more or less than we should. + // If we pull off less there's nothing we can do. + // If we pull off more we can safely truncate + if (codewords.length < totalCodewords) { + return null; + } + codewords = codewords.slice(0, totalCodewords); + var shortBlockSize = ecInfo.ecBlocks[0].dataCodewordsPerBlock; + // Pull codewords to fill the blocks up to the minimum size + for (var i = 0; i < shortBlockSize; i++) { + for (var _i = 0, dataBlocks_1 = dataBlocks; _i < dataBlocks_1.length; _i++) { + var dataBlock = dataBlocks_1[_i]; + dataBlock.codewords.push(codewords.shift()); + } + } + // If there are any large blocks, pull codewords to fill the last element of those + if (ecInfo.ecBlocks.length > 1) { + var smallBlockCount = ecInfo.ecBlocks[0].numBlocks; + var largeBlockCount = ecInfo.ecBlocks[1].numBlocks; + for (var i = 0; i < largeBlockCount; i++) { + dataBlocks[smallBlockCount + i].codewords.push(codewords.shift()); + } + } + // Add the rest of the codewords to the blocks. These are the error correction codewords. + while (codewords.length > 0) { + for (var _a = 0, dataBlocks_2 = dataBlocks; _a < dataBlocks_2.length; _a++) { + var dataBlock = dataBlocks_2[_a]; + dataBlock.codewords.push(codewords.shift()); + } + } + return dataBlocks; +} +function decodeMatrix(matrix) { + var version = readVersion(matrix); + if (!version) { + return null; + } + var formatInfo = readFormatInformation(matrix); + if (!formatInfo) { + return null; + } + var codewords = readCodewords(matrix, version, formatInfo); + var dataBlocks = getDataBlocks(codewords, version, formatInfo.errorCorrectionLevel); + if (!dataBlocks) { + return null; + } + // Count total number of data bytes + var totalBytes = dataBlocks.reduce(function (a, b) { return a + b.numDataCodewords; }, 0); + var resultBytes = new Uint8ClampedArray(totalBytes); + var resultIndex = 0; + for (var _i = 0, dataBlocks_3 = dataBlocks; _i < dataBlocks_3.length; _i++) { + var dataBlock = dataBlocks_3[_i]; + /*const correctedBytes = rsDecode(dataBlock.codewords, dataBlock.codewords.length - dataBlock.numDataCodewords); + if (!correctedBytes) { + return null; + }*/ + if (resultIndex == 0) { + console.log(dataBlock.codewords[0]); + } + for (var i = 0; i < dataBlock.numDataCodewords; i++) { + resultBytes[resultIndex++] = dataBlock.codewords[i]; + } + } + try { + return decodeData_1.decode(resultBytes, version.versionNumber); + } + catch (_a) { + return null; + } +} +function decode(matrix) { + if (matrix == null) { + return null; + } + var result = decodeMatrix(matrix); + if (result) { + return result; + } + // Decoding didn't work, try mirroring the QR across the topLeft -> bottomRight line. + for (var x = 0; x < matrix.width; x++) { + for (var y = x + 1; y < matrix.height; y++) { + if (matrix.get(x, y) !== matrix.get(y, x)) { + matrix.set(x, y, !matrix.get(x, y)); + matrix.set(y, x, !matrix.get(y, x)); + } + } + } + return decodeMatrix(matrix); +} +exports.decode = decode; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +// tslint:disable:no-bitwise +var BitStream_1 = __webpack_require__(5); +var shiftJISTable_1 = __webpack_require__(6); +var Mode; +(function (Mode) { + Mode["Numeric"] = "numeric"; + Mode["Alphanumeric"] = "alphanumeric"; + Mode["Byte"] = "byte"; + Mode["Kanji"] = "kanji"; + Mode["ECI"] = "eci"; +})(Mode = exports.Mode || (exports.Mode = {})); +var ModeByte; +(function (ModeByte) { + ModeByte[ModeByte["Terminator"] = 0] = "Terminator"; + ModeByte[ModeByte["Numeric"] = 1] = "Numeric"; + ModeByte[ModeByte["Alphanumeric"] = 2] = "Alphanumeric"; + ModeByte[ModeByte["Byte"] = 4] = "Byte"; + ModeByte[ModeByte["Kanji"] = 8] = "Kanji"; + ModeByte[ModeByte["ECI"] = 7] = "ECI"; + // StructuredAppend = 0x3, + // FNC1FirstPosition = 0x5, + // FNC1SecondPosition = 0x9, +})(ModeByte || (ModeByte = {})); +function decodeNumeric(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [10, 12, 14][size]; + var length = stream.readBits(characterCountSize); + // Read digits in groups of 3 + while (length >= 3) { + var num = stream.readBits(10); + if (num >= 1000) { + throw new Error("Invalid numeric value above 999"); + } + var a = Math.floor(num / 100); + var b = Math.floor(num / 10) % 10; + var c = num % 10; + bytes.push(48 + a, 48 + b, 48 + c); + text += a.toString() + b.toString() + c.toString(); + length -= 3; + } + // If the number of digits aren't a multiple of 3, the remaining digits are special cased. + if (length === 2) { + var num = stream.readBits(7); + if (num >= 100) { + throw new Error("Invalid numeric value above 99"); + } + var a = Math.floor(num / 10); + var b = num % 10; + bytes.push(48 + a, 48 + b); + text += a.toString() + b.toString(); + } + else if (length === 1) { + var num = stream.readBits(4); + if (num >= 10) { + throw new Error("Invalid numeric value above 9"); + } + bytes.push(48 + num); + text += num.toString(); + } + return { bytes: bytes, text: text }; +} +var AlphanumericCharacterCodes = [ + "0", "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", + " ", "$", "%", "*", "+", "-", ".", "/", ":", +]; +function decodeAlphanumeric(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [9, 11, 13][size]; + var length = stream.readBits(characterCountSize); + while (length >= 2) { + var v = stream.readBits(11); + var a = Math.floor(v / 45); + var b = v % 45; + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0), AlphanumericCharacterCodes[b].charCodeAt(0)); + text += AlphanumericCharacterCodes[a] + AlphanumericCharacterCodes[b]; + length -= 2; + } + if (length === 1) { + var a = stream.readBits(6); + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0)); + text += AlphanumericCharacterCodes[a]; + } + return { bytes: bytes, text: text }; +} +function decodeByte(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [8, 16, 16][size]; + var length = stream.readBits(characterCountSize); + for (var i = 0; i < length; i++) { + var b = stream.readBits(8); + bytes.push(b); + } + try { + text += decodeURIComponent(bytes.map(function (b) { return "%" + ("0" + b.toString(16)).substr(-2); }).join("")); + } + catch (_a) { + // failed to decode + } + return { bytes: bytes, text: text }; +} +function decodeKanji(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [8, 10, 12][size]; + var length = stream.readBits(characterCountSize); + for (var i = 0; i < length; i++) { + var k = stream.readBits(13); + var c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0); + if (c < 0x1F00) { + c += 0x8140; + } + else { + c += 0xC140; + } + bytes.push(c >> 8, c & 0xFF); + text += String.fromCharCode(shiftJISTable_1.shiftJISTable[c]); + } + return { bytes: bytes, text: text }; +} +function decode(data, version) { + var _a, _b, _c, _d; + var stream = new BitStream_1.BitStream(data); + // There are 3 'sizes' based on the version. 1-9 is small (0), 10-26 is medium (1) and 27-40 is large (2). + var size = version <= 9 ? 0 : version <= 26 ? 1 : 2; + var result = { + text: "", + bytes: [], + chunks: [], + version: version, + }; + while (stream.available() >= 4) { + var mode = stream.readBits(4); + if (mode === ModeByte.Terminator) { + return result; + } + else if (mode === ModeByte.ECI) { + if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(7), + }); + } + else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(14), + }); + } + else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(21), + }); + } + else { + // ECI data seems corrupted + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: -1, + }); + } + } + else if (mode === ModeByte.Numeric) { + var numericResult = decodeNumeric(stream, size); + result.text += numericResult.text; + (_a = result.bytes).push.apply(_a, numericResult.bytes); + result.chunks.push({ + type: Mode.Numeric, + text: numericResult.text, + }); + } + else if (mode === ModeByte.Alphanumeric) { + var alphanumericResult = decodeAlphanumeric(stream, size); + result.text += alphanumericResult.text; + (_b = result.bytes).push.apply(_b, alphanumericResult.bytes); + result.chunks.push({ + type: Mode.Alphanumeric, + text: alphanumericResult.text, + }); + } + else if (mode === ModeByte.Byte) { + var byteResult = decodeByte(stream, size); + result.text += byteResult.text; + (_c = result.bytes).push.apply(_c, byteResult.bytes); + result.chunks.push({ + type: Mode.Byte, + bytes: byteResult.bytes, + text: byteResult.text, + }); + } + else if (mode === ModeByte.Kanji) { + var kanjiResult = decodeKanji(stream, size); + result.text += kanjiResult.text; + (_d = result.bytes).push.apply(_d, kanjiResult.bytes); + result.chunks.push({ + type: Mode.Kanji, + bytes: kanjiResult.bytes, + text: kanjiResult.text, + }); + } + } + // If there is no data left, or the remaining bits are all 0, then that counts as a termination marker + if (stream.available() === 0 || stream.readBits(stream.available()) === 0) { + return result; + } +} +exports.decode = decode; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// tslint:disable:no-bitwise +Object.defineProperty(exports, "__esModule", { value: true }); +var BitStream = /** @class */ (function () { + function BitStream(bytes) { + this.byteOffset = 0; + this.bitOffset = 0; + this.bytes = bytes; + } + BitStream.prototype.readBits = function (numBits) { + if (numBits < 1 || numBits > 32 || numBits > this.available()) { + throw new Error("Cannot read " + numBits.toString() + " bits"); + } + var result = 0; + // First, read remainder from current byte + if (this.bitOffset > 0) { + var bitsLeft = 8 - this.bitOffset; + var toRead = numBits < bitsLeft ? numBits : bitsLeft; + var bitsToNotRead = bitsLeft - toRead; + var mask = (0xFF >> (8 - toRead)) << bitsToNotRead; + result = (this.bytes[this.byteOffset] & mask) >> bitsToNotRead; + numBits -= toRead; + this.bitOffset += toRead; + if (this.bitOffset === 8) { + this.bitOffset = 0; + this.byteOffset++; + } + } + // Next read whole bytes + if (numBits > 0) { + while (numBits >= 8) { + result = (result << 8) | (this.bytes[this.byteOffset] & 0xFF); + this.byteOffset++; + numBits -= 8; + } + // Finally read a partial byte + if (numBits > 0) { + var bitsToNotRead = 8 - numBits; + var mask = (0xFF >> bitsToNotRead) << bitsToNotRead; + result = (result << numBits) | ((this.bytes[this.byteOffset] & mask) >> bitsToNotRead); + this.bitOffset += numBits; + } + } + return result; + }; + BitStream.prototype.available = function () { + return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset; + }; + return BitStream; +}()); +exports.BitStream = BitStream; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.shiftJISTable = { + 0x20: 0x0020, + 0x21: 0x0021, + 0x22: 0x0022, + 0x23: 0x0023, + 0x24: 0x0024, + 0x25: 0x0025, + 0x26: 0x0026, + 0x27: 0x0027, + 0x28: 0x0028, + 0x29: 0x0029, + 0x2A: 0x002A, + 0x2B: 0x002B, + 0x2C: 0x002C, + 0x2D: 0x002D, + 0x2E: 0x002E, + 0x2F: 0x002F, + 0x30: 0x0030, + 0x31: 0x0031, + 0x32: 0x0032, + 0x33: 0x0033, + 0x34: 0x0034, + 0x35: 0x0035, + 0x36: 0x0036, + 0x37: 0x0037, + 0x38: 0x0038, + 0x39: 0x0039, + 0x3A: 0x003A, + 0x3B: 0x003B, + 0x3C: 0x003C, + 0x3D: 0x003D, + 0x3E: 0x003E, + 0x3F: 0x003F, + 0x40: 0x0040, + 0x41: 0x0041, + 0x42: 0x0042, + 0x43: 0x0043, + 0x44: 0x0044, + 0x45: 0x0045, + 0x46: 0x0046, + 0x47: 0x0047, + 0x48: 0x0048, + 0x49: 0x0049, + 0x4A: 0x004A, + 0x4B: 0x004B, + 0x4C: 0x004C, + 0x4D: 0x004D, + 0x4E: 0x004E, + 0x4F: 0x004F, + 0x50: 0x0050, + 0x51: 0x0051, + 0x52: 0x0052, + 0x53: 0x0053, + 0x54: 0x0054, + 0x55: 0x0055, + 0x56: 0x0056, + 0x57: 0x0057, + 0x58: 0x0058, + 0x59: 0x0059, + 0x5A: 0x005A, + 0x5B: 0x005B, + 0x5C: 0x00A5, + 0x5D: 0x005D, + 0x5E: 0x005E, + 0x5F: 0x005F, + 0x60: 0x0060, + 0x61: 0x0061, + 0x62: 0x0062, + 0x63: 0x0063, + 0x64: 0x0064, + 0x65: 0x0065, + 0x66: 0x0066, + 0x67: 0x0067, + 0x68: 0x0068, + 0x69: 0x0069, + 0x6A: 0x006A, + 0x6B: 0x006B, + 0x6C: 0x006C, + 0x6D: 0x006D, + 0x6E: 0x006E, + 0x6F: 0x006F, + 0x70: 0x0070, + 0x71: 0x0071, + 0x72: 0x0072, + 0x73: 0x0073, + 0x74: 0x0074, + 0x75: 0x0075, + 0x76: 0x0076, + 0x77: 0x0077, + 0x78: 0x0078, + 0x79: 0x0079, + 0x7A: 0x007A, + 0x7B: 0x007B, + 0x7C: 0x007C, + 0x7D: 0x007D, + 0x7E: 0x203E, + 0x8140: 0x3000, + 0x8141: 0x3001, + 0x8142: 0x3002, + 0x8143: 0xFF0C, + 0x8144: 0xFF0E, + 0x8145: 0x30FB, + 0x8146: 0xFF1A, + 0x8147: 0xFF1B, + 0x8148: 0xFF1F, + 0x8149: 0xFF01, + 0x814A: 0x309B, + 0x814B: 0x309C, + 0x814C: 0x00B4, + 0x814D: 0xFF40, + 0x814E: 0x00A8, + 0x814F: 0xFF3E, + 0x8150: 0xFFE3, + 0x8151: 0xFF3F, + 0x8152: 0x30FD, + 0x8153: 0x30FE, + 0x8154: 0x309D, + 0x8155: 0x309E, + 0x8156: 0x3003, + 0x8157: 0x4EDD, + 0x8158: 0x3005, + 0x8159: 0x3006, + 0x815A: 0x3007, + 0x815B: 0x30FC, + 0x815C: 0x2015, + 0x815D: 0x2010, + 0x815E: 0xFF0F, + 0x815F: 0x005C, + 0x8160: 0x301C, + 0x8161: 0x2016, + 0x8162: 0xFF5C, + 0x8163: 0x2026, + 0x8164: 0x2025, + 0x8165: 0x2018, + 0x8166: 0x2019, + 0x8167: 0x201C, + 0x8168: 0x201D, + 0x8169: 0xFF08, + 0x816A: 0xFF09, + 0x816B: 0x3014, + 0x816C: 0x3015, + 0x816D: 0xFF3B, + 0x816E: 0xFF3D, + 0x816F: 0xFF5B, + 0x8170: 0xFF5D, + 0x8171: 0x3008, + 0x8172: 0x3009, + 0x8173: 0x300A, + 0x8174: 0x300B, + 0x8175: 0x300C, + 0x8176: 0x300D, + 0x8177: 0x300E, + 0x8178: 0x300F, + 0x8179: 0x3010, + 0x817A: 0x3011, + 0x817B: 0xFF0B, + 0x817C: 0x2212, + 0x817D: 0x00B1, + 0x817E: 0x00D7, + 0x8180: 0x00F7, + 0x8181: 0xFF1D, + 0x8182: 0x2260, + 0x8183: 0xFF1C, + 0x8184: 0xFF1E, + 0x8185: 0x2266, + 0x8186: 0x2267, + 0x8187: 0x221E, + 0x8188: 0x2234, + 0x8189: 0x2642, + 0x818A: 0x2640, + 0x818B: 0x00B0, + 0x818C: 0x2032, + 0x818D: 0x2033, + 0x818E: 0x2103, + 0x818F: 0xFFE5, + 0x8190: 0xFF04, + 0x8191: 0x00A2, + 0x8192: 0x00A3, + 0x8193: 0xFF05, + 0x8194: 0xFF03, + 0x8195: 0xFF06, + 0x8196: 0xFF0A, + 0x8197: 0xFF20, + 0x8198: 0x00A7, + 0x8199: 0x2606, + 0x819A: 0x2605, + 0x819B: 0x25CB, + 0x819C: 0x25CF, + 0x819D: 0x25CE, + 0x819E: 0x25C7, + 0x819F: 0x25C6, + 0x81A0: 0x25A1, + 0x81A1: 0x25A0, + 0x81A2: 0x25B3, + 0x81A3: 0x25B2, + 0x81A4: 0x25BD, + 0x81A5: 0x25BC, + 0x81A6: 0x203B, + 0x81A7: 0x3012, + 0x81A8: 0x2192, + 0x81A9: 0x2190, + 0x81AA: 0x2191, + 0x81AB: 0x2193, + 0x81AC: 0x3013, + 0x81B8: 0x2208, + 0x81B9: 0x220B, + 0x81BA: 0x2286, + 0x81BB: 0x2287, + 0x81BC: 0x2282, + 0x81BD: 0x2283, + 0x81BE: 0x222A, + 0x81BF: 0x2229, + 0x81C8: 0x2227, + 0x81C9: 0x2228, + 0x81CA: 0x00AC, + 0x81CB: 0x21D2, + 0x81CC: 0x21D4, + 0x81CD: 0x2200, + 0x81CE: 0x2203, + 0x81DA: 0x2220, + 0x81DB: 0x22A5, + 0x81DC: 0x2312, + 0x81DD: 0x2202, + 0x81DE: 0x2207, + 0x81DF: 0x2261, + 0x81E0: 0x2252, + 0x81E1: 0x226A, + 0x81E2: 0x226B, + 0x81E3: 0x221A, + 0x81E4: 0x223D, + 0x81E5: 0x221D, + 0x81E6: 0x2235, + 0x81E7: 0x222B, + 0x81E8: 0x222C, + 0x81F0: 0x212B, + 0x81F1: 0x2030, + 0x81F2: 0x266F, + 0x81F3: 0x266D, + 0x81F4: 0x266A, + 0x81F5: 0x2020, + 0x81F6: 0x2021, + 0x81F7: 0x00B6, + 0x81FC: 0x25EF, + 0x824F: 0xFF10, + 0x8250: 0xFF11, + 0x8251: 0xFF12, + 0x8252: 0xFF13, + 0x8253: 0xFF14, + 0x8254: 0xFF15, + 0x8255: 0xFF16, + 0x8256: 0xFF17, + 0x8257: 0xFF18, + 0x8258: 0xFF19, + 0x8260: 0xFF21, + 0x8261: 0xFF22, + 0x8262: 0xFF23, + 0x8263: 0xFF24, + 0x8264: 0xFF25, + 0x8265: 0xFF26, + 0x8266: 0xFF27, + 0x8267: 0xFF28, + 0x8268: 0xFF29, + 0x8269: 0xFF2A, + 0x826A: 0xFF2B, + 0x826B: 0xFF2C, + 0x826C: 0xFF2D, + 0x826D: 0xFF2E, + 0x826E: 0xFF2F, + 0x826F: 0xFF30, + 0x8270: 0xFF31, + 0x8271: 0xFF32, + 0x8272: 0xFF33, + 0x8273: 0xFF34, + 0x8274: 0xFF35, + 0x8275: 0xFF36, + 0x8276: 0xFF37, + 0x8277: 0xFF38, + 0x8278: 0xFF39, + 0x8279: 0xFF3A, + 0x8281: 0xFF41, + 0x8282: 0xFF42, + 0x8283: 0xFF43, + 0x8284: 0xFF44, + 0x8285: 0xFF45, + 0x8286: 0xFF46, + 0x8287: 0xFF47, + 0x8288: 0xFF48, + 0x8289: 0xFF49, + 0x828A: 0xFF4A, + 0x828B: 0xFF4B, + 0x828C: 0xFF4C, + 0x828D: 0xFF4D, + 0x828E: 0xFF4E, + 0x828F: 0xFF4F, + 0x8290: 0xFF50, + 0x8291: 0xFF51, + 0x8292: 0xFF52, + 0x8293: 0xFF53, + 0x8294: 0xFF54, + 0x8295: 0xFF55, + 0x8296: 0xFF56, + 0x8297: 0xFF57, + 0x8298: 0xFF58, + 0x8299: 0xFF59, + 0x829A: 0xFF5A, + 0x829F: 0x3041, + 0x82A0: 0x3042, + 0x82A1: 0x3043, + 0x82A2: 0x3044, + 0x82A3: 0x3045, + 0x82A4: 0x3046, + 0x82A5: 0x3047, + 0x82A6: 0x3048, + 0x82A7: 0x3049, + 0x82A8: 0x304A, + 0x82A9: 0x304B, + 0x82AA: 0x304C, + 0x82AB: 0x304D, + 0x82AC: 0x304E, + 0x82AD: 0x304F, + 0x82AE: 0x3050, + 0x82AF: 0x3051, + 0x82B0: 0x3052, + 0x82B1: 0x3053, + 0x82B2: 0x3054, + 0x82B3: 0x3055, + 0x82B4: 0x3056, + 0x82B5: 0x3057, + 0x82B6: 0x3058, + 0x82B7: 0x3059, + 0x82B8: 0x305A, + 0x82B9: 0x305B, + 0x82BA: 0x305C, + 0x82BB: 0x305D, + 0x82BC: 0x305E, + 0x82BD: 0x305F, + 0x82BE: 0x3060, + 0x82BF: 0x3061, + 0x82C0: 0x3062, + 0x82C1: 0x3063, + 0x82C2: 0x3064, + 0x82C3: 0x3065, + 0x82C4: 0x3066, + 0x82C5: 0x3067, + 0x82C6: 0x3068, + 0x82C7: 0x3069, + 0x82C8: 0x306A, + 0x82C9: 0x306B, + 0x82CA: 0x306C, + 0x82CB: 0x306D, + 0x82CC: 0x306E, + 0x82CD: 0x306F, + 0x82CE: 0x3070, + 0x82CF: 0x3071, + 0x82D0: 0x3072, + 0x82D1: 0x3073, + 0x82D2: 0x3074, + 0x82D3: 0x3075, + 0x82D4: 0x3076, + 0x82D5: 0x3077, + 0x82D6: 0x3078, + 0x82D7: 0x3079, + 0x82D8: 0x307A, + 0x82D9: 0x307B, + 0x82DA: 0x307C, + 0x82DB: 0x307D, + 0x82DC: 0x307E, + 0x82DD: 0x307F, + 0x82DE: 0x3080, + 0x82DF: 0x3081, + 0x82E0: 0x3082, + 0x82E1: 0x3083, + 0x82E2: 0x3084, + 0x82E3: 0x3085, + 0x82E4: 0x3086, + 0x82E5: 0x3087, + 0x82E6: 0x3088, + 0x82E7: 0x3089, + 0x82E8: 0x308A, + 0x82E9: 0x308B, + 0x82EA: 0x308C, + 0x82EB: 0x308D, + 0x82EC: 0x308E, + 0x82ED: 0x308F, + 0x82EE: 0x3090, + 0x82EF: 0x3091, + 0x82F0: 0x3092, + 0x82F1: 0x3093, + 0x8340: 0x30A1, + 0x8341: 0x30A2, + 0x8342: 0x30A3, + 0x8343: 0x30A4, + 0x8344: 0x30A5, + 0x8345: 0x30A6, + 0x8346: 0x30A7, + 0x8347: 0x30A8, + 0x8348: 0x30A9, + 0x8349: 0x30AA, + 0x834A: 0x30AB, + 0x834B: 0x30AC, + 0x834C: 0x30AD, + 0x834D: 0x30AE, + 0x834E: 0x30AF, + 0x834F: 0x30B0, + 0x8350: 0x30B1, + 0x8351: 0x30B2, + 0x8352: 0x30B3, + 0x8353: 0x30B4, + 0x8354: 0x30B5, + 0x8355: 0x30B6, + 0x8356: 0x30B7, + 0x8357: 0x30B8, + 0x8358: 0x30B9, + 0x8359: 0x30BA, + 0x835A: 0x30BB, + 0x835B: 0x30BC, + 0x835C: 0x30BD, + 0x835D: 0x30BE, + 0x835E: 0x30BF, + 0x835F: 0x30C0, + 0x8360: 0x30C1, + 0x8361: 0x30C2, + 0x8362: 0x30C3, + 0x8363: 0x30C4, + 0x8364: 0x30C5, + 0x8365: 0x30C6, + 0x8366: 0x30C7, + 0x8367: 0x30C8, + 0x8368: 0x30C9, + 0x8369: 0x30CA, + 0x836A: 0x30CB, + 0x836B: 0x30CC, + 0x836C: 0x30CD, + 0x836D: 0x30CE, + 0x836E: 0x30CF, + 0x836F: 0x30D0, + 0x8370: 0x30D1, + 0x8371: 0x30D2, + 0x8372: 0x30D3, + 0x8373: 0x30D4, + 0x8374: 0x30D5, + 0x8375: 0x30D6, + 0x8376: 0x30D7, + 0x8377: 0x30D8, + 0x8378: 0x30D9, + 0x8379: 0x30DA, + 0x837A: 0x30DB, + 0x837B: 0x30DC, + 0x837C: 0x30DD, + 0x837D: 0x30DE, + 0x837E: 0x30DF, + 0x8380: 0x30E0, + 0x8381: 0x30E1, + 0x8382: 0x30E2, + 0x8383: 0x30E3, + 0x8384: 0x30E4, + 0x8385: 0x30E5, + 0x8386: 0x30E6, + 0x8387: 0x30E7, + 0x8388: 0x30E8, + 0x8389: 0x30E9, + 0x838A: 0x30EA, + 0x838B: 0x30EB, + 0x838C: 0x30EC, + 0x838D: 0x30ED, + 0x838E: 0x30EE, + 0x838F: 0x30EF, + 0x8390: 0x30F0, + 0x8391: 0x30F1, + 0x8392: 0x30F2, + 0x8393: 0x30F3, + 0x8394: 0x30F4, + 0x8395: 0x30F5, + 0x8396: 0x30F6, + 0x839F: 0x0391, + 0x83A0: 0x0392, + 0x83A1: 0x0393, + 0x83A2: 0x0394, + 0x83A3: 0x0395, + 0x83A4: 0x0396, + 0x83A5: 0x0397, + 0x83A6: 0x0398, + 0x83A7: 0x0399, + 0x83A8: 0x039A, + 0x83A9: 0x039B, + 0x83AA: 0x039C, + 0x83AB: 0x039D, + 0x83AC: 0x039E, + 0x83AD: 0x039F, + 0x83AE: 0x03A0, + 0x83AF: 0x03A1, + 0x83B0: 0x03A3, + 0x83B1: 0x03A4, + 0x83B2: 0x03A5, + 0x83B3: 0x03A6, + 0x83B4: 0x03A7, + 0x83B5: 0x03A8, + 0x83B6: 0x03A9, + 0x83BF: 0x03B1, + 0x83C0: 0x03B2, + 0x83C1: 0x03B3, + 0x83C2: 0x03B4, + 0x83C3: 0x03B5, + 0x83C4: 0x03B6, + 0x83C5: 0x03B7, + 0x83C6: 0x03B8, + 0x83C7: 0x03B9, + 0x83C8: 0x03BA, + 0x83C9: 0x03BB, + 0x83CA: 0x03BC, + 0x83CB: 0x03BD, + 0x83CC: 0x03BE, + 0x83CD: 0x03BF, + 0x83CE: 0x03C0, + 0x83CF: 0x03C1, + 0x83D0: 0x03C3, + 0x83D1: 0x03C4, + 0x83D2: 0x03C5, + 0x83D3: 0x03C6, + 0x83D4: 0x03C7, + 0x83D5: 0x03C8, + 0x83D6: 0x03C9, + 0x8440: 0x0410, + 0x8441: 0x0411, + 0x8442: 0x0412, + 0x8443: 0x0413, + 0x8444: 0x0414, + 0x8445: 0x0415, + 0x8446: 0x0401, + 0x8447: 0x0416, + 0x8448: 0x0417, + 0x8449: 0x0418, + 0x844A: 0x0419, + 0x844B: 0x041A, + 0x844C: 0x041B, + 0x844D: 0x041C, + 0x844E: 0x041D, + 0x844F: 0x041E, + 0x8450: 0x041F, + 0x8451: 0x0420, + 0x8452: 0x0421, + 0x8453: 0x0422, + 0x8454: 0x0423, + 0x8455: 0x0424, + 0x8456: 0x0425, + 0x8457: 0x0426, + 0x8458: 0x0427, + 0x8459: 0x0428, + 0x845A: 0x0429, + 0x845B: 0x042A, + 0x845C: 0x042B, + 0x845D: 0x042C, + 0x845E: 0x042D, + 0x845F: 0x042E, + 0x8460: 0x042F, + 0x8470: 0x0430, + 0x8471: 0x0431, + 0x8472: 0x0432, + 0x8473: 0x0433, + 0x8474: 0x0434, + 0x8475: 0x0435, + 0x8476: 0x0451, + 0x8477: 0x0436, + 0x8478: 0x0437, + 0x8479: 0x0438, + 0x847A: 0x0439, + 0x847B: 0x043A, + 0x847C: 0x043B, + 0x847D: 0x043C, + 0x847E: 0x043D, + 0x8480: 0x043E, + 0x8481: 0x043F, + 0x8482: 0x0440, + 0x8483: 0x0441, + 0x8484: 0x0442, + 0x8485: 0x0443, + 0x8486: 0x0444, + 0x8487: 0x0445, + 0x8488: 0x0446, + 0x8489: 0x0447, + 0x848A: 0x0448, + 0x848B: 0x0449, + 0x848C: 0x044A, + 0x848D: 0x044B, + 0x848E: 0x044C, + 0x848F: 0x044D, + 0x8490: 0x044E, + 0x8491: 0x044F, + 0x849F: 0x2500, + 0x84A0: 0x2502, + 0x84A1: 0x250C, + 0x84A2: 0x2510, + 0x84A3: 0x2518, + 0x84A4: 0x2514, + 0x84A5: 0x251C, + 0x84A6: 0x252C, + 0x84A7: 0x2524, + 0x84A8: 0x2534, + 0x84A9: 0x253C, + 0x84AA: 0x2501, + 0x84AB: 0x2503, + 0x84AC: 0x250F, + 0x84AD: 0x2513, + 0x84AE: 0x251B, + 0x84AF: 0x2517, + 0x84B0: 0x2523, + 0x84B1: 0x2533, + 0x84B2: 0x252B, + 0x84B3: 0x253B, + 0x84B4: 0x254B, + 0x84B5: 0x2520, + 0x84B6: 0x252F, + 0x84B7: 0x2528, + 0x84B8: 0x2537, + 0x84B9: 0x253F, + 0x84BA: 0x251D, + 0x84BB: 0x2530, + 0x84BC: 0x2525, + 0x84BD: 0x2538, + 0x84BE: 0x2542, + 0x889F: 0x4E9C, + 0x88A0: 0x5516, + 0x88A1: 0x5A03, + 0x88A2: 0x963F, + 0x88A3: 0x54C0, + 0x88A4: 0x611B, + 0x88A5: 0x6328, + 0x88A6: 0x59F6, + 0x88A7: 0x9022, + 0x88A8: 0x8475, + 0x88A9: 0x831C, + 0x88AA: 0x7A50, + 0x88AB: 0x60AA, + 0x88AC: 0x63E1, + 0x88AD: 0x6E25, + 0x88AE: 0x65ED, + 0x88AF: 0x8466, + 0x88B0: 0x82A6, + 0x88B1: 0x9BF5, + 0x88B2: 0x6893, + 0x88B3: 0x5727, + 0x88B4: 0x65A1, + 0x88B5: 0x6271, + 0x88B6: 0x5B9B, + 0x88B7: 0x59D0, + 0x88B8: 0x867B, + 0x88B9: 0x98F4, + 0x88BA: 0x7D62, + 0x88BB: 0x7DBE, + 0x88BC: 0x9B8E, + 0x88BD: 0x6216, + 0x88BE: 0x7C9F, + 0x88BF: 0x88B7, + 0x88C0: 0x5B89, + 0x88C1: 0x5EB5, + 0x88C2: 0x6309, + 0x88C3: 0x6697, + 0x88C4: 0x6848, + 0x88C5: 0x95C7, + 0x88C6: 0x978D, + 0x88C7: 0x674F, + 0x88C8: 0x4EE5, + 0x88C9: 0x4F0A, + 0x88CA: 0x4F4D, + 0x88CB: 0x4F9D, + 0x88CC: 0x5049, + 0x88CD: 0x56F2, + 0x88CE: 0x5937, + 0x88CF: 0x59D4, + 0x88D0: 0x5A01, + 0x88D1: 0x5C09, + 0x88D2: 0x60DF, + 0x88D3: 0x610F, + 0x88D4: 0x6170, + 0x88D5: 0x6613, + 0x88D6: 0x6905, + 0x88D7: 0x70BA, + 0x88D8: 0x754F, + 0x88D9: 0x7570, + 0x88DA: 0x79FB, + 0x88DB: 0x7DAD, + 0x88DC: 0x7DEF, + 0x88DD: 0x80C3, + 0x88DE: 0x840E, + 0x88DF: 0x8863, + 0x88E0: 0x8B02, + 0x88E1: 0x9055, + 0x88E2: 0x907A, + 0x88E3: 0x533B, + 0x88E4: 0x4E95, + 0x88E5: 0x4EA5, + 0x88E6: 0x57DF, + 0x88E7: 0x80B2, + 0x88E8: 0x90C1, + 0x88E9: 0x78EF, + 0x88EA: 0x4E00, + 0x88EB: 0x58F1, + 0x88EC: 0x6EA2, + 0x88ED: 0x9038, + 0x88EE: 0x7A32, + 0x88EF: 0x8328, + 0x88F0: 0x828B, + 0x88F1: 0x9C2F, + 0x88F2: 0x5141, + 0x88F3: 0x5370, + 0x88F4: 0x54BD, + 0x88F5: 0x54E1, + 0x88F6: 0x56E0, + 0x88F7: 0x59FB, + 0x88F8: 0x5F15, + 0x88F9: 0x98F2, + 0x88FA: 0x6DEB, + 0x88FB: 0x80E4, + 0x88FC: 0x852D, + 0x8940: 0x9662, + 0x8941: 0x9670, + 0x8942: 0x96A0, + 0x8943: 0x97FB, + 0x8944: 0x540B, + 0x8945: 0x53F3, + 0x8946: 0x5B87, + 0x8947: 0x70CF, + 0x8948: 0x7FBD, + 0x8949: 0x8FC2, + 0x894A: 0x96E8, + 0x894B: 0x536F, + 0x894C: 0x9D5C, + 0x894D: 0x7ABA, + 0x894E: 0x4E11, + 0x894F: 0x7893, + 0x8950: 0x81FC, + 0x8951: 0x6E26, + 0x8952: 0x5618, + 0x8953: 0x5504, + 0x8954: 0x6B1D, + 0x8955: 0x851A, + 0x8956: 0x9C3B, + 0x8957: 0x59E5, + 0x8958: 0x53A9, + 0x8959: 0x6D66, + 0x895A: 0x74DC, + 0x895B: 0x958F, + 0x895C: 0x5642, + 0x895D: 0x4E91, + 0x895E: 0x904B, + 0x895F: 0x96F2, + 0x8960: 0x834F, + 0x8961: 0x990C, + 0x8962: 0x53E1, + 0x8963: 0x55B6, + 0x8964: 0x5B30, + 0x8965: 0x5F71, + 0x8966: 0x6620, + 0x8967: 0x66F3, + 0x8968: 0x6804, + 0x8969: 0x6C38, + 0x896A: 0x6CF3, + 0x896B: 0x6D29, + 0x896C: 0x745B, + 0x896D: 0x76C8, + 0x896E: 0x7A4E, + 0x896F: 0x9834, + 0x8970: 0x82F1, + 0x8971: 0x885B, + 0x8972: 0x8A60, + 0x8973: 0x92ED, + 0x8974: 0x6DB2, + 0x8975: 0x75AB, + 0x8976: 0x76CA, + 0x8977: 0x99C5, + 0x8978: 0x60A6, + 0x8979: 0x8B01, + 0x897A: 0x8D8A, + 0x897B: 0x95B2, + 0x897C: 0x698E, + 0x897D: 0x53AD, + 0x897E: 0x5186, + 0x8980: 0x5712, + 0x8981: 0x5830, + 0x8982: 0x5944, + 0x8983: 0x5BB4, + 0x8984: 0x5EF6, + 0x8985: 0x6028, + 0x8986: 0x63A9, + 0x8987: 0x63F4, + 0x8988: 0x6CBF, + 0x8989: 0x6F14, + 0x898A: 0x708E, + 0x898B: 0x7114, + 0x898C: 0x7159, + 0x898D: 0x71D5, + 0x898E: 0x733F, + 0x898F: 0x7E01, + 0x8990: 0x8276, + 0x8991: 0x82D1, + 0x8992: 0x8597, + 0x8993: 0x9060, + 0x8994: 0x925B, + 0x8995: 0x9D1B, + 0x8996: 0x5869, + 0x8997: 0x65BC, + 0x8998: 0x6C5A, + 0x8999: 0x7525, + 0x899A: 0x51F9, + 0x899B: 0x592E, + 0x899C: 0x5965, + 0x899D: 0x5F80, + 0x899E: 0x5FDC, + 0x899F: 0x62BC, + 0x89A0: 0x65FA, + 0x89A1: 0x6A2A, + 0x89A2: 0x6B27, + 0x89A3: 0x6BB4, + 0x89A4: 0x738B, + 0x89A5: 0x7FC1, + 0x89A6: 0x8956, + 0x89A7: 0x9D2C, + 0x89A8: 0x9D0E, + 0x89A9: 0x9EC4, + 0x89AA: 0x5CA1, + 0x89AB: 0x6C96, + 0x89AC: 0x837B, + 0x89AD: 0x5104, + 0x89AE: 0x5C4B, + 0x89AF: 0x61B6, + 0x89B0: 0x81C6, + 0x89B1: 0x6876, + 0x89B2: 0x7261, + 0x89B3: 0x4E59, + 0x89B4: 0x4FFA, + 0x89B5: 0x5378, + 0x89B6: 0x6069, + 0x89B7: 0x6E29, + 0x89B8: 0x7A4F, + 0x89B9: 0x97F3, + 0x89BA: 0x4E0B, + 0x89BB: 0x5316, + 0x89BC: 0x4EEE, + 0x89BD: 0x4F55, + 0x89BE: 0x4F3D, + 0x89BF: 0x4FA1, + 0x89C0: 0x4F73, + 0x89C1: 0x52A0, + 0x89C2: 0x53EF, + 0x89C3: 0x5609, + 0x89C4: 0x590F, + 0x89C5: 0x5AC1, + 0x89C6: 0x5BB6, + 0x89C7: 0x5BE1, + 0x89C8: 0x79D1, + 0x89C9: 0x6687, + 0x89CA: 0x679C, + 0x89CB: 0x67B6, + 0x89CC: 0x6B4C, + 0x89CD: 0x6CB3, + 0x89CE: 0x706B, + 0x89CF: 0x73C2, + 0x89D0: 0x798D, + 0x89D1: 0x79BE, + 0x89D2: 0x7A3C, + 0x89D3: 0x7B87, + 0x89D4: 0x82B1, + 0x89D5: 0x82DB, + 0x89D6: 0x8304, + 0x89D7: 0x8377, + 0x89D8: 0x83EF, + 0x89D9: 0x83D3, + 0x89DA: 0x8766, + 0x89DB: 0x8AB2, + 0x89DC: 0x5629, + 0x89DD: 0x8CA8, + 0x89DE: 0x8FE6, + 0x89DF: 0x904E, + 0x89E0: 0x971E, + 0x89E1: 0x868A, + 0x89E2: 0x4FC4, + 0x89E3: 0x5CE8, + 0x89E4: 0x6211, + 0x89E5: 0x7259, + 0x89E6: 0x753B, + 0x89E7: 0x81E5, + 0x89E8: 0x82BD, + 0x89E9: 0x86FE, + 0x89EA: 0x8CC0, + 0x89EB: 0x96C5, + 0x89EC: 0x9913, + 0x89ED: 0x99D5, + 0x89EE: 0x4ECB, + 0x89EF: 0x4F1A, + 0x89F0: 0x89E3, + 0x89F1: 0x56DE, + 0x89F2: 0x584A, + 0x89F3: 0x58CA, + 0x89F4: 0x5EFB, + 0x89F5: 0x5FEB, + 0x89F6: 0x602A, + 0x89F7: 0x6094, + 0x89F8: 0x6062, + 0x89F9: 0x61D0, + 0x89FA: 0x6212, + 0x89FB: 0x62D0, + 0x89FC: 0x6539, + 0x8A40: 0x9B41, + 0x8A41: 0x6666, + 0x8A42: 0x68B0, + 0x8A43: 0x6D77, + 0x8A44: 0x7070, + 0x8A45: 0x754C, + 0x8A46: 0x7686, + 0x8A47: 0x7D75, + 0x8A48: 0x82A5, + 0x8A49: 0x87F9, + 0x8A4A: 0x958B, + 0x8A4B: 0x968E, + 0x8A4C: 0x8C9D, + 0x8A4D: 0x51F1, + 0x8A4E: 0x52BE, + 0x8A4F: 0x5916, + 0x8A50: 0x54B3, + 0x8A51: 0x5BB3, + 0x8A52: 0x5D16, + 0x8A53: 0x6168, + 0x8A54: 0x6982, + 0x8A55: 0x6DAF, + 0x8A56: 0x788D, + 0x8A57: 0x84CB, + 0x8A58: 0x8857, + 0x8A59: 0x8A72, + 0x8A5A: 0x93A7, + 0x8A5B: 0x9AB8, + 0x8A5C: 0x6D6C, + 0x8A5D: 0x99A8, + 0x8A5E: 0x86D9, + 0x8A5F: 0x57A3, + 0x8A60: 0x67FF, + 0x8A61: 0x86CE, + 0x8A62: 0x920E, + 0x8A63: 0x5283, + 0x8A64: 0x5687, + 0x8A65: 0x5404, + 0x8A66: 0x5ED3, + 0x8A67: 0x62E1, + 0x8A68: 0x64B9, + 0x8A69: 0x683C, + 0x8A6A: 0x6838, + 0x8A6B: 0x6BBB, + 0x8A6C: 0x7372, + 0x8A6D: 0x78BA, + 0x8A6E: 0x7A6B, + 0x8A6F: 0x899A, + 0x8A70: 0x89D2, + 0x8A71: 0x8D6B, + 0x8A72: 0x8F03, + 0x8A73: 0x90ED, + 0x8A74: 0x95A3, + 0x8A75: 0x9694, + 0x8A76: 0x9769, + 0x8A77: 0x5B66, + 0x8A78: 0x5CB3, + 0x8A79: 0x697D, + 0x8A7A: 0x984D, + 0x8A7B: 0x984E, + 0x8A7C: 0x639B, + 0x8A7D: 0x7B20, + 0x8A7E: 0x6A2B, + 0x8A80: 0x6A7F, + 0x8A81: 0x68B6, + 0x8A82: 0x9C0D, + 0x8A83: 0x6F5F, + 0x8A84: 0x5272, + 0x8A85: 0x559D, + 0x8A86: 0x6070, + 0x8A87: 0x62EC, + 0x8A88: 0x6D3B, + 0x8A89: 0x6E07, + 0x8A8A: 0x6ED1, + 0x8A8B: 0x845B, + 0x8A8C: 0x8910, + 0x8A8D: 0x8F44, + 0x8A8E: 0x4E14, + 0x8A8F: 0x9C39, + 0x8A90: 0x53F6, + 0x8A91: 0x691B, + 0x8A92: 0x6A3A, + 0x8A93: 0x9784, + 0x8A94: 0x682A, + 0x8A95: 0x515C, + 0x8A96: 0x7AC3, + 0x8A97: 0x84B2, + 0x8A98: 0x91DC, + 0x8A99: 0x938C, + 0x8A9A: 0x565B, + 0x8A9B: 0x9D28, + 0x8A9C: 0x6822, + 0x8A9D: 0x8305, + 0x8A9E: 0x8431, + 0x8A9F: 0x7CA5, + 0x8AA0: 0x5208, + 0x8AA1: 0x82C5, + 0x8AA2: 0x74E6, + 0x8AA3: 0x4E7E, + 0x8AA4: 0x4F83, + 0x8AA5: 0x51A0, + 0x8AA6: 0x5BD2, + 0x8AA7: 0x520A, + 0x8AA8: 0x52D8, + 0x8AA9: 0x52E7, + 0x8AAA: 0x5DFB, + 0x8AAB: 0x559A, + 0x8AAC: 0x582A, + 0x8AAD: 0x59E6, + 0x8AAE: 0x5B8C, + 0x8AAF: 0x5B98, + 0x8AB0: 0x5BDB, + 0x8AB1: 0x5E72, + 0x8AB2: 0x5E79, + 0x8AB3: 0x60A3, + 0x8AB4: 0x611F, + 0x8AB5: 0x6163, + 0x8AB6: 0x61BE, + 0x8AB7: 0x63DB, + 0x8AB8: 0x6562, + 0x8AB9: 0x67D1, + 0x8ABA: 0x6853, + 0x8ABB: 0x68FA, + 0x8ABC: 0x6B3E, + 0x8ABD: 0x6B53, + 0x8ABE: 0x6C57, + 0x8ABF: 0x6F22, + 0x8AC0: 0x6F97, + 0x8AC1: 0x6F45, + 0x8AC2: 0x74B0, + 0x8AC3: 0x7518, + 0x8AC4: 0x76E3, + 0x8AC5: 0x770B, + 0x8AC6: 0x7AFF, + 0x8AC7: 0x7BA1, + 0x8AC8: 0x7C21, + 0x8AC9: 0x7DE9, + 0x8ACA: 0x7F36, + 0x8ACB: 0x7FF0, + 0x8ACC: 0x809D, + 0x8ACD: 0x8266, + 0x8ACE: 0x839E, + 0x8ACF: 0x89B3, + 0x8AD0: 0x8ACC, + 0x8AD1: 0x8CAB, + 0x8AD2: 0x9084, + 0x8AD3: 0x9451, + 0x8AD4: 0x9593, + 0x8AD5: 0x9591, + 0x8AD6: 0x95A2, + 0x8AD7: 0x9665, + 0x8AD8: 0x97D3, + 0x8AD9: 0x9928, + 0x8ADA: 0x8218, + 0x8ADB: 0x4E38, + 0x8ADC: 0x542B, + 0x8ADD: 0x5CB8, + 0x8ADE: 0x5DCC, + 0x8ADF: 0x73A9, + 0x8AE0: 0x764C, + 0x8AE1: 0x773C, + 0x8AE2: 0x5CA9, + 0x8AE3: 0x7FEB, + 0x8AE4: 0x8D0B, + 0x8AE5: 0x96C1, + 0x8AE6: 0x9811, + 0x8AE7: 0x9854, + 0x8AE8: 0x9858, + 0x8AE9: 0x4F01, + 0x8AEA: 0x4F0E, + 0x8AEB: 0x5371, + 0x8AEC: 0x559C, + 0x8AED: 0x5668, + 0x8AEE: 0x57FA, + 0x8AEF: 0x5947, + 0x8AF0: 0x5B09, + 0x8AF1: 0x5BC4, + 0x8AF2: 0x5C90, + 0x8AF3: 0x5E0C, + 0x8AF4: 0x5E7E, + 0x8AF5: 0x5FCC, + 0x8AF6: 0x63EE, + 0x8AF7: 0x673A, + 0x8AF8: 0x65D7, + 0x8AF9: 0x65E2, + 0x8AFA: 0x671F, + 0x8AFB: 0x68CB, + 0x8AFC: 0x68C4, + 0x8B40: 0x6A5F, + 0x8B41: 0x5E30, + 0x8B42: 0x6BC5, + 0x8B43: 0x6C17, + 0x8B44: 0x6C7D, + 0x8B45: 0x757F, + 0x8B46: 0x7948, + 0x8B47: 0x5B63, + 0x8B48: 0x7A00, + 0x8B49: 0x7D00, + 0x8B4A: 0x5FBD, + 0x8B4B: 0x898F, + 0x8B4C: 0x8A18, + 0x8B4D: 0x8CB4, + 0x8B4E: 0x8D77, + 0x8B4F: 0x8ECC, + 0x8B50: 0x8F1D, + 0x8B51: 0x98E2, + 0x8B52: 0x9A0E, + 0x8B53: 0x9B3C, + 0x8B54: 0x4E80, + 0x8B55: 0x507D, + 0x8B56: 0x5100, + 0x8B57: 0x5993, + 0x8B58: 0x5B9C, + 0x8B59: 0x622F, + 0x8B5A: 0x6280, + 0x8B5B: 0x64EC, + 0x8B5C: 0x6B3A, + 0x8B5D: 0x72A0, + 0x8B5E: 0x7591, + 0x8B5F: 0x7947, + 0x8B60: 0x7FA9, + 0x8B61: 0x87FB, + 0x8B62: 0x8ABC, + 0x8B63: 0x8B70, + 0x8B64: 0x63AC, + 0x8B65: 0x83CA, + 0x8B66: 0x97A0, + 0x8B67: 0x5409, + 0x8B68: 0x5403, + 0x8B69: 0x55AB, + 0x8B6A: 0x6854, + 0x8B6B: 0x6A58, + 0x8B6C: 0x8A70, + 0x8B6D: 0x7827, + 0x8B6E: 0x6775, + 0x8B6F: 0x9ECD, + 0x8B70: 0x5374, + 0x8B71: 0x5BA2, + 0x8B72: 0x811A, + 0x8B73: 0x8650, + 0x8B74: 0x9006, + 0x8B75: 0x4E18, + 0x8B76: 0x4E45, + 0x8B77: 0x4EC7, + 0x8B78: 0x4F11, + 0x8B79: 0x53CA, + 0x8B7A: 0x5438, + 0x8B7B: 0x5BAE, + 0x8B7C: 0x5F13, + 0x8B7D: 0x6025, + 0x8B7E: 0x6551, + 0x8B80: 0x673D, + 0x8B81: 0x6C42, + 0x8B82: 0x6C72, + 0x8B83: 0x6CE3, + 0x8B84: 0x7078, + 0x8B85: 0x7403, + 0x8B86: 0x7A76, + 0x8B87: 0x7AAE, + 0x8B88: 0x7B08, + 0x8B89: 0x7D1A, + 0x8B8A: 0x7CFE, + 0x8B8B: 0x7D66, + 0x8B8C: 0x65E7, + 0x8B8D: 0x725B, + 0x8B8E: 0x53BB, + 0x8B8F: 0x5C45, + 0x8B90: 0x5DE8, + 0x8B91: 0x62D2, + 0x8B92: 0x62E0, + 0x8B93: 0x6319, + 0x8B94: 0x6E20, + 0x8B95: 0x865A, + 0x8B96: 0x8A31, + 0x8B97: 0x8DDD, + 0x8B98: 0x92F8, + 0x8B99: 0x6F01, + 0x8B9A: 0x79A6, + 0x8B9B: 0x9B5A, + 0x8B9C: 0x4EA8, + 0x8B9D: 0x4EAB, + 0x8B9E: 0x4EAC, + 0x8B9F: 0x4F9B, + 0x8BA0: 0x4FA0, + 0x8BA1: 0x50D1, + 0x8BA2: 0x5147, + 0x8BA3: 0x7AF6, + 0x8BA4: 0x5171, + 0x8BA5: 0x51F6, + 0x8BA6: 0x5354, + 0x8BA7: 0x5321, + 0x8BA8: 0x537F, + 0x8BA9: 0x53EB, + 0x8BAA: 0x55AC, + 0x8BAB: 0x5883, + 0x8BAC: 0x5CE1, + 0x8BAD: 0x5F37, + 0x8BAE: 0x5F4A, + 0x8BAF: 0x602F, + 0x8BB0: 0x6050, + 0x8BB1: 0x606D, + 0x8BB2: 0x631F, + 0x8BB3: 0x6559, + 0x8BB4: 0x6A4B, + 0x8BB5: 0x6CC1, + 0x8BB6: 0x72C2, + 0x8BB7: 0x72ED, + 0x8BB8: 0x77EF, + 0x8BB9: 0x80F8, + 0x8BBA: 0x8105, + 0x8BBB: 0x8208, + 0x8BBC: 0x854E, + 0x8BBD: 0x90F7, + 0x8BBE: 0x93E1, + 0x8BBF: 0x97FF, + 0x8BC0: 0x9957, + 0x8BC1: 0x9A5A, + 0x8BC2: 0x4EF0, + 0x8BC3: 0x51DD, + 0x8BC4: 0x5C2D, + 0x8BC5: 0x6681, + 0x8BC6: 0x696D, + 0x8BC7: 0x5C40, + 0x8BC8: 0x66F2, + 0x8BC9: 0x6975, + 0x8BCA: 0x7389, + 0x8BCB: 0x6850, + 0x8BCC: 0x7C81, + 0x8BCD: 0x50C5, + 0x8BCE: 0x52E4, + 0x8BCF: 0x5747, + 0x8BD0: 0x5DFE, + 0x8BD1: 0x9326, + 0x8BD2: 0x65A4, + 0x8BD3: 0x6B23, + 0x8BD4: 0x6B3D, + 0x8BD5: 0x7434, + 0x8BD6: 0x7981, + 0x8BD7: 0x79BD, + 0x8BD8: 0x7B4B, + 0x8BD9: 0x7DCA, + 0x8BDA: 0x82B9, + 0x8BDB: 0x83CC, + 0x8BDC: 0x887F, + 0x8BDD: 0x895F, + 0x8BDE: 0x8B39, + 0x8BDF: 0x8FD1, + 0x8BE0: 0x91D1, + 0x8BE1: 0x541F, + 0x8BE2: 0x9280, + 0x8BE3: 0x4E5D, + 0x8BE4: 0x5036, + 0x8BE5: 0x53E5, + 0x8BE6: 0x533A, + 0x8BE7: 0x72D7, + 0x8BE8: 0x7396, + 0x8BE9: 0x77E9, + 0x8BEA: 0x82E6, + 0x8BEB: 0x8EAF, + 0x8BEC: 0x99C6, + 0x8BED: 0x99C8, + 0x8BEE: 0x99D2, + 0x8BEF: 0x5177, + 0x8BF0: 0x611A, + 0x8BF1: 0x865E, + 0x8BF2: 0x55B0, + 0x8BF3: 0x7A7A, + 0x8BF4: 0x5076, + 0x8BF5: 0x5BD3, + 0x8BF6: 0x9047, + 0x8BF7: 0x9685, + 0x8BF8: 0x4E32, + 0x8BF9: 0x6ADB, + 0x8BFA: 0x91E7, + 0x8BFB: 0x5C51, + 0x8BFC: 0x5C48, + 0x8C40: 0x6398, + 0x8C41: 0x7A9F, + 0x8C42: 0x6C93, + 0x8C43: 0x9774, + 0x8C44: 0x8F61, + 0x8C45: 0x7AAA, + 0x8C46: 0x718A, + 0x8C47: 0x9688, + 0x8C48: 0x7C82, + 0x8C49: 0x6817, + 0x8C4A: 0x7E70, + 0x8C4B: 0x6851, + 0x8C4C: 0x936C, + 0x8C4D: 0x52F2, + 0x8C4E: 0x541B, + 0x8C4F: 0x85AB, + 0x8C50: 0x8A13, + 0x8C51: 0x7FA4, + 0x8C52: 0x8ECD, + 0x8C53: 0x90E1, + 0x8C54: 0x5366, + 0x8C55: 0x8888, + 0x8C56: 0x7941, + 0x8C57: 0x4FC2, + 0x8C58: 0x50BE, + 0x8C59: 0x5211, + 0x8C5A: 0x5144, + 0x8C5B: 0x5553, + 0x8C5C: 0x572D, + 0x8C5D: 0x73EA, + 0x8C5E: 0x578B, + 0x8C5F: 0x5951, + 0x8C60: 0x5F62, + 0x8C61: 0x5F84, + 0x8C62: 0x6075, + 0x8C63: 0x6176, + 0x8C64: 0x6167, + 0x8C65: 0x61A9, + 0x8C66: 0x63B2, + 0x8C67: 0x643A, + 0x8C68: 0x656C, + 0x8C69: 0x666F, + 0x8C6A: 0x6842, + 0x8C6B: 0x6E13, + 0x8C6C: 0x7566, + 0x8C6D: 0x7A3D, + 0x8C6E: 0x7CFB, + 0x8C6F: 0x7D4C, + 0x8C70: 0x7D99, + 0x8C71: 0x7E4B, + 0x8C72: 0x7F6B, + 0x8C73: 0x830E, + 0x8C74: 0x834A, + 0x8C75: 0x86CD, + 0x8C76: 0x8A08, + 0x8C77: 0x8A63, + 0x8C78: 0x8B66, + 0x8C79: 0x8EFD, + 0x8C7A: 0x981A, + 0x8C7B: 0x9D8F, + 0x8C7C: 0x82B8, + 0x8C7D: 0x8FCE, + 0x8C7E: 0x9BE8, + 0x8C80: 0x5287, + 0x8C81: 0x621F, + 0x8C82: 0x6483, + 0x8C83: 0x6FC0, + 0x8C84: 0x9699, + 0x8C85: 0x6841, + 0x8C86: 0x5091, + 0x8C87: 0x6B20, + 0x8C88: 0x6C7A, + 0x8C89: 0x6F54, + 0x8C8A: 0x7A74, + 0x8C8B: 0x7D50, + 0x8C8C: 0x8840, + 0x8C8D: 0x8A23, + 0x8C8E: 0x6708, + 0x8C8F: 0x4EF6, + 0x8C90: 0x5039, + 0x8C91: 0x5026, + 0x8C92: 0x5065, + 0x8C93: 0x517C, + 0x8C94: 0x5238, + 0x8C95: 0x5263, + 0x8C96: 0x55A7, + 0x8C97: 0x570F, + 0x8C98: 0x5805, + 0x8C99: 0x5ACC, + 0x8C9A: 0x5EFA, + 0x8C9B: 0x61B2, + 0x8C9C: 0x61F8, + 0x8C9D: 0x62F3, + 0x8C9E: 0x6372, + 0x8C9F: 0x691C, + 0x8CA0: 0x6A29, + 0x8CA1: 0x727D, + 0x8CA2: 0x72AC, + 0x8CA3: 0x732E, + 0x8CA4: 0x7814, + 0x8CA5: 0x786F, + 0x8CA6: 0x7D79, + 0x8CA7: 0x770C, + 0x8CA8: 0x80A9, + 0x8CA9: 0x898B, + 0x8CAA: 0x8B19, + 0x8CAB: 0x8CE2, + 0x8CAC: 0x8ED2, + 0x8CAD: 0x9063, + 0x8CAE: 0x9375, + 0x8CAF: 0x967A, + 0x8CB0: 0x9855, + 0x8CB1: 0x9A13, + 0x8CB2: 0x9E78, + 0x8CB3: 0x5143, + 0x8CB4: 0x539F, + 0x8CB5: 0x53B3, + 0x8CB6: 0x5E7B, + 0x8CB7: 0x5F26, + 0x8CB8: 0x6E1B, + 0x8CB9: 0x6E90, + 0x8CBA: 0x7384, + 0x8CBB: 0x73FE, + 0x8CBC: 0x7D43, + 0x8CBD: 0x8237, + 0x8CBE: 0x8A00, + 0x8CBF: 0x8AFA, + 0x8CC0: 0x9650, + 0x8CC1: 0x4E4E, + 0x8CC2: 0x500B, + 0x8CC3: 0x53E4, + 0x8CC4: 0x547C, + 0x8CC5: 0x56FA, + 0x8CC6: 0x59D1, + 0x8CC7: 0x5B64, + 0x8CC8: 0x5DF1, + 0x8CC9: 0x5EAB, + 0x8CCA: 0x5F27, + 0x8CCB: 0x6238, + 0x8CCC: 0x6545, + 0x8CCD: 0x67AF, + 0x8CCE: 0x6E56, + 0x8CCF: 0x72D0, + 0x8CD0: 0x7CCA, + 0x8CD1: 0x88B4, + 0x8CD2: 0x80A1, + 0x8CD3: 0x80E1, + 0x8CD4: 0x83F0, + 0x8CD5: 0x864E, + 0x8CD6: 0x8A87, + 0x8CD7: 0x8DE8, + 0x8CD8: 0x9237, + 0x8CD9: 0x96C7, + 0x8CDA: 0x9867, + 0x8CDB: 0x9F13, + 0x8CDC: 0x4E94, + 0x8CDD: 0x4E92, + 0x8CDE: 0x4F0D, + 0x8CDF: 0x5348, + 0x8CE0: 0x5449, + 0x8CE1: 0x543E, + 0x8CE2: 0x5A2F, + 0x8CE3: 0x5F8C, + 0x8CE4: 0x5FA1, + 0x8CE5: 0x609F, + 0x8CE6: 0x68A7, + 0x8CE7: 0x6A8E, + 0x8CE8: 0x745A, + 0x8CE9: 0x7881, + 0x8CEA: 0x8A9E, + 0x8CEB: 0x8AA4, + 0x8CEC: 0x8B77, + 0x8CED: 0x9190, + 0x8CEE: 0x4E5E, + 0x8CEF: 0x9BC9, + 0x8CF0: 0x4EA4, + 0x8CF1: 0x4F7C, + 0x8CF2: 0x4FAF, + 0x8CF3: 0x5019, + 0x8CF4: 0x5016, + 0x8CF5: 0x5149, + 0x8CF6: 0x516C, + 0x8CF7: 0x529F, + 0x8CF8: 0x52B9, + 0x8CF9: 0x52FE, + 0x8CFA: 0x539A, + 0x8CFB: 0x53E3, + 0x8CFC: 0x5411, + 0x8D40: 0x540E, + 0x8D41: 0x5589, + 0x8D42: 0x5751, + 0x8D43: 0x57A2, + 0x8D44: 0x597D, + 0x8D45: 0x5B54, + 0x8D46: 0x5B5D, + 0x8D47: 0x5B8F, + 0x8D48: 0x5DE5, + 0x8D49: 0x5DE7, + 0x8D4A: 0x5DF7, + 0x8D4B: 0x5E78, + 0x8D4C: 0x5E83, + 0x8D4D: 0x5E9A, + 0x8D4E: 0x5EB7, + 0x8D4F: 0x5F18, + 0x8D50: 0x6052, + 0x8D51: 0x614C, + 0x8D52: 0x6297, + 0x8D53: 0x62D8, + 0x8D54: 0x63A7, + 0x8D55: 0x653B, + 0x8D56: 0x6602, + 0x8D57: 0x6643, + 0x8D58: 0x66F4, + 0x8D59: 0x676D, + 0x8D5A: 0x6821, + 0x8D5B: 0x6897, + 0x8D5C: 0x69CB, + 0x8D5D: 0x6C5F, + 0x8D5E: 0x6D2A, + 0x8D5F: 0x6D69, + 0x8D60: 0x6E2F, + 0x8D61: 0x6E9D, + 0x8D62: 0x7532, + 0x8D63: 0x7687, + 0x8D64: 0x786C, + 0x8D65: 0x7A3F, + 0x8D66: 0x7CE0, + 0x8D67: 0x7D05, + 0x8D68: 0x7D18, + 0x8D69: 0x7D5E, + 0x8D6A: 0x7DB1, + 0x8D6B: 0x8015, + 0x8D6C: 0x8003, + 0x8D6D: 0x80AF, + 0x8D6E: 0x80B1, + 0x8D6F: 0x8154, + 0x8D70: 0x818F, + 0x8D71: 0x822A, + 0x8D72: 0x8352, + 0x8D73: 0x884C, + 0x8D74: 0x8861, + 0x8D75: 0x8B1B, + 0x8D76: 0x8CA2, + 0x8D77: 0x8CFC, + 0x8D78: 0x90CA, + 0x8D79: 0x9175, + 0x8D7A: 0x9271, + 0x8D7B: 0x783F, + 0x8D7C: 0x92FC, + 0x8D7D: 0x95A4, + 0x8D7E: 0x964D, + 0x8D80: 0x9805, + 0x8D81: 0x9999, + 0x8D82: 0x9AD8, + 0x8D83: 0x9D3B, + 0x8D84: 0x525B, + 0x8D85: 0x52AB, + 0x8D86: 0x53F7, + 0x8D87: 0x5408, + 0x8D88: 0x58D5, + 0x8D89: 0x62F7, + 0x8D8A: 0x6FE0, + 0x8D8B: 0x8C6A, + 0x8D8C: 0x8F5F, + 0x8D8D: 0x9EB9, + 0x8D8E: 0x514B, + 0x8D8F: 0x523B, + 0x8D90: 0x544A, + 0x8D91: 0x56FD, + 0x8D92: 0x7A40, + 0x8D93: 0x9177, + 0x8D94: 0x9D60, + 0x8D95: 0x9ED2, + 0x8D96: 0x7344, + 0x8D97: 0x6F09, + 0x8D98: 0x8170, + 0x8D99: 0x7511, + 0x8D9A: 0x5FFD, + 0x8D9B: 0x60DA, + 0x8D9C: 0x9AA8, + 0x8D9D: 0x72DB, + 0x8D9E: 0x8FBC, + 0x8D9F: 0x6B64, + 0x8DA0: 0x9803, + 0x8DA1: 0x4ECA, + 0x8DA2: 0x56F0, + 0x8DA3: 0x5764, + 0x8DA4: 0x58BE, + 0x8DA5: 0x5A5A, + 0x8DA6: 0x6068, + 0x8DA7: 0x61C7, + 0x8DA8: 0x660F, + 0x8DA9: 0x6606, + 0x8DAA: 0x6839, + 0x8DAB: 0x68B1, + 0x8DAC: 0x6DF7, + 0x8DAD: 0x75D5, + 0x8DAE: 0x7D3A, + 0x8DAF: 0x826E, + 0x8DB0: 0x9B42, + 0x8DB1: 0x4E9B, + 0x8DB2: 0x4F50, + 0x8DB3: 0x53C9, + 0x8DB4: 0x5506, + 0x8DB5: 0x5D6F, + 0x8DB6: 0x5DE6, + 0x8DB7: 0x5DEE, + 0x8DB8: 0x67FB, + 0x8DB9: 0x6C99, + 0x8DBA: 0x7473, + 0x8DBB: 0x7802, + 0x8DBC: 0x8A50, + 0x8DBD: 0x9396, + 0x8DBE: 0x88DF, + 0x8DBF: 0x5750, + 0x8DC0: 0x5EA7, + 0x8DC1: 0x632B, + 0x8DC2: 0x50B5, + 0x8DC3: 0x50AC, + 0x8DC4: 0x518D, + 0x8DC5: 0x6700, + 0x8DC6: 0x54C9, + 0x8DC7: 0x585E, + 0x8DC8: 0x59BB, + 0x8DC9: 0x5BB0, + 0x8DCA: 0x5F69, + 0x8DCB: 0x624D, + 0x8DCC: 0x63A1, + 0x8DCD: 0x683D, + 0x8DCE: 0x6B73, + 0x8DCF: 0x6E08, + 0x8DD0: 0x707D, + 0x8DD1: 0x91C7, + 0x8DD2: 0x7280, + 0x8DD3: 0x7815, + 0x8DD4: 0x7826, + 0x8DD5: 0x796D, + 0x8DD6: 0x658E, + 0x8DD7: 0x7D30, + 0x8DD8: 0x83DC, + 0x8DD9: 0x88C1, + 0x8DDA: 0x8F09, + 0x8DDB: 0x969B, + 0x8DDC: 0x5264, + 0x8DDD: 0x5728, + 0x8DDE: 0x6750, + 0x8DDF: 0x7F6A, + 0x8DE0: 0x8CA1, + 0x8DE1: 0x51B4, + 0x8DE2: 0x5742, + 0x8DE3: 0x962A, + 0x8DE4: 0x583A, + 0x8DE5: 0x698A, + 0x8DE6: 0x80B4, + 0x8DE7: 0x54B2, + 0x8DE8: 0x5D0E, + 0x8DE9: 0x57FC, + 0x8DEA: 0x7895, + 0x8DEB: 0x9DFA, + 0x8DEC: 0x4F5C, + 0x8DED: 0x524A, + 0x8DEE: 0x548B, + 0x8DEF: 0x643E, + 0x8DF0: 0x6628, + 0x8DF1: 0x6714, + 0x8DF2: 0x67F5, + 0x8DF3: 0x7A84, + 0x8DF4: 0x7B56, + 0x8DF5: 0x7D22, + 0x8DF6: 0x932F, + 0x8DF7: 0x685C, + 0x8DF8: 0x9BAD, + 0x8DF9: 0x7B39, + 0x8DFA: 0x5319, + 0x8DFB: 0x518A, + 0x8DFC: 0x5237, + 0x8E40: 0x5BDF, + 0x8E41: 0x62F6, + 0x8E42: 0x64AE, + 0x8E43: 0x64E6, + 0x8E44: 0x672D, + 0x8E45: 0x6BBA, + 0x8E46: 0x85A9, + 0x8E47: 0x96D1, + 0x8E48: 0x7690, + 0x8E49: 0x9BD6, + 0x8E4A: 0x634C, + 0x8E4B: 0x9306, + 0x8E4C: 0x9BAB, + 0x8E4D: 0x76BF, + 0x8E4E: 0x6652, + 0x8E4F: 0x4E09, + 0x8E50: 0x5098, + 0x8E51: 0x53C2, + 0x8E52: 0x5C71, + 0x8E53: 0x60E8, + 0x8E54: 0x6492, + 0x8E55: 0x6563, + 0x8E56: 0x685F, + 0x8E57: 0x71E6, + 0x8E58: 0x73CA, + 0x8E59: 0x7523, + 0x8E5A: 0x7B97, + 0x8E5B: 0x7E82, + 0x8E5C: 0x8695, + 0x8E5D: 0x8B83, + 0x8E5E: 0x8CDB, + 0x8E5F: 0x9178, + 0x8E60: 0x9910, + 0x8E61: 0x65AC, + 0x8E62: 0x66AB, + 0x8E63: 0x6B8B, + 0x8E64: 0x4ED5, + 0x8E65: 0x4ED4, + 0x8E66: 0x4F3A, + 0x8E67: 0x4F7F, + 0x8E68: 0x523A, + 0x8E69: 0x53F8, + 0x8E6A: 0x53F2, + 0x8E6B: 0x55E3, + 0x8E6C: 0x56DB, + 0x8E6D: 0x58EB, + 0x8E6E: 0x59CB, + 0x8E6F: 0x59C9, + 0x8E70: 0x59FF, + 0x8E71: 0x5B50, + 0x8E72: 0x5C4D, + 0x8E73: 0x5E02, + 0x8E74: 0x5E2B, + 0x8E75: 0x5FD7, + 0x8E76: 0x601D, + 0x8E77: 0x6307, + 0x8E78: 0x652F, + 0x8E79: 0x5B5C, + 0x8E7A: 0x65AF, + 0x8E7B: 0x65BD, + 0x8E7C: 0x65E8, + 0x8E7D: 0x679D, + 0x8E7E: 0x6B62, + 0x8E80: 0x6B7B, + 0x8E81: 0x6C0F, + 0x8E82: 0x7345, + 0x8E83: 0x7949, + 0x8E84: 0x79C1, + 0x8E85: 0x7CF8, + 0x8E86: 0x7D19, + 0x8E87: 0x7D2B, + 0x8E88: 0x80A2, + 0x8E89: 0x8102, + 0x8E8A: 0x81F3, + 0x8E8B: 0x8996, + 0x8E8C: 0x8A5E, + 0x8E8D: 0x8A69, + 0x8E8E: 0x8A66, + 0x8E8F: 0x8A8C, + 0x8E90: 0x8AEE, + 0x8E91: 0x8CC7, + 0x8E92: 0x8CDC, + 0x8E93: 0x96CC, + 0x8E94: 0x98FC, + 0x8E95: 0x6B6F, + 0x8E96: 0x4E8B, + 0x8E97: 0x4F3C, + 0x8E98: 0x4F8D, + 0x8E99: 0x5150, + 0x8E9A: 0x5B57, + 0x8E9B: 0x5BFA, + 0x8E9C: 0x6148, + 0x8E9D: 0x6301, + 0x8E9E: 0x6642, + 0x8E9F: 0x6B21, + 0x8EA0: 0x6ECB, + 0x8EA1: 0x6CBB, + 0x8EA2: 0x723E, + 0x8EA3: 0x74BD, + 0x8EA4: 0x75D4, + 0x8EA5: 0x78C1, + 0x8EA6: 0x793A, + 0x8EA7: 0x800C, + 0x8EA8: 0x8033, + 0x8EA9: 0x81EA, + 0x8EAA: 0x8494, + 0x8EAB: 0x8F9E, + 0x8EAC: 0x6C50, + 0x8EAD: 0x9E7F, + 0x8EAE: 0x5F0F, + 0x8EAF: 0x8B58, + 0x8EB0: 0x9D2B, + 0x8EB1: 0x7AFA, + 0x8EB2: 0x8EF8, + 0x8EB3: 0x5B8D, + 0x8EB4: 0x96EB, + 0x8EB5: 0x4E03, + 0x8EB6: 0x53F1, + 0x8EB7: 0x57F7, + 0x8EB8: 0x5931, + 0x8EB9: 0x5AC9, + 0x8EBA: 0x5BA4, + 0x8EBB: 0x6089, + 0x8EBC: 0x6E7F, + 0x8EBD: 0x6F06, + 0x8EBE: 0x75BE, + 0x8EBF: 0x8CEA, + 0x8EC0: 0x5B9F, + 0x8EC1: 0x8500, + 0x8EC2: 0x7BE0, + 0x8EC3: 0x5072, + 0x8EC4: 0x67F4, + 0x8EC5: 0x829D, + 0x8EC6: 0x5C61, + 0x8EC7: 0x854A, + 0x8EC8: 0x7E1E, + 0x8EC9: 0x820E, + 0x8ECA: 0x5199, + 0x8ECB: 0x5C04, + 0x8ECC: 0x6368, + 0x8ECD: 0x8D66, + 0x8ECE: 0x659C, + 0x8ECF: 0x716E, + 0x8ED0: 0x793E, + 0x8ED1: 0x7D17, + 0x8ED2: 0x8005, + 0x8ED3: 0x8B1D, + 0x8ED4: 0x8ECA, + 0x8ED5: 0x906E, + 0x8ED6: 0x86C7, + 0x8ED7: 0x90AA, + 0x8ED8: 0x501F, + 0x8ED9: 0x52FA, + 0x8EDA: 0x5C3A, + 0x8EDB: 0x6753, + 0x8EDC: 0x707C, + 0x8EDD: 0x7235, + 0x8EDE: 0x914C, + 0x8EDF: 0x91C8, + 0x8EE0: 0x932B, + 0x8EE1: 0x82E5, + 0x8EE2: 0x5BC2, + 0x8EE3: 0x5F31, + 0x8EE4: 0x60F9, + 0x8EE5: 0x4E3B, + 0x8EE6: 0x53D6, + 0x8EE7: 0x5B88, + 0x8EE8: 0x624B, + 0x8EE9: 0x6731, + 0x8EEA: 0x6B8A, + 0x8EEB: 0x72E9, + 0x8EEC: 0x73E0, + 0x8EED: 0x7A2E, + 0x8EEE: 0x816B, + 0x8EEF: 0x8DA3, + 0x8EF0: 0x9152, + 0x8EF1: 0x9996, + 0x8EF2: 0x5112, + 0x8EF3: 0x53D7, + 0x8EF4: 0x546A, + 0x8EF5: 0x5BFF, + 0x8EF6: 0x6388, + 0x8EF7: 0x6A39, + 0x8EF8: 0x7DAC, + 0x8EF9: 0x9700, + 0x8EFA: 0x56DA, + 0x8EFB: 0x53CE, + 0x8EFC: 0x5468, + 0x8F40: 0x5B97, + 0x8F41: 0x5C31, + 0x8F42: 0x5DDE, + 0x8F43: 0x4FEE, + 0x8F44: 0x6101, + 0x8F45: 0x62FE, + 0x8F46: 0x6D32, + 0x8F47: 0x79C0, + 0x8F48: 0x79CB, + 0x8F49: 0x7D42, + 0x8F4A: 0x7E4D, + 0x8F4B: 0x7FD2, + 0x8F4C: 0x81ED, + 0x8F4D: 0x821F, + 0x8F4E: 0x8490, + 0x8F4F: 0x8846, + 0x8F50: 0x8972, + 0x8F51: 0x8B90, + 0x8F52: 0x8E74, + 0x8F53: 0x8F2F, + 0x8F54: 0x9031, + 0x8F55: 0x914B, + 0x8F56: 0x916C, + 0x8F57: 0x96C6, + 0x8F58: 0x919C, + 0x8F59: 0x4EC0, + 0x8F5A: 0x4F4F, + 0x8F5B: 0x5145, + 0x8F5C: 0x5341, + 0x8F5D: 0x5F93, + 0x8F5E: 0x620E, + 0x8F5F: 0x67D4, + 0x8F60: 0x6C41, + 0x8F61: 0x6E0B, + 0x8F62: 0x7363, + 0x8F63: 0x7E26, + 0x8F64: 0x91CD, + 0x8F65: 0x9283, + 0x8F66: 0x53D4, + 0x8F67: 0x5919, + 0x8F68: 0x5BBF, + 0x8F69: 0x6DD1, + 0x8F6A: 0x795D, + 0x8F6B: 0x7E2E, + 0x8F6C: 0x7C9B, + 0x8F6D: 0x587E, + 0x8F6E: 0x719F, + 0x8F6F: 0x51FA, + 0x8F70: 0x8853, + 0x8F71: 0x8FF0, + 0x8F72: 0x4FCA, + 0x8F73: 0x5CFB, + 0x8F74: 0x6625, + 0x8F75: 0x77AC, + 0x8F76: 0x7AE3, + 0x8F77: 0x821C, + 0x8F78: 0x99FF, + 0x8F79: 0x51C6, + 0x8F7A: 0x5FAA, + 0x8F7B: 0x65EC, + 0x8F7C: 0x696F, + 0x8F7D: 0x6B89, + 0x8F7E: 0x6DF3, + 0x8F80: 0x6E96, + 0x8F81: 0x6F64, + 0x8F82: 0x76FE, + 0x8F83: 0x7D14, + 0x8F84: 0x5DE1, + 0x8F85: 0x9075, + 0x8F86: 0x9187, + 0x8F87: 0x9806, + 0x8F88: 0x51E6, + 0x8F89: 0x521D, + 0x8F8A: 0x6240, + 0x8F8B: 0x6691, + 0x8F8C: 0x66D9, + 0x8F8D: 0x6E1A, + 0x8F8E: 0x5EB6, + 0x8F8F: 0x7DD2, + 0x8F90: 0x7F72, + 0x8F91: 0x66F8, + 0x8F92: 0x85AF, + 0x8F93: 0x85F7, + 0x8F94: 0x8AF8, + 0x8F95: 0x52A9, + 0x8F96: 0x53D9, + 0x8F97: 0x5973, + 0x8F98: 0x5E8F, + 0x8F99: 0x5F90, + 0x8F9A: 0x6055, + 0x8F9B: 0x92E4, + 0x8F9C: 0x9664, + 0x8F9D: 0x50B7, + 0x8F9E: 0x511F, + 0x8F9F: 0x52DD, + 0x8FA0: 0x5320, + 0x8FA1: 0x5347, + 0x8FA2: 0x53EC, + 0x8FA3: 0x54E8, + 0x8FA4: 0x5546, + 0x8FA5: 0x5531, + 0x8FA6: 0x5617, + 0x8FA7: 0x5968, + 0x8FA8: 0x59BE, + 0x8FA9: 0x5A3C, + 0x8FAA: 0x5BB5, + 0x8FAB: 0x5C06, + 0x8FAC: 0x5C0F, + 0x8FAD: 0x5C11, + 0x8FAE: 0x5C1A, + 0x8FAF: 0x5E84, + 0x8FB0: 0x5E8A, + 0x8FB1: 0x5EE0, + 0x8FB2: 0x5F70, + 0x8FB3: 0x627F, + 0x8FB4: 0x6284, + 0x8FB5: 0x62DB, + 0x8FB6: 0x638C, + 0x8FB7: 0x6377, + 0x8FB8: 0x6607, + 0x8FB9: 0x660C, + 0x8FBA: 0x662D, + 0x8FBB: 0x6676, + 0x8FBC: 0x677E, + 0x8FBD: 0x68A2, + 0x8FBE: 0x6A1F, + 0x8FBF: 0x6A35, + 0x8FC0: 0x6CBC, + 0x8FC1: 0x6D88, + 0x8FC2: 0x6E09, + 0x8FC3: 0x6E58, + 0x8FC4: 0x713C, + 0x8FC5: 0x7126, + 0x8FC6: 0x7167, + 0x8FC7: 0x75C7, + 0x8FC8: 0x7701, + 0x8FC9: 0x785D, + 0x8FCA: 0x7901, + 0x8FCB: 0x7965, + 0x8FCC: 0x79F0, + 0x8FCD: 0x7AE0, + 0x8FCE: 0x7B11, + 0x8FCF: 0x7CA7, + 0x8FD0: 0x7D39, + 0x8FD1: 0x8096, + 0x8FD2: 0x83D6, + 0x8FD3: 0x848B, + 0x8FD4: 0x8549, + 0x8FD5: 0x885D, + 0x8FD6: 0x88F3, + 0x8FD7: 0x8A1F, + 0x8FD8: 0x8A3C, + 0x8FD9: 0x8A54, + 0x8FDA: 0x8A73, + 0x8FDB: 0x8C61, + 0x8FDC: 0x8CDE, + 0x8FDD: 0x91A4, + 0x8FDE: 0x9266, + 0x8FDF: 0x937E, + 0x8FE0: 0x9418, + 0x8FE1: 0x969C, + 0x8FE2: 0x9798, + 0x8FE3: 0x4E0A, + 0x8FE4: 0x4E08, + 0x8FE5: 0x4E1E, + 0x8FE6: 0x4E57, + 0x8FE7: 0x5197, + 0x8FE8: 0x5270, + 0x8FE9: 0x57CE, + 0x8FEA: 0x5834, + 0x8FEB: 0x58CC, + 0x8FEC: 0x5B22, + 0x8FED: 0x5E38, + 0x8FEE: 0x60C5, + 0x8FEF: 0x64FE, + 0x8FF0: 0x6761, + 0x8FF1: 0x6756, + 0x8FF2: 0x6D44, + 0x8FF3: 0x72B6, + 0x8FF4: 0x7573, + 0x8FF5: 0x7A63, + 0x8FF6: 0x84B8, + 0x8FF7: 0x8B72, + 0x8FF8: 0x91B8, + 0x8FF9: 0x9320, + 0x8FFA: 0x5631, + 0x8FFB: 0x57F4, + 0x8FFC: 0x98FE, + 0x9040: 0x62ED, + 0x9041: 0x690D, + 0x9042: 0x6B96, + 0x9043: 0x71ED, + 0x9044: 0x7E54, + 0x9045: 0x8077, + 0x9046: 0x8272, + 0x9047: 0x89E6, + 0x9048: 0x98DF, + 0x9049: 0x8755, + 0x904A: 0x8FB1, + 0x904B: 0x5C3B, + 0x904C: 0x4F38, + 0x904D: 0x4FE1, + 0x904E: 0x4FB5, + 0x904F: 0x5507, + 0x9050: 0x5A20, + 0x9051: 0x5BDD, + 0x9052: 0x5BE9, + 0x9053: 0x5FC3, + 0x9054: 0x614E, + 0x9055: 0x632F, + 0x9056: 0x65B0, + 0x9057: 0x664B, + 0x9058: 0x68EE, + 0x9059: 0x699B, + 0x905A: 0x6D78, + 0x905B: 0x6DF1, + 0x905C: 0x7533, + 0x905D: 0x75B9, + 0x905E: 0x771F, + 0x905F: 0x795E, + 0x9060: 0x79E6, + 0x9061: 0x7D33, + 0x9062: 0x81E3, + 0x9063: 0x82AF, + 0x9064: 0x85AA, + 0x9065: 0x89AA, + 0x9066: 0x8A3A, + 0x9067: 0x8EAB, + 0x9068: 0x8F9B, + 0x9069: 0x9032, + 0x906A: 0x91DD, + 0x906B: 0x9707, + 0x906C: 0x4EBA, + 0x906D: 0x4EC1, + 0x906E: 0x5203, + 0x906F: 0x5875, + 0x9070: 0x58EC, + 0x9071: 0x5C0B, + 0x9072: 0x751A, + 0x9073: 0x5C3D, + 0x9074: 0x814E, + 0x9075: 0x8A0A, + 0x9076: 0x8FC5, + 0x9077: 0x9663, + 0x9078: 0x976D, + 0x9079: 0x7B25, + 0x907A: 0x8ACF, + 0x907B: 0x9808, + 0x907C: 0x9162, + 0x907D: 0x56F3, + 0x907E: 0x53A8, + 0x9080: 0x9017, + 0x9081: 0x5439, + 0x9082: 0x5782, + 0x9083: 0x5E25, + 0x9084: 0x63A8, + 0x9085: 0x6C34, + 0x9086: 0x708A, + 0x9087: 0x7761, + 0x9088: 0x7C8B, + 0x9089: 0x7FE0, + 0x908A: 0x8870, + 0x908B: 0x9042, + 0x908C: 0x9154, + 0x908D: 0x9310, + 0x908E: 0x9318, + 0x908F: 0x968F, + 0x9090: 0x745E, + 0x9091: 0x9AC4, + 0x9092: 0x5D07, + 0x9093: 0x5D69, + 0x9094: 0x6570, + 0x9095: 0x67A2, + 0x9096: 0x8DA8, + 0x9097: 0x96DB, + 0x9098: 0x636E, + 0x9099: 0x6749, + 0x909A: 0x6919, + 0x909B: 0x83C5, + 0x909C: 0x9817, + 0x909D: 0x96C0, + 0x909E: 0x88FE, + 0x909F: 0x6F84, + 0x90A0: 0x647A, + 0x90A1: 0x5BF8, + 0x90A2: 0x4E16, + 0x90A3: 0x702C, + 0x90A4: 0x755D, + 0x90A5: 0x662F, + 0x90A6: 0x51C4, + 0x90A7: 0x5236, + 0x90A8: 0x52E2, + 0x90A9: 0x59D3, + 0x90AA: 0x5F81, + 0x90AB: 0x6027, + 0x90AC: 0x6210, + 0x90AD: 0x653F, + 0x90AE: 0x6574, + 0x90AF: 0x661F, + 0x90B0: 0x6674, + 0x90B1: 0x68F2, + 0x90B2: 0x6816, + 0x90B3: 0x6B63, + 0x90B4: 0x6E05, + 0x90B5: 0x7272, + 0x90B6: 0x751F, + 0x90B7: 0x76DB, + 0x90B8: 0x7CBE, + 0x90B9: 0x8056, + 0x90BA: 0x58F0, + 0x90BB: 0x88FD, + 0x90BC: 0x897F, + 0x90BD: 0x8AA0, + 0x90BE: 0x8A93, + 0x90BF: 0x8ACB, + 0x90C0: 0x901D, + 0x90C1: 0x9192, + 0x90C2: 0x9752, + 0x90C3: 0x9759, + 0x90C4: 0x6589, + 0x90C5: 0x7A0E, + 0x90C6: 0x8106, + 0x90C7: 0x96BB, + 0x90C8: 0x5E2D, + 0x90C9: 0x60DC, + 0x90CA: 0x621A, + 0x90CB: 0x65A5, + 0x90CC: 0x6614, + 0x90CD: 0x6790, + 0x90CE: 0x77F3, + 0x90CF: 0x7A4D, + 0x90D0: 0x7C4D, + 0x90D1: 0x7E3E, + 0x90D2: 0x810A, + 0x90D3: 0x8CAC, + 0x90D4: 0x8D64, + 0x90D5: 0x8DE1, + 0x90D6: 0x8E5F, + 0x90D7: 0x78A9, + 0x90D8: 0x5207, + 0x90D9: 0x62D9, + 0x90DA: 0x63A5, + 0x90DB: 0x6442, + 0x90DC: 0x6298, + 0x90DD: 0x8A2D, + 0x90DE: 0x7A83, + 0x90DF: 0x7BC0, + 0x90E0: 0x8AAC, + 0x90E1: 0x96EA, + 0x90E2: 0x7D76, + 0x90E3: 0x820C, + 0x90E4: 0x8749, + 0x90E5: 0x4ED9, + 0x90E6: 0x5148, + 0x90E7: 0x5343, + 0x90E8: 0x5360, + 0x90E9: 0x5BA3, + 0x90EA: 0x5C02, + 0x90EB: 0x5C16, + 0x90EC: 0x5DDD, + 0x90ED: 0x6226, + 0x90EE: 0x6247, + 0x90EF: 0x64B0, + 0x90F0: 0x6813, + 0x90F1: 0x6834, + 0x90F2: 0x6CC9, + 0x90F3: 0x6D45, + 0x90F4: 0x6D17, + 0x90F5: 0x67D3, + 0x90F6: 0x6F5C, + 0x90F7: 0x714E, + 0x90F8: 0x717D, + 0x90F9: 0x65CB, + 0x90FA: 0x7A7F, + 0x90FB: 0x7BAD, + 0x90FC: 0x7DDA, + 0x9140: 0x7E4A, + 0x9141: 0x7FA8, + 0x9142: 0x817A, + 0x9143: 0x821B, + 0x9144: 0x8239, + 0x9145: 0x85A6, + 0x9146: 0x8A6E, + 0x9147: 0x8CCE, + 0x9148: 0x8DF5, + 0x9149: 0x9078, + 0x914A: 0x9077, + 0x914B: 0x92AD, + 0x914C: 0x9291, + 0x914D: 0x9583, + 0x914E: 0x9BAE, + 0x914F: 0x524D, + 0x9150: 0x5584, + 0x9151: 0x6F38, + 0x9152: 0x7136, + 0x9153: 0x5168, + 0x9154: 0x7985, + 0x9155: 0x7E55, + 0x9156: 0x81B3, + 0x9157: 0x7CCE, + 0x9158: 0x564C, + 0x9159: 0x5851, + 0x915A: 0x5CA8, + 0x915B: 0x63AA, + 0x915C: 0x66FE, + 0x915D: 0x66FD, + 0x915E: 0x695A, + 0x915F: 0x72D9, + 0x9160: 0x758F, + 0x9161: 0x758E, + 0x9162: 0x790E, + 0x9163: 0x7956, + 0x9164: 0x79DF, + 0x9165: 0x7C97, + 0x9166: 0x7D20, + 0x9167: 0x7D44, + 0x9168: 0x8607, + 0x9169: 0x8A34, + 0x916A: 0x963B, + 0x916B: 0x9061, + 0x916C: 0x9F20, + 0x916D: 0x50E7, + 0x916E: 0x5275, + 0x916F: 0x53CC, + 0x9170: 0x53E2, + 0x9171: 0x5009, + 0x9172: 0x55AA, + 0x9173: 0x58EE, + 0x9174: 0x594F, + 0x9175: 0x723D, + 0x9176: 0x5B8B, + 0x9177: 0x5C64, + 0x9178: 0x531D, + 0x9179: 0x60E3, + 0x917A: 0x60F3, + 0x917B: 0x635C, + 0x917C: 0x6383, + 0x917D: 0x633F, + 0x917E: 0x63BB, + 0x9180: 0x64CD, + 0x9181: 0x65E9, + 0x9182: 0x66F9, + 0x9183: 0x5DE3, + 0x9184: 0x69CD, + 0x9185: 0x69FD, + 0x9186: 0x6F15, + 0x9187: 0x71E5, + 0x9188: 0x4E89, + 0x9189: 0x75E9, + 0x918A: 0x76F8, + 0x918B: 0x7A93, + 0x918C: 0x7CDF, + 0x918D: 0x7DCF, + 0x918E: 0x7D9C, + 0x918F: 0x8061, + 0x9190: 0x8349, + 0x9191: 0x8358, + 0x9192: 0x846C, + 0x9193: 0x84BC, + 0x9194: 0x85FB, + 0x9195: 0x88C5, + 0x9196: 0x8D70, + 0x9197: 0x9001, + 0x9198: 0x906D, + 0x9199: 0x9397, + 0x919A: 0x971C, + 0x919B: 0x9A12, + 0x919C: 0x50CF, + 0x919D: 0x5897, + 0x919E: 0x618E, + 0x919F: 0x81D3, + 0x91A0: 0x8535, + 0x91A1: 0x8D08, + 0x91A2: 0x9020, + 0x91A3: 0x4FC3, + 0x91A4: 0x5074, + 0x91A5: 0x5247, + 0x91A6: 0x5373, + 0x91A7: 0x606F, + 0x91A8: 0x6349, + 0x91A9: 0x675F, + 0x91AA: 0x6E2C, + 0x91AB: 0x8DB3, + 0x91AC: 0x901F, + 0x91AD: 0x4FD7, + 0x91AE: 0x5C5E, + 0x91AF: 0x8CCA, + 0x91B0: 0x65CF, + 0x91B1: 0x7D9A, + 0x91B2: 0x5352, + 0x91B3: 0x8896, + 0x91B4: 0x5176, + 0x91B5: 0x63C3, + 0x91B6: 0x5B58, + 0x91B7: 0x5B6B, + 0x91B8: 0x5C0A, + 0x91B9: 0x640D, + 0x91BA: 0x6751, + 0x91BB: 0x905C, + 0x91BC: 0x4ED6, + 0x91BD: 0x591A, + 0x91BE: 0x592A, + 0x91BF: 0x6C70, + 0x91C0: 0x8A51, + 0x91C1: 0x553E, + 0x91C2: 0x5815, + 0x91C3: 0x59A5, + 0x91C4: 0x60F0, + 0x91C5: 0x6253, + 0x91C6: 0x67C1, + 0x91C7: 0x8235, + 0x91C8: 0x6955, + 0x91C9: 0x9640, + 0x91CA: 0x99C4, + 0x91CB: 0x9A28, + 0x91CC: 0x4F53, + 0x91CD: 0x5806, + 0x91CE: 0x5BFE, + 0x91CF: 0x8010, + 0x91D0: 0x5CB1, + 0x91D1: 0x5E2F, + 0x91D2: 0x5F85, + 0x91D3: 0x6020, + 0x91D4: 0x614B, + 0x91D5: 0x6234, + 0x91D6: 0x66FF, + 0x91D7: 0x6CF0, + 0x91D8: 0x6EDE, + 0x91D9: 0x80CE, + 0x91DA: 0x817F, + 0x91DB: 0x82D4, + 0x91DC: 0x888B, + 0x91DD: 0x8CB8, + 0x91DE: 0x9000, + 0x91DF: 0x902E, + 0x91E0: 0x968A, + 0x91E1: 0x9EDB, + 0x91E2: 0x9BDB, + 0x91E3: 0x4EE3, + 0x91E4: 0x53F0, + 0x91E5: 0x5927, + 0x91E6: 0x7B2C, + 0x91E7: 0x918D, + 0x91E8: 0x984C, + 0x91E9: 0x9DF9, + 0x91EA: 0x6EDD, + 0x91EB: 0x7027, + 0x91EC: 0x5353, + 0x91ED: 0x5544, + 0x91EE: 0x5B85, + 0x91EF: 0x6258, + 0x91F0: 0x629E, + 0x91F1: 0x62D3, + 0x91F2: 0x6CA2, + 0x91F3: 0x6FEF, + 0x91F4: 0x7422, + 0x91F5: 0x8A17, + 0x91F6: 0x9438, + 0x91F7: 0x6FC1, + 0x91F8: 0x8AFE, + 0x91F9: 0x8338, + 0x91FA: 0x51E7, + 0x91FB: 0x86F8, + 0x91FC: 0x53EA, + 0x9240: 0x53E9, + 0x9241: 0x4F46, + 0x9242: 0x9054, + 0x9243: 0x8FB0, + 0x9244: 0x596A, + 0x9245: 0x8131, + 0x9246: 0x5DFD, + 0x9247: 0x7AEA, + 0x9248: 0x8FBF, + 0x9249: 0x68DA, + 0x924A: 0x8C37, + 0x924B: 0x72F8, + 0x924C: 0x9C48, + 0x924D: 0x6A3D, + 0x924E: 0x8AB0, + 0x924F: 0x4E39, + 0x9250: 0x5358, + 0x9251: 0x5606, + 0x9252: 0x5766, + 0x9253: 0x62C5, + 0x9254: 0x63A2, + 0x9255: 0x65E6, + 0x9256: 0x6B4E, + 0x9257: 0x6DE1, + 0x9258: 0x6E5B, + 0x9259: 0x70AD, + 0x925A: 0x77ED, + 0x925B: 0x7AEF, + 0x925C: 0x7BAA, + 0x925D: 0x7DBB, + 0x925E: 0x803D, + 0x925F: 0x80C6, + 0x9260: 0x86CB, + 0x9261: 0x8A95, + 0x9262: 0x935B, + 0x9263: 0x56E3, + 0x9264: 0x58C7, + 0x9265: 0x5F3E, + 0x9266: 0x65AD, + 0x9267: 0x6696, + 0x9268: 0x6A80, + 0x9269: 0x6BB5, + 0x926A: 0x7537, + 0x926B: 0x8AC7, + 0x926C: 0x5024, + 0x926D: 0x77E5, + 0x926E: 0x5730, + 0x926F: 0x5F1B, + 0x9270: 0x6065, + 0x9271: 0x667A, + 0x9272: 0x6C60, + 0x9273: 0x75F4, + 0x9274: 0x7A1A, + 0x9275: 0x7F6E, + 0x9276: 0x81F4, + 0x9277: 0x8718, + 0x9278: 0x9045, + 0x9279: 0x99B3, + 0x927A: 0x7BC9, + 0x927B: 0x755C, + 0x927C: 0x7AF9, + 0x927D: 0x7B51, + 0x927E: 0x84C4, + 0x9280: 0x9010, + 0x9281: 0x79E9, + 0x9282: 0x7A92, + 0x9283: 0x8336, + 0x9284: 0x5AE1, + 0x9285: 0x7740, + 0x9286: 0x4E2D, + 0x9287: 0x4EF2, + 0x9288: 0x5B99, + 0x9289: 0x5FE0, + 0x928A: 0x62BD, + 0x928B: 0x663C, + 0x928C: 0x67F1, + 0x928D: 0x6CE8, + 0x928E: 0x866B, + 0x928F: 0x8877, + 0x9290: 0x8A3B, + 0x9291: 0x914E, + 0x9292: 0x92F3, + 0x9293: 0x99D0, + 0x9294: 0x6A17, + 0x9295: 0x7026, + 0x9296: 0x732A, + 0x9297: 0x82E7, + 0x9298: 0x8457, + 0x9299: 0x8CAF, + 0x929A: 0x4E01, + 0x929B: 0x5146, + 0x929C: 0x51CB, + 0x929D: 0x558B, + 0x929E: 0x5BF5, + 0x929F: 0x5E16, + 0x92A0: 0x5E33, + 0x92A1: 0x5E81, + 0x92A2: 0x5F14, + 0x92A3: 0x5F35, + 0x92A4: 0x5F6B, + 0x92A5: 0x5FB4, + 0x92A6: 0x61F2, + 0x92A7: 0x6311, + 0x92A8: 0x66A2, + 0x92A9: 0x671D, + 0x92AA: 0x6F6E, + 0x92AB: 0x7252, + 0x92AC: 0x753A, + 0x92AD: 0x773A, + 0x92AE: 0x8074, + 0x92AF: 0x8139, + 0x92B0: 0x8178, + 0x92B1: 0x8776, + 0x92B2: 0x8ABF, + 0x92B3: 0x8ADC, + 0x92B4: 0x8D85, + 0x92B5: 0x8DF3, + 0x92B6: 0x929A, + 0x92B7: 0x9577, + 0x92B8: 0x9802, + 0x92B9: 0x9CE5, + 0x92BA: 0x52C5, + 0x92BB: 0x6357, + 0x92BC: 0x76F4, + 0x92BD: 0x6715, + 0x92BE: 0x6C88, + 0x92BF: 0x73CD, + 0x92C0: 0x8CC3, + 0x92C1: 0x93AE, + 0x92C2: 0x9673, + 0x92C3: 0x6D25, + 0x92C4: 0x589C, + 0x92C5: 0x690E, + 0x92C6: 0x69CC, + 0x92C7: 0x8FFD, + 0x92C8: 0x939A, + 0x92C9: 0x75DB, + 0x92CA: 0x901A, + 0x92CB: 0x585A, + 0x92CC: 0x6802, + 0x92CD: 0x63B4, + 0x92CE: 0x69FB, + 0x92CF: 0x4F43, + 0x92D0: 0x6F2C, + 0x92D1: 0x67D8, + 0x92D2: 0x8FBB, + 0x92D3: 0x8526, + 0x92D4: 0x7DB4, + 0x92D5: 0x9354, + 0x92D6: 0x693F, + 0x92D7: 0x6F70, + 0x92D8: 0x576A, + 0x92D9: 0x58F7, + 0x92DA: 0x5B2C, + 0x92DB: 0x7D2C, + 0x92DC: 0x722A, + 0x92DD: 0x540A, + 0x92DE: 0x91E3, + 0x92DF: 0x9DB4, + 0x92E0: 0x4EAD, + 0x92E1: 0x4F4E, + 0x92E2: 0x505C, + 0x92E3: 0x5075, + 0x92E4: 0x5243, + 0x92E5: 0x8C9E, + 0x92E6: 0x5448, + 0x92E7: 0x5824, + 0x92E8: 0x5B9A, + 0x92E9: 0x5E1D, + 0x92EA: 0x5E95, + 0x92EB: 0x5EAD, + 0x92EC: 0x5EF7, + 0x92ED: 0x5F1F, + 0x92EE: 0x608C, + 0x92EF: 0x62B5, + 0x92F0: 0x633A, + 0x92F1: 0x63D0, + 0x92F2: 0x68AF, + 0x92F3: 0x6C40, + 0x92F4: 0x7887, + 0x92F5: 0x798E, + 0x92F6: 0x7A0B, + 0x92F7: 0x7DE0, + 0x92F8: 0x8247, + 0x92F9: 0x8A02, + 0x92FA: 0x8AE6, + 0x92FB: 0x8E44, + 0x92FC: 0x9013, + 0x9340: 0x90B8, + 0x9341: 0x912D, + 0x9342: 0x91D8, + 0x9343: 0x9F0E, + 0x9344: 0x6CE5, + 0x9345: 0x6458, + 0x9346: 0x64E2, + 0x9347: 0x6575, + 0x9348: 0x6EF4, + 0x9349: 0x7684, + 0x934A: 0x7B1B, + 0x934B: 0x9069, + 0x934C: 0x93D1, + 0x934D: 0x6EBA, + 0x934E: 0x54F2, + 0x934F: 0x5FB9, + 0x9350: 0x64A4, + 0x9351: 0x8F4D, + 0x9352: 0x8FED, + 0x9353: 0x9244, + 0x9354: 0x5178, + 0x9355: 0x586B, + 0x9356: 0x5929, + 0x9357: 0x5C55, + 0x9358: 0x5E97, + 0x9359: 0x6DFB, + 0x935A: 0x7E8F, + 0x935B: 0x751C, + 0x935C: 0x8CBC, + 0x935D: 0x8EE2, + 0x935E: 0x985B, + 0x935F: 0x70B9, + 0x9360: 0x4F1D, + 0x9361: 0x6BBF, + 0x9362: 0x6FB1, + 0x9363: 0x7530, + 0x9364: 0x96FB, + 0x9365: 0x514E, + 0x9366: 0x5410, + 0x9367: 0x5835, + 0x9368: 0x5857, + 0x9369: 0x59AC, + 0x936A: 0x5C60, + 0x936B: 0x5F92, + 0x936C: 0x6597, + 0x936D: 0x675C, + 0x936E: 0x6E21, + 0x936F: 0x767B, + 0x9370: 0x83DF, + 0x9371: 0x8CED, + 0x9372: 0x9014, + 0x9373: 0x90FD, + 0x9374: 0x934D, + 0x9375: 0x7825, + 0x9376: 0x783A, + 0x9377: 0x52AA, + 0x9378: 0x5EA6, + 0x9379: 0x571F, + 0x937A: 0x5974, + 0x937B: 0x6012, + 0x937C: 0x5012, + 0x937D: 0x515A, + 0x937E: 0x51AC, + 0x9380: 0x51CD, + 0x9381: 0x5200, + 0x9382: 0x5510, + 0x9383: 0x5854, + 0x9384: 0x5858, + 0x9385: 0x5957, + 0x9386: 0x5B95, + 0x9387: 0x5CF6, + 0x9388: 0x5D8B, + 0x9389: 0x60BC, + 0x938A: 0x6295, + 0x938B: 0x642D, + 0x938C: 0x6771, + 0x938D: 0x6843, + 0x938E: 0x68BC, + 0x938F: 0x68DF, + 0x9390: 0x76D7, + 0x9391: 0x6DD8, + 0x9392: 0x6E6F, + 0x9393: 0x6D9B, + 0x9394: 0x706F, + 0x9395: 0x71C8, + 0x9396: 0x5F53, + 0x9397: 0x75D8, + 0x9398: 0x7977, + 0x9399: 0x7B49, + 0x939A: 0x7B54, + 0x939B: 0x7B52, + 0x939C: 0x7CD6, + 0x939D: 0x7D71, + 0x939E: 0x5230, + 0x939F: 0x8463, + 0x93A0: 0x8569, + 0x93A1: 0x85E4, + 0x93A2: 0x8A0E, + 0x93A3: 0x8B04, + 0x93A4: 0x8C46, + 0x93A5: 0x8E0F, + 0x93A6: 0x9003, + 0x93A7: 0x900F, + 0x93A8: 0x9419, + 0x93A9: 0x9676, + 0x93AA: 0x982D, + 0x93AB: 0x9A30, + 0x93AC: 0x95D8, + 0x93AD: 0x50CD, + 0x93AE: 0x52D5, + 0x93AF: 0x540C, + 0x93B0: 0x5802, + 0x93B1: 0x5C0E, + 0x93B2: 0x61A7, + 0x93B3: 0x649E, + 0x93B4: 0x6D1E, + 0x93B5: 0x77B3, + 0x93B6: 0x7AE5, + 0x93B7: 0x80F4, + 0x93B8: 0x8404, + 0x93B9: 0x9053, + 0x93BA: 0x9285, + 0x93BB: 0x5CE0, + 0x93BC: 0x9D07, + 0x93BD: 0x533F, + 0x93BE: 0x5F97, + 0x93BF: 0x5FB3, + 0x93C0: 0x6D9C, + 0x93C1: 0x7279, + 0x93C2: 0x7763, + 0x93C3: 0x79BF, + 0x93C4: 0x7BE4, + 0x93C5: 0x6BD2, + 0x93C6: 0x72EC, + 0x93C7: 0x8AAD, + 0x93C8: 0x6803, + 0x93C9: 0x6A61, + 0x93CA: 0x51F8, + 0x93CB: 0x7A81, + 0x93CC: 0x6934, + 0x93CD: 0x5C4A, + 0x93CE: 0x9CF6, + 0x93CF: 0x82EB, + 0x93D0: 0x5BC5, + 0x93D1: 0x9149, + 0x93D2: 0x701E, + 0x93D3: 0x5678, + 0x93D4: 0x5C6F, + 0x93D5: 0x60C7, + 0x93D6: 0x6566, + 0x93D7: 0x6C8C, + 0x93D8: 0x8C5A, + 0x93D9: 0x9041, + 0x93DA: 0x9813, + 0x93DB: 0x5451, + 0x93DC: 0x66C7, + 0x93DD: 0x920D, + 0x93DE: 0x5948, + 0x93DF: 0x90A3, + 0x93E0: 0x5185, + 0x93E1: 0x4E4D, + 0x93E2: 0x51EA, + 0x93E3: 0x8599, + 0x93E4: 0x8B0E, + 0x93E5: 0x7058, + 0x93E6: 0x637A, + 0x93E7: 0x934B, + 0x93E8: 0x6962, + 0x93E9: 0x99B4, + 0x93EA: 0x7E04, + 0x93EB: 0x7577, + 0x93EC: 0x5357, + 0x93ED: 0x6960, + 0x93EE: 0x8EDF, + 0x93EF: 0x96E3, + 0x93F0: 0x6C5D, + 0x93F1: 0x4E8C, + 0x93F2: 0x5C3C, + 0x93F3: 0x5F10, + 0x93F4: 0x8FE9, + 0x93F5: 0x5302, + 0x93F6: 0x8CD1, + 0x93F7: 0x8089, + 0x93F8: 0x8679, + 0x93F9: 0x5EFF, + 0x93FA: 0x65E5, + 0x93FB: 0x4E73, + 0x93FC: 0x5165, + 0x9440: 0x5982, + 0x9441: 0x5C3F, + 0x9442: 0x97EE, + 0x9443: 0x4EFB, + 0x9444: 0x598A, + 0x9445: 0x5FCD, + 0x9446: 0x8A8D, + 0x9447: 0x6FE1, + 0x9448: 0x79B0, + 0x9449: 0x7962, + 0x944A: 0x5BE7, + 0x944B: 0x8471, + 0x944C: 0x732B, + 0x944D: 0x71B1, + 0x944E: 0x5E74, + 0x944F: 0x5FF5, + 0x9450: 0x637B, + 0x9451: 0x649A, + 0x9452: 0x71C3, + 0x9453: 0x7C98, + 0x9454: 0x4E43, + 0x9455: 0x5EFC, + 0x9456: 0x4E4B, + 0x9457: 0x57DC, + 0x9458: 0x56A2, + 0x9459: 0x60A9, + 0x945A: 0x6FC3, + 0x945B: 0x7D0D, + 0x945C: 0x80FD, + 0x945D: 0x8133, + 0x945E: 0x81BF, + 0x945F: 0x8FB2, + 0x9460: 0x8997, + 0x9461: 0x86A4, + 0x9462: 0x5DF4, + 0x9463: 0x628A, + 0x9464: 0x64AD, + 0x9465: 0x8987, + 0x9466: 0x6777, + 0x9467: 0x6CE2, + 0x9468: 0x6D3E, + 0x9469: 0x7436, + 0x946A: 0x7834, + 0x946B: 0x5A46, + 0x946C: 0x7F75, + 0x946D: 0x82AD, + 0x946E: 0x99AC, + 0x946F: 0x4FF3, + 0x9470: 0x5EC3, + 0x9471: 0x62DD, + 0x9472: 0x6392, + 0x9473: 0x6557, + 0x9474: 0x676F, + 0x9475: 0x76C3, + 0x9476: 0x724C, + 0x9477: 0x80CC, + 0x9478: 0x80BA, + 0x9479: 0x8F29, + 0x947A: 0x914D, + 0x947B: 0x500D, + 0x947C: 0x57F9, + 0x947D: 0x5A92, + 0x947E: 0x6885, + 0x9480: 0x6973, + 0x9481: 0x7164, + 0x9482: 0x72FD, + 0x9483: 0x8CB7, + 0x9484: 0x58F2, + 0x9485: 0x8CE0, + 0x9486: 0x966A, + 0x9487: 0x9019, + 0x9488: 0x877F, + 0x9489: 0x79E4, + 0x948A: 0x77E7, + 0x948B: 0x8429, + 0x948C: 0x4F2F, + 0x948D: 0x5265, + 0x948E: 0x535A, + 0x948F: 0x62CD, + 0x9490: 0x67CF, + 0x9491: 0x6CCA, + 0x9492: 0x767D, + 0x9493: 0x7B94, + 0x9494: 0x7C95, + 0x9495: 0x8236, + 0x9496: 0x8584, + 0x9497: 0x8FEB, + 0x9498: 0x66DD, + 0x9499: 0x6F20, + 0x949A: 0x7206, + 0x949B: 0x7E1B, + 0x949C: 0x83AB, + 0x949D: 0x99C1, + 0x949E: 0x9EA6, + 0x949F: 0x51FD, + 0x94A0: 0x7BB1, + 0x94A1: 0x7872, + 0x94A2: 0x7BB8, + 0x94A3: 0x8087, + 0x94A4: 0x7B48, + 0x94A5: 0x6AE8, + 0x94A6: 0x5E61, + 0x94A7: 0x808C, + 0x94A8: 0x7551, + 0x94A9: 0x7560, + 0x94AA: 0x516B, + 0x94AB: 0x9262, + 0x94AC: 0x6E8C, + 0x94AD: 0x767A, + 0x94AE: 0x9197, + 0x94AF: 0x9AEA, + 0x94B0: 0x4F10, + 0x94B1: 0x7F70, + 0x94B2: 0x629C, + 0x94B3: 0x7B4F, + 0x94B4: 0x95A5, + 0x94B5: 0x9CE9, + 0x94B6: 0x567A, + 0x94B7: 0x5859, + 0x94B8: 0x86E4, + 0x94B9: 0x96BC, + 0x94BA: 0x4F34, + 0x94BB: 0x5224, + 0x94BC: 0x534A, + 0x94BD: 0x53CD, + 0x94BE: 0x53DB, + 0x94BF: 0x5E06, + 0x94C0: 0x642C, + 0x94C1: 0x6591, + 0x94C2: 0x677F, + 0x94C3: 0x6C3E, + 0x94C4: 0x6C4E, + 0x94C5: 0x7248, + 0x94C6: 0x72AF, + 0x94C7: 0x73ED, + 0x94C8: 0x7554, + 0x94C9: 0x7E41, + 0x94CA: 0x822C, + 0x94CB: 0x85E9, + 0x94CC: 0x8CA9, + 0x94CD: 0x7BC4, + 0x94CE: 0x91C6, + 0x94CF: 0x7169, + 0x94D0: 0x9812, + 0x94D1: 0x98EF, + 0x94D2: 0x633D, + 0x94D3: 0x6669, + 0x94D4: 0x756A, + 0x94D5: 0x76E4, + 0x94D6: 0x78D0, + 0x94D7: 0x8543, + 0x94D8: 0x86EE, + 0x94D9: 0x532A, + 0x94DA: 0x5351, + 0x94DB: 0x5426, + 0x94DC: 0x5983, + 0x94DD: 0x5E87, + 0x94DE: 0x5F7C, + 0x94DF: 0x60B2, + 0x94E0: 0x6249, + 0x94E1: 0x6279, + 0x94E2: 0x62AB, + 0x94E3: 0x6590, + 0x94E4: 0x6BD4, + 0x94E5: 0x6CCC, + 0x94E6: 0x75B2, + 0x94E7: 0x76AE, + 0x94E8: 0x7891, + 0x94E9: 0x79D8, + 0x94EA: 0x7DCB, + 0x94EB: 0x7F77, + 0x94EC: 0x80A5, + 0x94ED: 0x88AB, + 0x94EE: 0x8AB9, + 0x94EF: 0x8CBB, + 0x94F0: 0x907F, + 0x94F1: 0x975E, + 0x94F2: 0x98DB, + 0x94F3: 0x6A0B, + 0x94F4: 0x7C38, + 0x94F5: 0x5099, + 0x94F6: 0x5C3E, + 0x94F7: 0x5FAE, + 0x94F8: 0x6787, + 0x94F9: 0x6BD8, + 0x94FA: 0x7435, + 0x94FB: 0x7709, + 0x94FC: 0x7F8E, + 0x9540: 0x9F3B, + 0x9541: 0x67CA, + 0x9542: 0x7A17, + 0x9543: 0x5339, + 0x9544: 0x758B, + 0x9545: 0x9AED, + 0x9546: 0x5F66, + 0x9547: 0x819D, + 0x9548: 0x83F1, + 0x9549: 0x8098, + 0x954A: 0x5F3C, + 0x954B: 0x5FC5, + 0x954C: 0x7562, + 0x954D: 0x7B46, + 0x954E: 0x903C, + 0x954F: 0x6867, + 0x9550: 0x59EB, + 0x9551: 0x5A9B, + 0x9552: 0x7D10, + 0x9553: 0x767E, + 0x9554: 0x8B2C, + 0x9555: 0x4FF5, + 0x9556: 0x5F6A, + 0x9557: 0x6A19, + 0x9558: 0x6C37, + 0x9559: 0x6F02, + 0x955A: 0x74E2, + 0x955B: 0x7968, + 0x955C: 0x8868, + 0x955D: 0x8A55, + 0x955E: 0x8C79, + 0x955F: 0x5EDF, + 0x9560: 0x63CF, + 0x9561: 0x75C5, + 0x9562: 0x79D2, + 0x9563: 0x82D7, + 0x9564: 0x9328, + 0x9565: 0x92F2, + 0x9566: 0x849C, + 0x9567: 0x86ED, + 0x9568: 0x9C2D, + 0x9569: 0x54C1, + 0x956A: 0x5F6C, + 0x956B: 0x658C, + 0x956C: 0x6D5C, + 0x956D: 0x7015, + 0x956E: 0x8CA7, + 0x956F: 0x8CD3, + 0x9570: 0x983B, + 0x9571: 0x654F, + 0x9572: 0x74F6, + 0x9573: 0x4E0D, + 0x9574: 0x4ED8, + 0x9575: 0x57E0, + 0x9576: 0x592B, + 0x9577: 0x5A66, + 0x9578: 0x5BCC, + 0x9579: 0x51A8, + 0x957A: 0x5E03, + 0x957B: 0x5E9C, + 0x957C: 0x6016, + 0x957D: 0x6276, + 0x957E: 0x6577, + 0x9580: 0x65A7, + 0x9581: 0x666E, + 0x9582: 0x6D6E, + 0x9583: 0x7236, + 0x9584: 0x7B26, + 0x9585: 0x8150, + 0x9586: 0x819A, + 0x9587: 0x8299, + 0x9588: 0x8B5C, + 0x9589: 0x8CA0, + 0x958A: 0x8CE6, + 0x958B: 0x8D74, + 0x958C: 0x961C, + 0x958D: 0x9644, + 0x958E: 0x4FAE, + 0x958F: 0x64AB, + 0x9590: 0x6B66, + 0x9591: 0x821E, + 0x9592: 0x8461, + 0x9593: 0x856A, + 0x9594: 0x90E8, + 0x9595: 0x5C01, + 0x9596: 0x6953, + 0x9597: 0x98A8, + 0x9598: 0x847A, + 0x9599: 0x8557, + 0x959A: 0x4F0F, + 0x959B: 0x526F, + 0x959C: 0x5FA9, + 0x959D: 0x5E45, + 0x959E: 0x670D, + 0x959F: 0x798F, + 0x95A0: 0x8179, + 0x95A1: 0x8907, + 0x95A2: 0x8986, + 0x95A3: 0x6DF5, + 0x95A4: 0x5F17, + 0x95A5: 0x6255, + 0x95A6: 0x6CB8, + 0x95A7: 0x4ECF, + 0x95A8: 0x7269, + 0x95A9: 0x9B92, + 0x95AA: 0x5206, + 0x95AB: 0x543B, + 0x95AC: 0x5674, + 0x95AD: 0x58B3, + 0x95AE: 0x61A4, + 0x95AF: 0x626E, + 0x95B0: 0x711A, + 0x95B1: 0x596E, + 0x95B2: 0x7C89, + 0x95B3: 0x7CDE, + 0x95B4: 0x7D1B, + 0x95B5: 0x96F0, + 0x95B6: 0x6587, + 0x95B7: 0x805E, + 0x95B8: 0x4E19, + 0x95B9: 0x4F75, + 0x95BA: 0x5175, + 0x95BB: 0x5840, + 0x95BC: 0x5E63, + 0x95BD: 0x5E73, + 0x95BE: 0x5F0A, + 0x95BF: 0x67C4, + 0x95C0: 0x4E26, + 0x95C1: 0x853D, + 0x95C2: 0x9589, + 0x95C3: 0x965B, + 0x95C4: 0x7C73, + 0x95C5: 0x9801, + 0x95C6: 0x50FB, + 0x95C7: 0x58C1, + 0x95C8: 0x7656, + 0x95C9: 0x78A7, + 0x95CA: 0x5225, + 0x95CB: 0x77A5, + 0x95CC: 0x8511, + 0x95CD: 0x7B86, + 0x95CE: 0x504F, + 0x95CF: 0x5909, + 0x95D0: 0x7247, + 0x95D1: 0x7BC7, + 0x95D2: 0x7DE8, + 0x95D3: 0x8FBA, + 0x95D4: 0x8FD4, + 0x95D5: 0x904D, + 0x95D6: 0x4FBF, + 0x95D7: 0x52C9, + 0x95D8: 0x5A29, + 0x95D9: 0x5F01, + 0x95DA: 0x97AD, + 0x95DB: 0x4FDD, + 0x95DC: 0x8217, + 0x95DD: 0x92EA, + 0x95DE: 0x5703, + 0x95DF: 0x6355, + 0x95E0: 0x6B69, + 0x95E1: 0x752B, + 0x95E2: 0x88DC, + 0x95E3: 0x8F14, + 0x95E4: 0x7A42, + 0x95E5: 0x52DF, + 0x95E6: 0x5893, + 0x95E7: 0x6155, + 0x95E8: 0x620A, + 0x95E9: 0x66AE, + 0x95EA: 0x6BCD, + 0x95EB: 0x7C3F, + 0x95EC: 0x83E9, + 0x95ED: 0x5023, + 0x95EE: 0x4FF8, + 0x95EF: 0x5305, + 0x95F0: 0x5446, + 0x95F1: 0x5831, + 0x95F2: 0x5949, + 0x95F3: 0x5B9D, + 0x95F4: 0x5CF0, + 0x95F5: 0x5CEF, + 0x95F6: 0x5D29, + 0x95F7: 0x5E96, + 0x95F8: 0x62B1, + 0x95F9: 0x6367, + 0x95FA: 0x653E, + 0x95FB: 0x65B9, + 0x95FC: 0x670B, + 0x9640: 0x6CD5, + 0x9641: 0x6CE1, + 0x9642: 0x70F9, + 0x9643: 0x7832, + 0x9644: 0x7E2B, + 0x9645: 0x80DE, + 0x9646: 0x82B3, + 0x9647: 0x840C, + 0x9648: 0x84EC, + 0x9649: 0x8702, + 0x964A: 0x8912, + 0x964B: 0x8A2A, + 0x964C: 0x8C4A, + 0x964D: 0x90A6, + 0x964E: 0x92D2, + 0x964F: 0x98FD, + 0x9650: 0x9CF3, + 0x9651: 0x9D6C, + 0x9652: 0x4E4F, + 0x9653: 0x4EA1, + 0x9654: 0x508D, + 0x9655: 0x5256, + 0x9656: 0x574A, + 0x9657: 0x59A8, + 0x9658: 0x5E3D, + 0x9659: 0x5FD8, + 0x965A: 0x5FD9, + 0x965B: 0x623F, + 0x965C: 0x66B4, + 0x965D: 0x671B, + 0x965E: 0x67D0, + 0x965F: 0x68D2, + 0x9660: 0x5192, + 0x9661: 0x7D21, + 0x9662: 0x80AA, + 0x9663: 0x81A8, + 0x9664: 0x8B00, + 0x9665: 0x8C8C, + 0x9666: 0x8CBF, + 0x9667: 0x927E, + 0x9668: 0x9632, + 0x9669: 0x5420, + 0x966A: 0x982C, + 0x966B: 0x5317, + 0x966C: 0x50D5, + 0x966D: 0x535C, + 0x966E: 0x58A8, + 0x966F: 0x64B2, + 0x9670: 0x6734, + 0x9671: 0x7267, + 0x9672: 0x7766, + 0x9673: 0x7A46, + 0x9674: 0x91E6, + 0x9675: 0x52C3, + 0x9676: 0x6CA1, + 0x9677: 0x6B86, + 0x9678: 0x5800, + 0x9679: 0x5E4C, + 0x967A: 0x5954, + 0x967B: 0x672C, + 0x967C: 0x7FFB, + 0x967D: 0x51E1, + 0x967E: 0x76C6, + 0x9680: 0x6469, + 0x9681: 0x78E8, + 0x9682: 0x9B54, + 0x9683: 0x9EBB, + 0x9684: 0x57CB, + 0x9685: 0x59B9, + 0x9686: 0x6627, + 0x9687: 0x679A, + 0x9688: 0x6BCE, + 0x9689: 0x54E9, + 0x968A: 0x69D9, + 0x968B: 0x5E55, + 0x968C: 0x819C, + 0x968D: 0x6795, + 0x968E: 0x9BAA, + 0x968F: 0x67FE, + 0x9690: 0x9C52, + 0x9691: 0x685D, + 0x9692: 0x4EA6, + 0x9693: 0x4FE3, + 0x9694: 0x53C8, + 0x9695: 0x62B9, + 0x9696: 0x672B, + 0x9697: 0x6CAB, + 0x9698: 0x8FC4, + 0x9699: 0x4FAD, + 0x969A: 0x7E6D, + 0x969B: 0x9EBF, + 0x969C: 0x4E07, + 0x969D: 0x6162, + 0x969E: 0x6E80, + 0x969F: 0x6F2B, + 0x96A0: 0x8513, + 0x96A1: 0x5473, + 0x96A2: 0x672A, + 0x96A3: 0x9B45, + 0x96A4: 0x5DF3, + 0x96A5: 0x7B95, + 0x96A6: 0x5CAC, + 0x96A7: 0x5BC6, + 0x96A8: 0x871C, + 0x96A9: 0x6E4A, + 0x96AA: 0x84D1, + 0x96AB: 0x7A14, + 0x96AC: 0x8108, + 0x96AD: 0x5999, + 0x96AE: 0x7C8D, + 0x96AF: 0x6C11, + 0x96B0: 0x7720, + 0x96B1: 0x52D9, + 0x96B2: 0x5922, + 0x96B3: 0x7121, + 0x96B4: 0x725F, + 0x96B5: 0x77DB, + 0x96B6: 0x9727, + 0x96B7: 0x9D61, + 0x96B8: 0x690B, + 0x96B9: 0x5A7F, + 0x96BA: 0x5A18, + 0x96BB: 0x51A5, + 0x96BC: 0x540D, + 0x96BD: 0x547D, + 0x96BE: 0x660E, + 0x96BF: 0x76DF, + 0x96C0: 0x8FF7, + 0x96C1: 0x9298, + 0x96C2: 0x9CF4, + 0x96C3: 0x59EA, + 0x96C4: 0x725D, + 0x96C5: 0x6EC5, + 0x96C6: 0x514D, + 0x96C7: 0x68C9, + 0x96C8: 0x7DBF, + 0x96C9: 0x7DEC, + 0x96CA: 0x9762, + 0x96CB: 0x9EBA, + 0x96CC: 0x6478, + 0x96CD: 0x6A21, + 0x96CE: 0x8302, + 0x96CF: 0x5984, + 0x96D0: 0x5B5F, + 0x96D1: 0x6BDB, + 0x96D2: 0x731B, + 0x96D3: 0x76F2, + 0x96D4: 0x7DB2, + 0x96D5: 0x8017, + 0x96D6: 0x8499, + 0x96D7: 0x5132, + 0x96D8: 0x6728, + 0x96D9: 0x9ED9, + 0x96DA: 0x76EE, + 0x96DB: 0x6762, + 0x96DC: 0x52FF, + 0x96DD: 0x9905, + 0x96DE: 0x5C24, + 0x96DF: 0x623B, + 0x96E0: 0x7C7E, + 0x96E1: 0x8CB0, + 0x96E2: 0x554F, + 0x96E3: 0x60B6, + 0x96E4: 0x7D0B, + 0x96E5: 0x9580, + 0x96E6: 0x5301, + 0x96E7: 0x4E5F, + 0x96E8: 0x51B6, + 0x96E9: 0x591C, + 0x96EA: 0x723A, + 0x96EB: 0x8036, + 0x96EC: 0x91CE, + 0x96ED: 0x5F25, + 0x96EE: 0x77E2, + 0x96EF: 0x5384, + 0x96F0: 0x5F79, + 0x96F1: 0x7D04, + 0x96F2: 0x85AC, + 0x96F3: 0x8A33, + 0x96F4: 0x8E8D, + 0x96F5: 0x9756, + 0x96F6: 0x67F3, + 0x96F7: 0x85AE, + 0x96F8: 0x9453, + 0x96F9: 0x6109, + 0x96FA: 0x6108, + 0x96FB: 0x6CB9, + 0x96FC: 0x7652, + 0x9740: 0x8AED, + 0x9741: 0x8F38, + 0x9742: 0x552F, + 0x9743: 0x4F51, + 0x9744: 0x512A, + 0x9745: 0x52C7, + 0x9746: 0x53CB, + 0x9747: 0x5BA5, + 0x9748: 0x5E7D, + 0x9749: 0x60A0, + 0x974A: 0x6182, + 0x974B: 0x63D6, + 0x974C: 0x6709, + 0x974D: 0x67DA, + 0x974E: 0x6E67, + 0x974F: 0x6D8C, + 0x9750: 0x7336, + 0x9751: 0x7337, + 0x9752: 0x7531, + 0x9753: 0x7950, + 0x9754: 0x88D5, + 0x9755: 0x8A98, + 0x9756: 0x904A, + 0x9757: 0x9091, + 0x9758: 0x90F5, + 0x9759: 0x96C4, + 0x975A: 0x878D, + 0x975B: 0x5915, + 0x975C: 0x4E88, + 0x975D: 0x4F59, + 0x975E: 0x4E0E, + 0x975F: 0x8A89, + 0x9760: 0x8F3F, + 0x9761: 0x9810, + 0x9762: 0x50AD, + 0x9763: 0x5E7C, + 0x9764: 0x5996, + 0x9765: 0x5BB9, + 0x9766: 0x5EB8, + 0x9767: 0x63DA, + 0x9768: 0x63FA, + 0x9769: 0x64C1, + 0x976A: 0x66DC, + 0x976B: 0x694A, + 0x976C: 0x69D8, + 0x976D: 0x6D0B, + 0x976E: 0x6EB6, + 0x976F: 0x7194, + 0x9770: 0x7528, + 0x9771: 0x7AAF, + 0x9772: 0x7F8A, + 0x9773: 0x8000, + 0x9774: 0x8449, + 0x9775: 0x84C9, + 0x9776: 0x8981, + 0x9777: 0x8B21, + 0x9778: 0x8E0A, + 0x9779: 0x9065, + 0x977A: 0x967D, + 0x977B: 0x990A, + 0x977C: 0x617E, + 0x977D: 0x6291, + 0x977E: 0x6B32, + 0x9780: 0x6C83, + 0x9781: 0x6D74, + 0x9782: 0x7FCC, + 0x9783: 0x7FFC, + 0x9784: 0x6DC0, + 0x9785: 0x7F85, + 0x9786: 0x87BA, + 0x9787: 0x88F8, + 0x9788: 0x6765, + 0x9789: 0x83B1, + 0x978A: 0x983C, + 0x978B: 0x96F7, + 0x978C: 0x6D1B, + 0x978D: 0x7D61, + 0x978E: 0x843D, + 0x978F: 0x916A, + 0x9790: 0x4E71, + 0x9791: 0x5375, + 0x9792: 0x5D50, + 0x9793: 0x6B04, + 0x9794: 0x6FEB, + 0x9795: 0x85CD, + 0x9796: 0x862D, + 0x9797: 0x89A7, + 0x9798: 0x5229, + 0x9799: 0x540F, + 0x979A: 0x5C65, + 0x979B: 0x674E, + 0x979C: 0x68A8, + 0x979D: 0x7406, + 0x979E: 0x7483, + 0x979F: 0x75E2, + 0x97A0: 0x88CF, + 0x97A1: 0x88E1, + 0x97A2: 0x91CC, + 0x97A3: 0x96E2, + 0x97A4: 0x9678, + 0x97A5: 0x5F8B, + 0x97A6: 0x7387, + 0x97A7: 0x7ACB, + 0x97A8: 0x844E, + 0x97A9: 0x63A0, + 0x97AA: 0x7565, + 0x97AB: 0x5289, + 0x97AC: 0x6D41, + 0x97AD: 0x6E9C, + 0x97AE: 0x7409, + 0x97AF: 0x7559, + 0x97B0: 0x786B, + 0x97B1: 0x7C92, + 0x97B2: 0x9686, + 0x97B3: 0x7ADC, + 0x97B4: 0x9F8D, + 0x97B5: 0x4FB6, + 0x97B6: 0x616E, + 0x97B7: 0x65C5, + 0x97B8: 0x865C, + 0x97B9: 0x4E86, + 0x97BA: 0x4EAE, + 0x97BB: 0x50DA, + 0x97BC: 0x4E21, + 0x97BD: 0x51CC, + 0x97BE: 0x5BEE, + 0x97BF: 0x6599, + 0x97C0: 0x6881, + 0x97C1: 0x6DBC, + 0x97C2: 0x731F, + 0x97C3: 0x7642, + 0x97C4: 0x77AD, + 0x97C5: 0x7A1C, + 0x97C6: 0x7CE7, + 0x97C7: 0x826F, + 0x97C8: 0x8AD2, + 0x97C9: 0x907C, + 0x97CA: 0x91CF, + 0x97CB: 0x9675, + 0x97CC: 0x9818, + 0x97CD: 0x529B, + 0x97CE: 0x7DD1, + 0x97CF: 0x502B, + 0x97D0: 0x5398, + 0x97D1: 0x6797, + 0x97D2: 0x6DCB, + 0x97D3: 0x71D0, + 0x97D4: 0x7433, + 0x97D5: 0x81E8, + 0x97D6: 0x8F2A, + 0x97D7: 0x96A3, + 0x97D8: 0x9C57, + 0x97D9: 0x9E9F, + 0x97DA: 0x7460, + 0x97DB: 0x5841, + 0x97DC: 0x6D99, + 0x97DD: 0x7D2F, + 0x97DE: 0x985E, + 0x97DF: 0x4EE4, + 0x97E0: 0x4F36, + 0x97E1: 0x4F8B, + 0x97E2: 0x51B7, + 0x97E3: 0x52B1, + 0x97E4: 0x5DBA, + 0x97E5: 0x601C, + 0x97E6: 0x73B2, + 0x97E7: 0x793C, + 0x97E8: 0x82D3, + 0x97E9: 0x9234, + 0x97EA: 0x96B7, + 0x97EB: 0x96F6, + 0x97EC: 0x970A, + 0x97ED: 0x9E97, + 0x97EE: 0x9F62, + 0x97EF: 0x66A6, + 0x97F0: 0x6B74, + 0x97F1: 0x5217, + 0x97F2: 0x52A3, + 0x97F3: 0x70C8, + 0x97F4: 0x88C2, + 0x97F5: 0x5EC9, + 0x97F6: 0x604B, + 0x97F7: 0x6190, + 0x97F8: 0x6F23, + 0x97F9: 0x7149, + 0x97FA: 0x7C3E, + 0x97FB: 0x7DF4, + 0x97FC: 0x806F, + 0x9840: 0x84EE, + 0x9841: 0x9023, + 0x9842: 0x932C, + 0x9843: 0x5442, + 0x9844: 0x9B6F, + 0x9845: 0x6AD3, + 0x9846: 0x7089, + 0x9847: 0x8CC2, + 0x9848: 0x8DEF, + 0x9849: 0x9732, + 0x984A: 0x52B4, + 0x984B: 0x5A41, + 0x984C: 0x5ECA, + 0x984D: 0x5F04, + 0x984E: 0x6717, + 0x984F: 0x697C, + 0x9850: 0x6994, + 0x9851: 0x6D6A, + 0x9852: 0x6F0F, + 0x9853: 0x7262, + 0x9854: 0x72FC, + 0x9855: 0x7BED, + 0x9856: 0x8001, + 0x9857: 0x807E, + 0x9858: 0x874B, + 0x9859: 0x90CE, + 0x985A: 0x516D, + 0x985B: 0x9E93, + 0x985C: 0x7984, + 0x985D: 0x808B, + 0x985E: 0x9332, + 0x985F: 0x8AD6, + 0x9860: 0x502D, + 0x9861: 0x548C, + 0x9862: 0x8A71, + 0x9863: 0x6B6A, + 0x9864: 0x8CC4, + 0x9865: 0x8107, + 0x9866: 0x60D1, + 0x9867: 0x67A0, + 0x9868: 0x9DF2, + 0x9869: 0x4E99, + 0x986A: 0x4E98, + 0x986B: 0x9C10, + 0x986C: 0x8A6B, + 0x986D: 0x85C1, + 0x986E: 0x8568, + 0x986F: 0x6900, + 0x9870: 0x6E7E, + 0x9871: 0x7897, + 0x9872: 0x8155, + 0x989F: 0x5F0C, + 0x98A0: 0x4E10, + 0x98A1: 0x4E15, + 0x98A2: 0x4E2A, + 0x98A3: 0x4E31, + 0x98A4: 0x4E36, + 0x98A5: 0x4E3C, + 0x98A6: 0x4E3F, + 0x98A7: 0x4E42, + 0x98A8: 0x4E56, + 0x98A9: 0x4E58, + 0x98AA: 0x4E82, + 0x98AB: 0x4E85, + 0x98AC: 0x8C6B, + 0x98AD: 0x4E8A, + 0x98AE: 0x8212, + 0x98AF: 0x5F0D, + 0x98B0: 0x4E8E, + 0x98B1: 0x4E9E, + 0x98B2: 0x4E9F, + 0x98B3: 0x4EA0, + 0x98B4: 0x4EA2, + 0x98B5: 0x4EB0, + 0x98B6: 0x4EB3, + 0x98B7: 0x4EB6, + 0x98B8: 0x4ECE, + 0x98B9: 0x4ECD, + 0x98BA: 0x4EC4, + 0x98BB: 0x4EC6, + 0x98BC: 0x4EC2, + 0x98BD: 0x4ED7, + 0x98BE: 0x4EDE, + 0x98BF: 0x4EED, + 0x98C0: 0x4EDF, + 0x98C1: 0x4EF7, + 0x98C2: 0x4F09, + 0x98C3: 0x4F5A, + 0x98C4: 0x4F30, + 0x98C5: 0x4F5B, + 0x98C6: 0x4F5D, + 0x98C7: 0x4F57, + 0x98C8: 0x4F47, + 0x98C9: 0x4F76, + 0x98CA: 0x4F88, + 0x98CB: 0x4F8F, + 0x98CC: 0x4F98, + 0x98CD: 0x4F7B, + 0x98CE: 0x4F69, + 0x98CF: 0x4F70, + 0x98D0: 0x4F91, + 0x98D1: 0x4F6F, + 0x98D2: 0x4F86, + 0x98D3: 0x4F96, + 0x98D4: 0x5118, + 0x98D5: 0x4FD4, + 0x98D6: 0x4FDF, + 0x98D7: 0x4FCE, + 0x98D8: 0x4FD8, + 0x98D9: 0x4FDB, + 0x98DA: 0x4FD1, + 0x98DB: 0x4FDA, + 0x98DC: 0x4FD0, + 0x98DD: 0x4FE4, + 0x98DE: 0x4FE5, + 0x98DF: 0x501A, + 0x98E0: 0x5028, + 0x98E1: 0x5014, + 0x98E2: 0x502A, + 0x98E3: 0x5025, + 0x98E4: 0x5005, + 0x98E5: 0x4F1C, + 0x98E6: 0x4FF6, + 0x98E7: 0x5021, + 0x98E8: 0x5029, + 0x98E9: 0x502C, + 0x98EA: 0x4FFE, + 0x98EB: 0x4FEF, + 0x98EC: 0x5011, + 0x98ED: 0x5006, + 0x98EE: 0x5043, + 0x98EF: 0x5047, + 0x98F0: 0x6703, + 0x98F1: 0x5055, + 0x98F2: 0x5050, + 0x98F3: 0x5048, + 0x98F4: 0x505A, + 0x98F5: 0x5056, + 0x98F6: 0x506C, + 0x98F7: 0x5078, + 0x98F8: 0x5080, + 0x98F9: 0x509A, + 0x98FA: 0x5085, + 0x98FB: 0x50B4, + 0x98FC: 0x50B2, + 0x9940: 0x50C9, + 0x9941: 0x50CA, + 0x9942: 0x50B3, + 0x9943: 0x50C2, + 0x9944: 0x50D6, + 0x9945: 0x50DE, + 0x9946: 0x50E5, + 0x9947: 0x50ED, + 0x9948: 0x50E3, + 0x9949: 0x50EE, + 0x994A: 0x50F9, + 0x994B: 0x50F5, + 0x994C: 0x5109, + 0x994D: 0x5101, + 0x994E: 0x5102, + 0x994F: 0x5116, + 0x9950: 0x5115, + 0x9951: 0x5114, + 0x9952: 0x511A, + 0x9953: 0x5121, + 0x9954: 0x513A, + 0x9955: 0x5137, + 0x9956: 0x513C, + 0x9957: 0x513B, + 0x9958: 0x513F, + 0x9959: 0x5140, + 0x995A: 0x5152, + 0x995B: 0x514C, + 0x995C: 0x5154, + 0x995D: 0x5162, + 0x995E: 0x7AF8, + 0x995F: 0x5169, + 0x9960: 0x516A, + 0x9961: 0x516E, + 0x9962: 0x5180, + 0x9963: 0x5182, + 0x9964: 0x56D8, + 0x9965: 0x518C, + 0x9966: 0x5189, + 0x9967: 0x518F, + 0x9968: 0x5191, + 0x9969: 0x5193, + 0x996A: 0x5195, + 0x996B: 0x5196, + 0x996C: 0x51A4, + 0x996D: 0x51A6, + 0x996E: 0x51A2, + 0x996F: 0x51A9, + 0x9970: 0x51AA, + 0x9971: 0x51AB, + 0x9972: 0x51B3, + 0x9973: 0x51B1, + 0x9974: 0x51B2, + 0x9975: 0x51B0, + 0x9976: 0x51B5, + 0x9977: 0x51BD, + 0x9978: 0x51C5, + 0x9979: 0x51C9, + 0x997A: 0x51DB, + 0x997B: 0x51E0, + 0x997C: 0x8655, + 0x997D: 0x51E9, + 0x997E: 0x51ED, + 0x9980: 0x51F0, + 0x9981: 0x51F5, + 0x9982: 0x51FE, + 0x9983: 0x5204, + 0x9984: 0x520B, + 0x9985: 0x5214, + 0x9986: 0x520E, + 0x9987: 0x5227, + 0x9988: 0x522A, + 0x9989: 0x522E, + 0x998A: 0x5233, + 0x998B: 0x5239, + 0x998C: 0x524F, + 0x998D: 0x5244, + 0x998E: 0x524B, + 0x998F: 0x524C, + 0x9990: 0x525E, + 0x9991: 0x5254, + 0x9992: 0x526A, + 0x9993: 0x5274, + 0x9994: 0x5269, + 0x9995: 0x5273, + 0x9996: 0x527F, + 0x9997: 0x527D, + 0x9998: 0x528D, + 0x9999: 0x5294, + 0x999A: 0x5292, + 0x999B: 0x5271, + 0x999C: 0x5288, + 0x999D: 0x5291, + 0x999E: 0x8FA8, + 0x999F: 0x8FA7, + 0x99A0: 0x52AC, + 0x99A1: 0x52AD, + 0x99A2: 0x52BC, + 0x99A3: 0x52B5, + 0x99A4: 0x52C1, + 0x99A5: 0x52CD, + 0x99A6: 0x52D7, + 0x99A7: 0x52DE, + 0x99A8: 0x52E3, + 0x99A9: 0x52E6, + 0x99AA: 0x98ED, + 0x99AB: 0x52E0, + 0x99AC: 0x52F3, + 0x99AD: 0x52F5, + 0x99AE: 0x52F8, + 0x99AF: 0x52F9, + 0x99B0: 0x5306, + 0x99B1: 0x5308, + 0x99B2: 0x7538, + 0x99B3: 0x530D, + 0x99B4: 0x5310, + 0x99B5: 0x530F, + 0x99B6: 0x5315, + 0x99B7: 0x531A, + 0x99B8: 0x5323, + 0x99B9: 0x532F, + 0x99BA: 0x5331, + 0x99BB: 0x5333, + 0x99BC: 0x5338, + 0x99BD: 0x5340, + 0x99BE: 0x5346, + 0x99BF: 0x5345, + 0x99C0: 0x4E17, + 0x99C1: 0x5349, + 0x99C2: 0x534D, + 0x99C3: 0x51D6, + 0x99C4: 0x535E, + 0x99C5: 0x5369, + 0x99C6: 0x536E, + 0x99C7: 0x5918, + 0x99C8: 0x537B, + 0x99C9: 0x5377, + 0x99CA: 0x5382, + 0x99CB: 0x5396, + 0x99CC: 0x53A0, + 0x99CD: 0x53A6, + 0x99CE: 0x53A5, + 0x99CF: 0x53AE, + 0x99D0: 0x53B0, + 0x99D1: 0x53B6, + 0x99D2: 0x53C3, + 0x99D3: 0x7C12, + 0x99D4: 0x96D9, + 0x99D5: 0x53DF, + 0x99D6: 0x66FC, + 0x99D7: 0x71EE, + 0x99D8: 0x53EE, + 0x99D9: 0x53E8, + 0x99DA: 0x53ED, + 0x99DB: 0x53FA, + 0x99DC: 0x5401, + 0x99DD: 0x543D, + 0x99DE: 0x5440, + 0x99DF: 0x542C, + 0x99E0: 0x542D, + 0x99E1: 0x543C, + 0x99E2: 0x542E, + 0x99E3: 0x5436, + 0x99E4: 0x5429, + 0x99E5: 0x541D, + 0x99E6: 0x544E, + 0x99E7: 0x548F, + 0x99E8: 0x5475, + 0x99E9: 0x548E, + 0x99EA: 0x545F, + 0x99EB: 0x5471, + 0x99EC: 0x5477, + 0x99ED: 0x5470, + 0x99EE: 0x5492, + 0x99EF: 0x547B, + 0x99F0: 0x5480, + 0x99F1: 0x5476, + 0x99F2: 0x5484, + 0x99F3: 0x5490, + 0x99F4: 0x5486, + 0x99F5: 0x54C7, + 0x99F6: 0x54A2, + 0x99F7: 0x54B8, + 0x99F8: 0x54A5, + 0x99F9: 0x54AC, + 0x99FA: 0x54C4, + 0x99FB: 0x54C8, + 0x99FC: 0x54A8, + 0x9A40: 0x54AB, + 0x9A41: 0x54C2, + 0x9A42: 0x54A4, + 0x9A43: 0x54BE, + 0x9A44: 0x54BC, + 0x9A45: 0x54D8, + 0x9A46: 0x54E5, + 0x9A47: 0x54E6, + 0x9A48: 0x550F, + 0x9A49: 0x5514, + 0x9A4A: 0x54FD, + 0x9A4B: 0x54EE, + 0x9A4C: 0x54ED, + 0x9A4D: 0x54FA, + 0x9A4E: 0x54E2, + 0x9A4F: 0x5539, + 0x9A50: 0x5540, + 0x9A51: 0x5563, + 0x9A52: 0x554C, + 0x9A53: 0x552E, + 0x9A54: 0x555C, + 0x9A55: 0x5545, + 0x9A56: 0x5556, + 0x9A57: 0x5557, + 0x9A58: 0x5538, + 0x9A59: 0x5533, + 0x9A5A: 0x555D, + 0x9A5B: 0x5599, + 0x9A5C: 0x5580, + 0x9A5D: 0x54AF, + 0x9A5E: 0x558A, + 0x9A5F: 0x559F, + 0x9A60: 0x557B, + 0x9A61: 0x557E, + 0x9A62: 0x5598, + 0x9A63: 0x559E, + 0x9A64: 0x55AE, + 0x9A65: 0x557C, + 0x9A66: 0x5583, + 0x9A67: 0x55A9, + 0x9A68: 0x5587, + 0x9A69: 0x55A8, + 0x9A6A: 0x55DA, + 0x9A6B: 0x55C5, + 0x9A6C: 0x55DF, + 0x9A6D: 0x55C4, + 0x9A6E: 0x55DC, + 0x9A6F: 0x55E4, + 0x9A70: 0x55D4, + 0x9A71: 0x5614, + 0x9A72: 0x55F7, + 0x9A73: 0x5616, + 0x9A74: 0x55FE, + 0x9A75: 0x55FD, + 0x9A76: 0x561B, + 0x9A77: 0x55F9, + 0x9A78: 0x564E, + 0x9A79: 0x5650, + 0x9A7A: 0x71DF, + 0x9A7B: 0x5634, + 0x9A7C: 0x5636, + 0x9A7D: 0x5632, + 0x9A7E: 0x5638, + 0x9A80: 0x566B, + 0x9A81: 0x5664, + 0x9A82: 0x562F, + 0x9A83: 0x566C, + 0x9A84: 0x566A, + 0x9A85: 0x5686, + 0x9A86: 0x5680, + 0x9A87: 0x568A, + 0x9A88: 0x56A0, + 0x9A89: 0x5694, + 0x9A8A: 0x568F, + 0x9A8B: 0x56A5, + 0x9A8C: 0x56AE, + 0x9A8D: 0x56B6, + 0x9A8E: 0x56B4, + 0x9A8F: 0x56C2, + 0x9A90: 0x56BC, + 0x9A91: 0x56C1, + 0x9A92: 0x56C3, + 0x9A93: 0x56C0, + 0x9A94: 0x56C8, + 0x9A95: 0x56CE, + 0x9A96: 0x56D1, + 0x9A97: 0x56D3, + 0x9A98: 0x56D7, + 0x9A99: 0x56EE, + 0x9A9A: 0x56F9, + 0x9A9B: 0x5700, + 0x9A9C: 0x56FF, + 0x9A9D: 0x5704, + 0x9A9E: 0x5709, + 0x9A9F: 0x5708, + 0x9AA0: 0x570B, + 0x9AA1: 0x570D, + 0x9AA2: 0x5713, + 0x9AA3: 0x5718, + 0x9AA4: 0x5716, + 0x9AA5: 0x55C7, + 0x9AA6: 0x571C, + 0x9AA7: 0x5726, + 0x9AA8: 0x5737, + 0x9AA9: 0x5738, + 0x9AAA: 0x574E, + 0x9AAB: 0x573B, + 0x9AAC: 0x5740, + 0x9AAD: 0x574F, + 0x9AAE: 0x5769, + 0x9AAF: 0x57C0, + 0x9AB0: 0x5788, + 0x9AB1: 0x5761, + 0x9AB2: 0x577F, + 0x9AB3: 0x5789, + 0x9AB4: 0x5793, + 0x9AB5: 0x57A0, + 0x9AB6: 0x57B3, + 0x9AB7: 0x57A4, + 0x9AB8: 0x57AA, + 0x9AB9: 0x57B0, + 0x9ABA: 0x57C3, + 0x9ABB: 0x57C6, + 0x9ABC: 0x57D4, + 0x9ABD: 0x57D2, + 0x9ABE: 0x57D3, + 0x9ABF: 0x580A, + 0x9AC0: 0x57D6, + 0x9AC1: 0x57E3, + 0x9AC2: 0x580B, + 0x9AC3: 0x5819, + 0x9AC4: 0x581D, + 0x9AC5: 0x5872, + 0x9AC6: 0x5821, + 0x9AC7: 0x5862, + 0x9AC8: 0x584B, + 0x9AC9: 0x5870, + 0x9ACA: 0x6BC0, + 0x9ACB: 0x5852, + 0x9ACC: 0x583D, + 0x9ACD: 0x5879, + 0x9ACE: 0x5885, + 0x9ACF: 0x58B9, + 0x9AD0: 0x589F, + 0x9AD1: 0x58AB, + 0x9AD2: 0x58BA, + 0x9AD3: 0x58DE, + 0x9AD4: 0x58BB, + 0x9AD5: 0x58B8, + 0x9AD6: 0x58AE, + 0x9AD7: 0x58C5, + 0x9AD8: 0x58D3, + 0x9AD9: 0x58D1, + 0x9ADA: 0x58D7, + 0x9ADB: 0x58D9, + 0x9ADC: 0x58D8, + 0x9ADD: 0x58E5, + 0x9ADE: 0x58DC, + 0x9ADF: 0x58E4, + 0x9AE0: 0x58DF, + 0x9AE1: 0x58EF, + 0x9AE2: 0x58FA, + 0x9AE3: 0x58F9, + 0x9AE4: 0x58FB, + 0x9AE5: 0x58FC, + 0x9AE6: 0x58FD, + 0x9AE7: 0x5902, + 0x9AE8: 0x590A, + 0x9AE9: 0x5910, + 0x9AEA: 0x591B, + 0x9AEB: 0x68A6, + 0x9AEC: 0x5925, + 0x9AED: 0x592C, + 0x9AEE: 0x592D, + 0x9AEF: 0x5932, + 0x9AF0: 0x5938, + 0x9AF1: 0x593E, + 0x9AF2: 0x7AD2, + 0x9AF3: 0x5955, + 0x9AF4: 0x5950, + 0x9AF5: 0x594E, + 0x9AF6: 0x595A, + 0x9AF7: 0x5958, + 0x9AF8: 0x5962, + 0x9AF9: 0x5960, + 0x9AFA: 0x5967, + 0x9AFB: 0x596C, + 0x9AFC: 0x5969, + 0x9B40: 0x5978, + 0x9B41: 0x5981, + 0x9B42: 0x599D, + 0x9B43: 0x4F5E, + 0x9B44: 0x4FAB, + 0x9B45: 0x59A3, + 0x9B46: 0x59B2, + 0x9B47: 0x59C6, + 0x9B48: 0x59E8, + 0x9B49: 0x59DC, + 0x9B4A: 0x598D, + 0x9B4B: 0x59D9, + 0x9B4C: 0x59DA, + 0x9B4D: 0x5A25, + 0x9B4E: 0x5A1F, + 0x9B4F: 0x5A11, + 0x9B50: 0x5A1C, + 0x9B51: 0x5A09, + 0x9B52: 0x5A1A, + 0x9B53: 0x5A40, + 0x9B54: 0x5A6C, + 0x9B55: 0x5A49, + 0x9B56: 0x5A35, + 0x9B57: 0x5A36, + 0x9B58: 0x5A62, + 0x9B59: 0x5A6A, + 0x9B5A: 0x5A9A, + 0x9B5B: 0x5ABC, + 0x9B5C: 0x5ABE, + 0x9B5D: 0x5ACB, + 0x9B5E: 0x5AC2, + 0x9B5F: 0x5ABD, + 0x9B60: 0x5AE3, + 0x9B61: 0x5AD7, + 0x9B62: 0x5AE6, + 0x9B63: 0x5AE9, + 0x9B64: 0x5AD6, + 0x9B65: 0x5AFA, + 0x9B66: 0x5AFB, + 0x9B67: 0x5B0C, + 0x9B68: 0x5B0B, + 0x9B69: 0x5B16, + 0x9B6A: 0x5B32, + 0x9B6B: 0x5AD0, + 0x9B6C: 0x5B2A, + 0x9B6D: 0x5B36, + 0x9B6E: 0x5B3E, + 0x9B6F: 0x5B43, + 0x9B70: 0x5B45, + 0x9B71: 0x5B40, + 0x9B72: 0x5B51, + 0x9B73: 0x5B55, + 0x9B74: 0x5B5A, + 0x9B75: 0x5B5B, + 0x9B76: 0x5B65, + 0x9B77: 0x5B69, + 0x9B78: 0x5B70, + 0x9B79: 0x5B73, + 0x9B7A: 0x5B75, + 0x9B7B: 0x5B78, + 0x9B7C: 0x6588, + 0x9B7D: 0x5B7A, + 0x9B7E: 0x5B80, + 0x9B80: 0x5B83, + 0x9B81: 0x5BA6, + 0x9B82: 0x5BB8, + 0x9B83: 0x5BC3, + 0x9B84: 0x5BC7, + 0x9B85: 0x5BC9, + 0x9B86: 0x5BD4, + 0x9B87: 0x5BD0, + 0x9B88: 0x5BE4, + 0x9B89: 0x5BE6, + 0x9B8A: 0x5BE2, + 0x9B8B: 0x5BDE, + 0x9B8C: 0x5BE5, + 0x9B8D: 0x5BEB, + 0x9B8E: 0x5BF0, + 0x9B8F: 0x5BF6, + 0x9B90: 0x5BF3, + 0x9B91: 0x5C05, + 0x9B92: 0x5C07, + 0x9B93: 0x5C08, + 0x9B94: 0x5C0D, + 0x9B95: 0x5C13, + 0x9B96: 0x5C20, + 0x9B97: 0x5C22, + 0x9B98: 0x5C28, + 0x9B99: 0x5C38, + 0x9B9A: 0x5C39, + 0x9B9B: 0x5C41, + 0x9B9C: 0x5C46, + 0x9B9D: 0x5C4E, + 0x9B9E: 0x5C53, + 0x9B9F: 0x5C50, + 0x9BA0: 0x5C4F, + 0x9BA1: 0x5B71, + 0x9BA2: 0x5C6C, + 0x9BA3: 0x5C6E, + 0x9BA4: 0x4E62, + 0x9BA5: 0x5C76, + 0x9BA6: 0x5C79, + 0x9BA7: 0x5C8C, + 0x9BA8: 0x5C91, + 0x9BA9: 0x5C94, + 0x9BAA: 0x599B, + 0x9BAB: 0x5CAB, + 0x9BAC: 0x5CBB, + 0x9BAD: 0x5CB6, + 0x9BAE: 0x5CBC, + 0x9BAF: 0x5CB7, + 0x9BB0: 0x5CC5, + 0x9BB1: 0x5CBE, + 0x9BB2: 0x5CC7, + 0x9BB3: 0x5CD9, + 0x9BB4: 0x5CE9, + 0x9BB5: 0x5CFD, + 0x9BB6: 0x5CFA, + 0x9BB7: 0x5CED, + 0x9BB8: 0x5D8C, + 0x9BB9: 0x5CEA, + 0x9BBA: 0x5D0B, + 0x9BBB: 0x5D15, + 0x9BBC: 0x5D17, + 0x9BBD: 0x5D5C, + 0x9BBE: 0x5D1F, + 0x9BBF: 0x5D1B, + 0x9BC0: 0x5D11, + 0x9BC1: 0x5D14, + 0x9BC2: 0x5D22, + 0x9BC3: 0x5D1A, + 0x9BC4: 0x5D19, + 0x9BC5: 0x5D18, + 0x9BC6: 0x5D4C, + 0x9BC7: 0x5D52, + 0x9BC8: 0x5D4E, + 0x9BC9: 0x5D4B, + 0x9BCA: 0x5D6C, + 0x9BCB: 0x5D73, + 0x9BCC: 0x5D76, + 0x9BCD: 0x5D87, + 0x9BCE: 0x5D84, + 0x9BCF: 0x5D82, + 0x9BD0: 0x5DA2, + 0x9BD1: 0x5D9D, + 0x9BD2: 0x5DAC, + 0x9BD3: 0x5DAE, + 0x9BD4: 0x5DBD, + 0x9BD5: 0x5D90, + 0x9BD6: 0x5DB7, + 0x9BD7: 0x5DBC, + 0x9BD8: 0x5DC9, + 0x9BD9: 0x5DCD, + 0x9BDA: 0x5DD3, + 0x9BDB: 0x5DD2, + 0x9BDC: 0x5DD6, + 0x9BDD: 0x5DDB, + 0x9BDE: 0x5DEB, + 0x9BDF: 0x5DF2, + 0x9BE0: 0x5DF5, + 0x9BE1: 0x5E0B, + 0x9BE2: 0x5E1A, + 0x9BE3: 0x5E19, + 0x9BE4: 0x5E11, + 0x9BE5: 0x5E1B, + 0x9BE6: 0x5E36, + 0x9BE7: 0x5E37, + 0x9BE8: 0x5E44, + 0x9BE9: 0x5E43, + 0x9BEA: 0x5E40, + 0x9BEB: 0x5E4E, + 0x9BEC: 0x5E57, + 0x9BED: 0x5E54, + 0x9BEE: 0x5E5F, + 0x9BEF: 0x5E62, + 0x9BF0: 0x5E64, + 0x9BF1: 0x5E47, + 0x9BF2: 0x5E75, + 0x9BF3: 0x5E76, + 0x9BF4: 0x5E7A, + 0x9BF5: 0x9EBC, + 0x9BF6: 0x5E7F, + 0x9BF7: 0x5EA0, + 0x9BF8: 0x5EC1, + 0x9BF9: 0x5EC2, + 0x9BFA: 0x5EC8, + 0x9BFB: 0x5ED0, + 0x9BFC: 0x5ECF, + 0x9C40: 0x5ED6, + 0x9C41: 0x5EE3, + 0x9C42: 0x5EDD, + 0x9C43: 0x5EDA, + 0x9C44: 0x5EDB, + 0x9C45: 0x5EE2, + 0x9C46: 0x5EE1, + 0x9C47: 0x5EE8, + 0x9C48: 0x5EE9, + 0x9C49: 0x5EEC, + 0x9C4A: 0x5EF1, + 0x9C4B: 0x5EF3, + 0x9C4C: 0x5EF0, + 0x9C4D: 0x5EF4, + 0x9C4E: 0x5EF8, + 0x9C4F: 0x5EFE, + 0x9C50: 0x5F03, + 0x9C51: 0x5F09, + 0x9C52: 0x5F5D, + 0x9C53: 0x5F5C, + 0x9C54: 0x5F0B, + 0x9C55: 0x5F11, + 0x9C56: 0x5F16, + 0x9C57: 0x5F29, + 0x9C58: 0x5F2D, + 0x9C59: 0x5F38, + 0x9C5A: 0x5F41, + 0x9C5B: 0x5F48, + 0x9C5C: 0x5F4C, + 0x9C5D: 0x5F4E, + 0x9C5E: 0x5F2F, + 0x9C5F: 0x5F51, + 0x9C60: 0x5F56, + 0x9C61: 0x5F57, + 0x9C62: 0x5F59, + 0x9C63: 0x5F61, + 0x9C64: 0x5F6D, + 0x9C65: 0x5F73, + 0x9C66: 0x5F77, + 0x9C67: 0x5F83, + 0x9C68: 0x5F82, + 0x9C69: 0x5F7F, + 0x9C6A: 0x5F8A, + 0x9C6B: 0x5F88, + 0x9C6C: 0x5F91, + 0x9C6D: 0x5F87, + 0x9C6E: 0x5F9E, + 0x9C6F: 0x5F99, + 0x9C70: 0x5F98, + 0x9C71: 0x5FA0, + 0x9C72: 0x5FA8, + 0x9C73: 0x5FAD, + 0x9C74: 0x5FBC, + 0x9C75: 0x5FD6, + 0x9C76: 0x5FFB, + 0x9C77: 0x5FE4, + 0x9C78: 0x5FF8, + 0x9C79: 0x5FF1, + 0x9C7A: 0x5FDD, + 0x9C7B: 0x60B3, + 0x9C7C: 0x5FFF, + 0x9C7D: 0x6021, + 0x9C7E: 0x6060, + 0x9C80: 0x6019, + 0x9C81: 0x6010, + 0x9C82: 0x6029, + 0x9C83: 0x600E, + 0x9C84: 0x6031, + 0x9C85: 0x601B, + 0x9C86: 0x6015, + 0x9C87: 0x602B, + 0x9C88: 0x6026, + 0x9C89: 0x600F, + 0x9C8A: 0x603A, + 0x9C8B: 0x605A, + 0x9C8C: 0x6041, + 0x9C8D: 0x606A, + 0x9C8E: 0x6077, + 0x9C8F: 0x605F, + 0x9C90: 0x604A, + 0x9C91: 0x6046, + 0x9C92: 0x604D, + 0x9C93: 0x6063, + 0x9C94: 0x6043, + 0x9C95: 0x6064, + 0x9C96: 0x6042, + 0x9C97: 0x606C, + 0x9C98: 0x606B, + 0x9C99: 0x6059, + 0x9C9A: 0x6081, + 0x9C9B: 0x608D, + 0x9C9C: 0x60E7, + 0x9C9D: 0x6083, + 0x9C9E: 0x609A, + 0x9C9F: 0x6084, + 0x9CA0: 0x609B, + 0x9CA1: 0x6096, + 0x9CA2: 0x6097, + 0x9CA3: 0x6092, + 0x9CA4: 0x60A7, + 0x9CA5: 0x608B, + 0x9CA6: 0x60E1, + 0x9CA7: 0x60B8, + 0x9CA8: 0x60E0, + 0x9CA9: 0x60D3, + 0x9CAA: 0x60B4, + 0x9CAB: 0x5FF0, + 0x9CAC: 0x60BD, + 0x9CAD: 0x60C6, + 0x9CAE: 0x60B5, + 0x9CAF: 0x60D8, + 0x9CB0: 0x614D, + 0x9CB1: 0x6115, + 0x9CB2: 0x6106, + 0x9CB3: 0x60F6, + 0x9CB4: 0x60F7, + 0x9CB5: 0x6100, + 0x9CB6: 0x60F4, + 0x9CB7: 0x60FA, + 0x9CB8: 0x6103, + 0x9CB9: 0x6121, + 0x9CBA: 0x60FB, + 0x9CBB: 0x60F1, + 0x9CBC: 0x610D, + 0x9CBD: 0x610E, + 0x9CBE: 0x6147, + 0x9CBF: 0x613E, + 0x9CC0: 0x6128, + 0x9CC1: 0x6127, + 0x9CC2: 0x614A, + 0x9CC3: 0x613F, + 0x9CC4: 0x613C, + 0x9CC5: 0x612C, + 0x9CC6: 0x6134, + 0x9CC7: 0x613D, + 0x9CC8: 0x6142, + 0x9CC9: 0x6144, + 0x9CCA: 0x6173, + 0x9CCB: 0x6177, + 0x9CCC: 0x6158, + 0x9CCD: 0x6159, + 0x9CCE: 0x615A, + 0x9CCF: 0x616B, + 0x9CD0: 0x6174, + 0x9CD1: 0x616F, + 0x9CD2: 0x6165, + 0x9CD3: 0x6171, + 0x9CD4: 0x615F, + 0x9CD5: 0x615D, + 0x9CD6: 0x6153, + 0x9CD7: 0x6175, + 0x9CD8: 0x6199, + 0x9CD9: 0x6196, + 0x9CDA: 0x6187, + 0x9CDB: 0x61AC, + 0x9CDC: 0x6194, + 0x9CDD: 0x619A, + 0x9CDE: 0x618A, + 0x9CDF: 0x6191, + 0x9CE0: 0x61AB, + 0x9CE1: 0x61AE, + 0x9CE2: 0x61CC, + 0x9CE3: 0x61CA, + 0x9CE4: 0x61C9, + 0x9CE5: 0x61F7, + 0x9CE6: 0x61C8, + 0x9CE7: 0x61C3, + 0x9CE8: 0x61C6, + 0x9CE9: 0x61BA, + 0x9CEA: 0x61CB, + 0x9CEB: 0x7F79, + 0x9CEC: 0x61CD, + 0x9CED: 0x61E6, + 0x9CEE: 0x61E3, + 0x9CEF: 0x61F6, + 0x9CF0: 0x61FA, + 0x9CF1: 0x61F4, + 0x9CF2: 0x61FF, + 0x9CF3: 0x61FD, + 0x9CF4: 0x61FC, + 0x9CF5: 0x61FE, + 0x9CF6: 0x6200, + 0x9CF7: 0x6208, + 0x9CF8: 0x6209, + 0x9CF9: 0x620D, + 0x9CFA: 0x620C, + 0x9CFB: 0x6214, + 0x9CFC: 0x621B, + 0x9D40: 0x621E, + 0x9D41: 0x6221, + 0x9D42: 0x622A, + 0x9D43: 0x622E, + 0x9D44: 0x6230, + 0x9D45: 0x6232, + 0x9D46: 0x6233, + 0x9D47: 0x6241, + 0x9D48: 0x624E, + 0x9D49: 0x625E, + 0x9D4A: 0x6263, + 0x9D4B: 0x625B, + 0x9D4C: 0x6260, + 0x9D4D: 0x6268, + 0x9D4E: 0x627C, + 0x9D4F: 0x6282, + 0x9D50: 0x6289, + 0x9D51: 0x627E, + 0x9D52: 0x6292, + 0x9D53: 0x6293, + 0x9D54: 0x6296, + 0x9D55: 0x62D4, + 0x9D56: 0x6283, + 0x9D57: 0x6294, + 0x9D58: 0x62D7, + 0x9D59: 0x62D1, + 0x9D5A: 0x62BB, + 0x9D5B: 0x62CF, + 0x9D5C: 0x62FF, + 0x9D5D: 0x62C6, + 0x9D5E: 0x64D4, + 0x9D5F: 0x62C8, + 0x9D60: 0x62DC, + 0x9D61: 0x62CC, + 0x9D62: 0x62CA, + 0x9D63: 0x62C2, + 0x9D64: 0x62C7, + 0x9D65: 0x629B, + 0x9D66: 0x62C9, + 0x9D67: 0x630C, + 0x9D68: 0x62EE, + 0x9D69: 0x62F1, + 0x9D6A: 0x6327, + 0x9D6B: 0x6302, + 0x9D6C: 0x6308, + 0x9D6D: 0x62EF, + 0x9D6E: 0x62F5, + 0x9D6F: 0x6350, + 0x9D70: 0x633E, + 0x9D71: 0x634D, + 0x9D72: 0x641C, + 0x9D73: 0x634F, + 0x9D74: 0x6396, + 0x9D75: 0x638E, + 0x9D76: 0x6380, + 0x9D77: 0x63AB, + 0x9D78: 0x6376, + 0x9D79: 0x63A3, + 0x9D7A: 0x638F, + 0x9D7B: 0x6389, + 0x9D7C: 0x639F, + 0x9D7D: 0x63B5, + 0x9D7E: 0x636B, + 0x9D80: 0x6369, + 0x9D81: 0x63BE, + 0x9D82: 0x63E9, + 0x9D83: 0x63C0, + 0x9D84: 0x63C6, + 0x9D85: 0x63E3, + 0x9D86: 0x63C9, + 0x9D87: 0x63D2, + 0x9D88: 0x63F6, + 0x9D89: 0x63C4, + 0x9D8A: 0x6416, + 0x9D8B: 0x6434, + 0x9D8C: 0x6406, + 0x9D8D: 0x6413, + 0x9D8E: 0x6426, + 0x9D8F: 0x6436, + 0x9D90: 0x651D, + 0x9D91: 0x6417, + 0x9D92: 0x6428, + 0x9D93: 0x640F, + 0x9D94: 0x6467, + 0x9D95: 0x646F, + 0x9D96: 0x6476, + 0x9D97: 0x644E, + 0x9D98: 0x652A, + 0x9D99: 0x6495, + 0x9D9A: 0x6493, + 0x9D9B: 0x64A5, + 0x9D9C: 0x64A9, + 0x9D9D: 0x6488, + 0x9D9E: 0x64BC, + 0x9D9F: 0x64DA, + 0x9DA0: 0x64D2, + 0x9DA1: 0x64C5, + 0x9DA2: 0x64C7, + 0x9DA3: 0x64BB, + 0x9DA4: 0x64D8, + 0x9DA5: 0x64C2, + 0x9DA6: 0x64F1, + 0x9DA7: 0x64E7, + 0x9DA8: 0x8209, + 0x9DA9: 0x64E0, + 0x9DAA: 0x64E1, + 0x9DAB: 0x62AC, + 0x9DAC: 0x64E3, + 0x9DAD: 0x64EF, + 0x9DAE: 0x652C, + 0x9DAF: 0x64F6, + 0x9DB0: 0x64F4, + 0x9DB1: 0x64F2, + 0x9DB2: 0x64FA, + 0x9DB3: 0x6500, + 0x9DB4: 0x64FD, + 0x9DB5: 0x6518, + 0x9DB6: 0x651C, + 0x9DB7: 0x6505, + 0x9DB8: 0x6524, + 0x9DB9: 0x6523, + 0x9DBA: 0x652B, + 0x9DBB: 0x6534, + 0x9DBC: 0x6535, + 0x9DBD: 0x6537, + 0x9DBE: 0x6536, + 0x9DBF: 0x6538, + 0x9DC0: 0x754B, + 0x9DC1: 0x6548, + 0x9DC2: 0x6556, + 0x9DC3: 0x6555, + 0x9DC4: 0x654D, + 0x9DC5: 0x6558, + 0x9DC6: 0x655E, + 0x9DC7: 0x655D, + 0x9DC8: 0x6572, + 0x9DC9: 0x6578, + 0x9DCA: 0x6582, + 0x9DCB: 0x6583, + 0x9DCC: 0x8B8A, + 0x9DCD: 0x659B, + 0x9DCE: 0x659F, + 0x9DCF: 0x65AB, + 0x9DD0: 0x65B7, + 0x9DD1: 0x65C3, + 0x9DD2: 0x65C6, + 0x9DD3: 0x65C1, + 0x9DD4: 0x65C4, + 0x9DD5: 0x65CC, + 0x9DD6: 0x65D2, + 0x9DD7: 0x65DB, + 0x9DD8: 0x65D9, + 0x9DD9: 0x65E0, + 0x9DDA: 0x65E1, + 0x9DDB: 0x65F1, + 0x9DDC: 0x6772, + 0x9DDD: 0x660A, + 0x9DDE: 0x6603, + 0x9DDF: 0x65FB, + 0x9DE0: 0x6773, + 0x9DE1: 0x6635, + 0x9DE2: 0x6636, + 0x9DE3: 0x6634, + 0x9DE4: 0x661C, + 0x9DE5: 0x664F, + 0x9DE6: 0x6644, + 0x9DE7: 0x6649, + 0x9DE8: 0x6641, + 0x9DE9: 0x665E, + 0x9DEA: 0x665D, + 0x9DEB: 0x6664, + 0x9DEC: 0x6667, + 0x9DED: 0x6668, + 0x9DEE: 0x665F, + 0x9DEF: 0x6662, + 0x9DF0: 0x6670, + 0x9DF1: 0x6683, + 0x9DF2: 0x6688, + 0x9DF3: 0x668E, + 0x9DF4: 0x6689, + 0x9DF5: 0x6684, + 0x9DF6: 0x6698, + 0x9DF7: 0x669D, + 0x9DF8: 0x66C1, + 0x9DF9: 0x66B9, + 0x9DFA: 0x66C9, + 0x9DFB: 0x66BE, + 0x9DFC: 0x66BC, + 0x9E40: 0x66C4, + 0x9E41: 0x66B8, + 0x9E42: 0x66D6, + 0x9E43: 0x66DA, + 0x9E44: 0x66E0, + 0x9E45: 0x663F, + 0x9E46: 0x66E6, + 0x9E47: 0x66E9, + 0x9E48: 0x66F0, + 0x9E49: 0x66F5, + 0x9E4A: 0x66F7, + 0x9E4B: 0x670F, + 0x9E4C: 0x6716, + 0x9E4D: 0x671E, + 0x9E4E: 0x6726, + 0x9E4F: 0x6727, + 0x9E50: 0x9738, + 0x9E51: 0x672E, + 0x9E52: 0x673F, + 0x9E53: 0x6736, + 0x9E54: 0x6741, + 0x9E55: 0x6738, + 0x9E56: 0x6737, + 0x9E57: 0x6746, + 0x9E58: 0x675E, + 0x9E59: 0x6760, + 0x9E5A: 0x6759, + 0x9E5B: 0x6763, + 0x9E5C: 0x6764, + 0x9E5D: 0x6789, + 0x9E5E: 0x6770, + 0x9E5F: 0x67A9, + 0x9E60: 0x677C, + 0x9E61: 0x676A, + 0x9E62: 0x678C, + 0x9E63: 0x678B, + 0x9E64: 0x67A6, + 0x9E65: 0x67A1, + 0x9E66: 0x6785, + 0x9E67: 0x67B7, + 0x9E68: 0x67EF, + 0x9E69: 0x67B4, + 0x9E6A: 0x67EC, + 0x9E6B: 0x67B3, + 0x9E6C: 0x67E9, + 0x9E6D: 0x67B8, + 0x9E6E: 0x67E4, + 0x9E6F: 0x67DE, + 0x9E70: 0x67DD, + 0x9E71: 0x67E2, + 0x9E72: 0x67EE, + 0x9E73: 0x67B9, + 0x9E74: 0x67CE, + 0x9E75: 0x67C6, + 0x9E76: 0x67E7, + 0x9E77: 0x6A9C, + 0x9E78: 0x681E, + 0x9E79: 0x6846, + 0x9E7A: 0x6829, + 0x9E7B: 0x6840, + 0x9E7C: 0x684D, + 0x9E7D: 0x6832, + 0x9E7E: 0x684E, + 0x9E80: 0x68B3, + 0x9E81: 0x682B, + 0x9E82: 0x6859, + 0x9E83: 0x6863, + 0x9E84: 0x6877, + 0x9E85: 0x687F, + 0x9E86: 0x689F, + 0x9E87: 0x688F, + 0x9E88: 0x68AD, + 0x9E89: 0x6894, + 0x9E8A: 0x689D, + 0x9E8B: 0x689B, + 0x9E8C: 0x6883, + 0x9E8D: 0x6AAE, + 0x9E8E: 0x68B9, + 0x9E8F: 0x6874, + 0x9E90: 0x68B5, + 0x9E91: 0x68A0, + 0x9E92: 0x68BA, + 0x9E93: 0x690F, + 0x9E94: 0x688D, + 0x9E95: 0x687E, + 0x9E96: 0x6901, + 0x9E97: 0x68CA, + 0x9E98: 0x6908, + 0x9E99: 0x68D8, + 0x9E9A: 0x6922, + 0x9E9B: 0x6926, + 0x9E9C: 0x68E1, + 0x9E9D: 0x690C, + 0x9E9E: 0x68CD, + 0x9E9F: 0x68D4, + 0x9EA0: 0x68E7, + 0x9EA1: 0x68D5, + 0x9EA2: 0x6936, + 0x9EA3: 0x6912, + 0x9EA4: 0x6904, + 0x9EA5: 0x68D7, + 0x9EA6: 0x68E3, + 0x9EA7: 0x6925, + 0x9EA8: 0x68F9, + 0x9EA9: 0x68E0, + 0x9EAA: 0x68EF, + 0x9EAB: 0x6928, + 0x9EAC: 0x692A, + 0x9EAD: 0x691A, + 0x9EAE: 0x6923, + 0x9EAF: 0x6921, + 0x9EB0: 0x68C6, + 0x9EB1: 0x6979, + 0x9EB2: 0x6977, + 0x9EB3: 0x695C, + 0x9EB4: 0x6978, + 0x9EB5: 0x696B, + 0x9EB6: 0x6954, + 0x9EB7: 0x697E, + 0x9EB8: 0x696E, + 0x9EB9: 0x6939, + 0x9EBA: 0x6974, + 0x9EBB: 0x693D, + 0x9EBC: 0x6959, + 0x9EBD: 0x6930, + 0x9EBE: 0x6961, + 0x9EBF: 0x695E, + 0x9EC0: 0x695D, + 0x9EC1: 0x6981, + 0x9EC2: 0x696A, + 0x9EC3: 0x69B2, + 0x9EC4: 0x69AE, + 0x9EC5: 0x69D0, + 0x9EC6: 0x69BF, + 0x9EC7: 0x69C1, + 0x9EC8: 0x69D3, + 0x9EC9: 0x69BE, + 0x9ECA: 0x69CE, + 0x9ECB: 0x5BE8, + 0x9ECC: 0x69CA, + 0x9ECD: 0x69DD, + 0x9ECE: 0x69BB, + 0x9ECF: 0x69C3, + 0x9ED0: 0x69A7, + 0x9ED1: 0x6A2E, + 0x9ED2: 0x6991, + 0x9ED3: 0x69A0, + 0x9ED4: 0x699C, + 0x9ED5: 0x6995, + 0x9ED6: 0x69B4, + 0x9ED7: 0x69DE, + 0x9ED8: 0x69E8, + 0x9ED9: 0x6A02, + 0x9EDA: 0x6A1B, + 0x9EDB: 0x69FF, + 0x9EDC: 0x6B0A, + 0x9EDD: 0x69F9, + 0x9EDE: 0x69F2, + 0x9EDF: 0x69E7, + 0x9EE0: 0x6A05, + 0x9EE1: 0x69B1, + 0x9EE2: 0x6A1E, + 0x9EE3: 0x69ED, + 0x9EE4: 0x6A14, + 0x9EE5: 0x69EB, + 0x9EE6: 0x6A0A, + 0x9EE7: 0x6A12, + 0x9EE8: 0x6AC1, + 0x9EE9: 0x6A23, + 0x9EEA: 0x6A13, + 0x9EEB: 0x6A44, + 0x9EEC: 0x6A0C, + 0x9EED: 0x6A72, + 0x9EEE: 0x6A36, + 0x9EEF: 0x6A78, + 0x9EF0: 0x6A47, + 0x9EF1: 0x6A62, + 0x9EF2: 0x6A59, + 0x9EF3: 0x6A66, + 0x9EF4: 0x6A48, + 0x9EF5: 0x6A38, + 0x9EF6: 0x6A22, + 0x9EF7: 0x6A90, + 0x9EF8: 0x6A8D, + 0x9EF9: 0x6AA0, + 0x9EFA: 0x6A84, + 0x9EFB: 0x6AA2, + 0x9EFC: 0x6AA3, + 0x9F40: 0x6A97, + 0x9F41: 0x8617, + 0x9F42: 0x6ABB, + 0x9F43: 0x6AC3, + 0x9F44: 0x6AC2, + 0x9F45: 0x6AB8, + 0x9F46: 0x6AB3, + 0x9F47: 0x6AAC, + 0x9F48: 0x6ADE, + 0x9F49: 0x6AD1, + 0x9F4A: 0x6ADF, + 0x9F4B: 0x6AAA, + 0x9F4C: 0x6ADA, + 0x9F4D: 0x6AEA, + 0x9F4E: 0x6AFB, + 0x9F4F: 0x6B05, + 0x9F50: 0x8616, + 0x9F51: 0x6AFA, + 0x9F52: 0x6B12, + 0x9F53: 0x6B16, + 0x9F54: 0x9B31, + 0x9F55: 0x6B1F, + 0x9F56: 0x6B38, + 0x9F57: 0x6B37, + 0x9F58: 0x76DC, + 0x9F59: 0x6B39, + 0x9F5A: 0x98EE, + 0x9F5B: 0x6B47, + 0x9F5C: 0x6B43, + 0x9F5D: 0x6B49, + 0x9F5E: 0x6B50, + 0x9F5F: 0x6B59, + 0x9F60: 0x6B54, + 0x9F61: 0x6B5B, + 0x9F62: 0x6B5F, + 0x9F63: 0x6B61, + 0x9F64: 0x6B78, + 0x9F65: 0x6B79, + 0x9F66: 0x6B7F, + 0x9F67: 0x6B80, + 0x9F68: 0x6B84, + 0x9F69: 0x6B83, + 0x9F6A: 0x6B8D, + 0x9F6B: 0x6B98, + 0x9F6C: 0x6B95, + 0x9F6D: 0x6B9E, + 0x9F6E: 0x6BA4, + 0x9F6F: 0x6BAA, + 0x9F70: 0x6BAB, + 0x9F71: 0x6BAF, + 0x9F72: 0x6BB2, + 0x9F73: 0x6BB1, + 0x9F74: 0x6BB3, + 0x9F75: 0x6BB7, + 0x9F76: 0x6BBC, + 0x9F77: 0x6BC6, + 0x9F78: 0x6BCB, + 0x9F79: 0x6BD3, + 0x9F7A: 0x6BDF, + 0x9F7B: 0x6BEC, + 0x9F7C: 0x6BEB, + 0x9F7D: 0x6BF3, + 0x9F7E: 0x6BEF, + 0x9F80: 0x9EBE, + 0x9F81: 0x6C08, + 0x9F82: 0x6C13, + 0x9F83: 0x6C14, + 0x9F84: 0x6C1B, + 0x9F85: 0x6C24, + 0x9F86: 0x6C23, + 0x9F87: 0x6C5E, + 0x9F88: 0x6C55, + 0x9F89: 0x6C62, + 0x9F8A: 0x6C6A, + 0x9F8B: 0x6C82, + 0x9F8C: 0x6C8D, + 0x9F8D: 0x6C9A, + 0x9F8E: 0x6C81, + 0x9F8F: 0x6C9B, + 0x9F90: 0x6C7E, + 0x9F91: 0x6C68, + 0x9F92: 0x6C73, + 0x9F93: 0x6C92, + 0x9F94: 0x6C90, + 0x9F95: 0x6CC4, + 0x9F96: 0x6CF1, + 0x9F97: 0x6CD3, + 0x9F98: 0x6CBD, + 0x9F99: 0x6CD7, + 0x9F9A: 0x6CC5, + 0x9F9B: 0x6CDD, + 0x9F9C: 0x6CAE, + 0x9F9D: 0x6CB1, + 0x9F9E: 0x6CBE, + 0x9F9F: 0x6CBA, + 0x9FA0: 0x6CDB, + 0x9FA1: 0x6CEF, + 0x9FA2: 0x6CD9, + 0x9FA3: 0x6CEA, + 0x9FA4: 0x6D1F, + 0x9FA5: 0x884D, + 0x9FA6: 0x6D36, + 0x9FA7: 0x6D2B, + 0x9FA8: 0x6D3D, + 0x9FA9: 0x6D38, + 0x9FAA: 0x6D19, + 0x9FAB: 0x6D35, + 0x9FAC: 0x6D33, + 0x9FAD: 0x6D12, + 0x9FAE: 0x6D0C, + 0x9FAF: 0x6D63, + 0x9FB0: 0x6D93, + 0x9FB1: 0x6D64, + 0x9FB2: 0x6D5A, + 0x9FB3: 0x6D79, + 0x9FB4: 0x6D59, + 0x9FB5: 0x6D8E, + 0x9FB6: 0x6D95, + 0x9FB7: 0x6FE4, + 0x9FB8: 0x6D85, + 0x9FB9: 0x6DF9, + 0x9FBA: 0x6E15, + 0x9FBB: 0x6E0A, + 0x9FBC: 0x6DB5, + 0x9FBD: 0x6DC7, + 0x9FBE: 0x6DE6, + 0x9FBF: 0x6DB8, + 0x9FC0: 0x6DC6, + 0x9FC1: 0x6DEC, + 0x9FC2: 0x6DDE, + 0x9FC3: 0x6DCC, + 0x9FC4: 0x6DE8, + 0x9FC5: 0x6DD2, + 0x9FC6: 0x6DC5, + 0x9FC7: 0x6DFA, + 0x9FC8: 0x6DD9, + 0x9FC9: 0x6DE4, + 0x9FCA: 0x6DD5, + 0x9FCB: 0x6DEA, + 0x9FCC: 0x6DEE, + 0x9FCD: 0x6E2D, + 0x9FCE: 0x6E6E, + 0x9FCF: 0x6E2E, + 0x9FD0: 0x6E19, + 0x9FD1: 0x6E72, + 0x9FD2: 0x6E5F, + 0x9FD3: 0x6E3E, + 0x9FD4: 0x6E23, + 0x9FD5: 0x6E6B, + 0x9FD6: 0x6E2B, + 0x9FD7: 0x6E76, + 0x9FD8: 0x6E4D, + 0x9FD9: 0x6E1F, + 0x9FDA: 0x6E43, + 0x9FDB: 0x6E3A, + 0x9FDC: 0x6E4E, + 0x9FDD: 0x6E24, + 0x9FDE: 0x6EFF, + 0x9FDF: 0x6E1D, + 0x9FE0: 0x6E38, + 0x9FE1: 0x6E82, + 0x9FE2: 0x6EAA, + 0x9FE3: 0x6E98, + 0x9FE4: 0x6EC9, + 0x9FE5: 0x6EB7, + 0x9FE6: 0x6ED3, + 0x9FE7: 0x6EBD, + 0x9FE8: 0x6EAF, + 0x9FE9: 0x6EC4, + 0x9FEA: 0x6EB2, + 0x9FEB: 0x6ED4, + 0x9FEC: 0x6ED5, + 0x9FED: 0x6E8F, + 0x9FEE: 0x6EA5, + 0x9FEF: 0x6EC2, + 0x9FF0: 0x6E9F, + 0x9FF1: 0x6F41, + 0x9FF2: 0x6F11, + 0x9FF3: 0x704C, + 0x9FF4: 0x6EEC, + 0x9FF5: 0x6EF8, + 0x9FF6: 0x6EFE, + 0x9FF7: 0x6F3F, + 0x9FF8: 0x6EF2, + 0x9FF9: 0x6F31, + 0x9FFA: 0x6EEF, + 0x9FFB: 0x6F32, + 0x9FFC: 0x6ECC, + 0xA1: 0xFF61, + 0xA2: 0xFF62, + 0xA3: 0xFF63, + 0xA4: 0xFF64, + 0xA5: 0xFF65, + 0xA6: 0xFF66, + 0xA7: 0xFF67, + 0xA8: 0xFF68, + 0xA9: 0xFF69, + 0xAA: 0xFF6A, + 0xAB: 0xFF6B, + 0xAC: 0xFF6C, + 0xAD: 0xFF6D, + 0xAE: 0xFF6E, + 0xAF: 0xFF6F, + 0xB0: 0xFF70, + 0xB1: 0xFF71, + 0xB2: 0xFF72, + 0xB3: 0xFF73, + 0xB4: 0xFF74, + 0xB5: 0xFF75, + 0xB6: 0xFF76, + 0xB7: 0xFF77, + 0xB8: 0xFF78, + 0xB9: 0xFF79, + 0xBA: 0xFF7A, + 0xBB: 0xFF7B, + 0xBC: 0xFF7C, + 0xBD: 0xFF7D, + 0xBE: 0xFF7E, + 0xBF: 0xFF7F, + 0xC0: 0xFF80, + 0xC1: 0xFF81, + 0xC2: 0xFF82, + 0xC3: 0xFF83, + 0xC4: 0xFF84, + 0xC5: 0xFF85, + 0xC6: 0xFF86, + 0xC7: 0xFF87, + 0xC8: 0xFF88, + 0xC9: 0xFF89, + 0xCA: 0xFF8A, + 0xCB: 0xFF8B, + 0xCC: 0xFF8C, + 0xCD: 0xFF8D, + 0xCE: 0xFF8E, + 0xCF: 0xFF8F, + 0xD0: 0xFF90, + 0xD1: 0xFF91, + 0xD2: 0xFF92, + 0xD3: 0xFF93, + 0xD4: 0xFF94, + 0xD5: 0xFF95, + 0xD6: 0xFF96, + 0xD7: 0xFF97, + 0xD8: 0xFF98, + 0xD9: 0xFF99, + 0xDA: 0xFF9A, + 0xDB: 0xFF9B, + 0xDC: 0xFF9C, + 0xDD: 0xFF9D, + 0xDE: 0xFF9E, + 0xDF: 0xFF9F, + 0xE040: 0x6F3E, + 0xE041: 0x6F13, + 0xE042: 0x6EF7, + 0xE043: 0x6F86, + 0xE044: 0x6F7A, + 0xE045: 0x6F78, + 0xE046: 0x6F81, + 0xE047: 0x6F80, + 0xE048: 0x6F6F, + 0xE049: 0x6F5B, + 0xE04A: 0x6FF3, + 0xE04B: 0x6F6D, + 0xE04C: 0x6F82, + 0xE04D: 0x6F7C, + 0xE04E: 0x6F58, + 0xE04F: 0x6F8E, + 0xE050: 0x6F91, + 0xE051: 0x6FC2, + 0xE052: 0x6F66, + 0xE053: 0x6FB3, + 0xE054: 0x6FA3, + 0xE055: 0x6FA1, + 0xE056: 0x6FA4, + 0xE057: 0x6FB9, + 0xE058: 0x6FC6, + 0xE059: 0x6FAA, + 0xE05A: 0x6FDF, + 0xE05B: 0x6FD5, + 0xE05C: 0x6FEC, + 0xE05D: 0x6FD4, + 0xE05E: 0x6FD8, + 0xE05F: 0x6FF1, + 0xE060: 0x6FEE, + 0xE061: 0x6FDB, + 0xE062: 0x7009, + 0xE063: 0x700B, + 0xE064: 0x6FFA, + 0xE065: 0x7011, + 0xE066: 0x7001, + 0xE067: 0x700F, + 0xE068: 0x6FFE, + 0xE069: 0x701B, + 0xE06A: 0x701A, + 0xE06B: 0x6F74, + 0xE06C: 0x701D, + 0xE06D: 0x7018, + 0xE06E: 0x701F, + 0xE06F: 0x7030, + 0xE070: 0x703E, + 0xE071: 0x7032, + 0xE072: 0x7051, + 0xE073: 0x7063, + 0xE074: 0x7099, + 0xE075: 0x7092, + 0xE076: 0x70AF, + 0xE077: 0x70F1, + 0xE078: 0x70AC, + 0xE079: 0x70B8, + 0xE07A: 0x70B3, + 0xE07B: 0x70AE, + 0xE07C: 0x70DF, + 0xE07D: 0x70CB, + 0xE07E: 0x70DD, + 0xE080: 0x70D9, + 0xE081: 0x7109, + 0xE082: 0x70FD, + 0xE083: 0x711C, + 0xE084: 0x7119, + 0xE085: 0x7165, + 0xE086: 0x7155, + 0xE087: 0x7188, + 0xE088: 0x7166, + 0xE089: 0x7162, + 0xE08A: 0x714C, + 0xE08B: 0x7156, + 0xE08C: 0x716C, + 0xE08D: 0x718F, + 0xE08E: 0x71FB, + 0xE08F: 0x7184, + 0xE090: 0x7195, + 0xE091: 0x71A8, + 0xE092: 0x71AC, + 0xE093: 0x71D7, + 0xE094: 0x71B9, + 0xE095: 0x71BE, + 0xE096: 0x71D2, + 0xE097: 0x71C9, + 0xE098: 0x71D4, + 0xE099: 0x71CE, + 0xE09A: 0x71E0, + 0xE09B: 0x71EC, + 0xE09C: 0x71E7, + 0xE09D: 0x71F5, + 0xE09E: 0x71FC, + 0xE09F: 0x71F9, + 0xE0A0: 0x71FF, + 0xE0A1: 0x720D, + 0xE0A2: 0x7210, + 0xE0A3: 0x721B, + 0xE0A4: 0x7228, + 0xE0A5: 0x722D, + 0xE0A6: 0x722C, + 0xE0A7: 0x7230, + 0xE0A8: 0x7232, + 0xE0A9: 0x723B, + 0xE0AA: 0x723C, + 0xE0AB: 0x723F, + 0xE0AC: 0x7240, + 0xE0AD: 0x7246, + 0xE0AE: 0x724B, + 0xE0AF: 0x7258, + 0xE0B0: 0x7274, + 0xE0B1: 0x727E, + 0xE0B2: 0x7282, + 0xE0B3: 0x7281, + 0xE0B4: 0x7287, + 0xE0B5: 0x7292, + 0xE0B6: 0x7296, + 0xE0B7: 0x72A2, + 0xE0B8: 0x72A7, + 0xE0B9: 0x72B9, + 0xE0BA: 0x72B2, + 0xE0BB: 0x72C3, + 0xE0BC: 0x72C6, + 0xE0BD: 0x72C4, + 0xE0BE: 0x72CE, + 0xE0BF: 0x72D2, + 0xE0C0: 0x72E2, + 0xE0C1: 0x72E0, + 0xE0C2: 0x72E1, + 0xE0C3: 0x72F9, + 0xE0C4: 0x72F7, + 0xE0C5: 0x500F, + 0xE0C6: 0x7317, + 0xE0C7: 0x730A, + 0xE0C8: 0x731C, + 0xE0C9: 0x7316, + 0xE0CA: 0x731D, + 0xE0CB: 0x7334, + 0xE0CC: 0x732F, + 0xE0CD: 0x7329, + 0xE0CE: 0x7325, + 0xE0CF: 0x733E, + 0xE0D0: 0x734E, + 0xE0D1: 0x734F, + 0xE0D2: 0x9ED8, + 0xE0D3: 0x7357, + 0xE0D4: 0x736A, + 0xE0D5: 0x7368, + 0xE0D6: 0x7370, + 0xE0D7: 0x7378, + 0xE0D8: 0x7375, + 0xE0D9: 0x737B, + 0xE0DA: 0x737A, + 0xE0DB: 0x73C8, + 0xE0DC: 0x73B3, + 0xE0DD: 0x73CE, + 0xE0DE: 0x73BB, + 0xE0DF: 0x73C0, + 0xE0E0: 0x73E5, + 0xE0E1: 0x73EE, + 0xE0E2: 0x73DE, + 0xE0E3: 0x74A2, + 0xE0E4: 0x7405, + 0xE0E5: 0x746F, + 0xE0E6: 0x7425, + 0xE0E7: 0x73F8, + 0xE0E8: 0x7432, + 0xE0E9: 0x743A, + 0xE0EA: 0x7455, + 0xE0EB: 0x743F, + 0xE0EC: 0x745F, + 0xE0ED: 0x7459, + 0xE0EE: 0x7441, + 0xE0EF: 0x745C, + 0xE0F0: 0x7469, + 0xE0F1: 0x7470, + 0xE0F2: 0x7463, + 0xE0F3: 0x746A, + 0xE0F4: 0x7476, + 0xE0F5: 0x747E, + 0xE0F6: 0x748B, + 0xE0F7: 0x749E, + 0xE0F8: 0x74A7, + 0xE0F9: 0x74CA, + 0xE0FA: 0x74CF, + 0xE0FB: 0x74D4, + 0xE0FC: 0x73F1, + 0xE140: 0x74E0, + 0xE141: 0x74E3, + 0xE142: 0x74E7, + 0xE143: 0x74E9, + 0xE144: 0x74EE, + 0xE145: 0x74F2, + 0xE146: 0x74F0, + 0xE147: 0x74F1, + 0xE148: 0x74F8, + 0xE149: 0x74F7, + 0xE14A: 0x7504, + 0xE14B: 0x7503, + 0xE14C: 0x7505, + 0xE14D: 0x750C, + 0xE14E: 0x750E, + 0xE14F: 0x750D, + 0xE150: 0x7515, + 0xE151: 0x7513, + 0xE152: 0x751E, + 0xE153: 0x7526, + 0xE154: 0x752C, + 0xE155: 0x753C, + 0xE156: 0x7544, + 0xE157: 0x754D, + 0xE158: 0x754A, + 0xE159: 0x7549, + 0xE15A: 0x755B, + 0xE15B: 0x7546, + 0xE15C: 0x755A, + 0xE15D: 0x7569, + 0xE15E: 0x7564, + 0xE15F: 0x7567, + 0xE160: 0x756B, + 0xE161: 0x756D, + 0xE162: 0x7578, + 0xE163: 0x7576, + 0xE164: 0x7586, + 0xE165: 0x7587, + 0xE166: 0x7574, + 0xE167: 0x758A, + 0xE168: 0x7589, + 0xE169: 0x7582, + 0xE16A: 0x7594, + 0xE16B: 0x759A, + 0xE16C: 0x759D, + 0xE16D: 0x75A5, + 0xE16E: 0x75A3, + 0xE16F: 0x75C2, + 0xE170: 0x75B3, + 0xE171: 0x75C3, + 0xE172: 0x75B5, + 0xE173: 0x75BD, + 0xE174: 0x75B8, + 0xE175: 0x75BC, + 0xE176: 0x75B1, + 0xE177: 0x75CD, + 0xE178: 0x75CA, + 0xE179: 0x75D2, + 0xE17A: 0x75D9, + 0xE17B: 0x75E3, + 0xE17C: 0x75DE, + 0xE17D: 0x75FE, + 0xE17E: 0x75FF, + 0xE180: 0x75FC, + 0xE181: 0x7601, + 0xE182: 0x75F0, + 0xE183: 0x75FA, + 0xE184: 0x75F2, + 0xE185: 0x75F3, + 0xE186: 0x760B, + 0xE187: 0x760D, + 0xE188: 0x7609, + 0xE189: 0x761F, + 0xE18A: 0x7627, + 0xE18B: 0x7620, + 0xE18C: 0x7621, + 0xE18D: 0x7622, + 0xE18E: 0x7624, + 0xE18F: 0x7634, + 0xE190: 0x7630, + 0xE191: 0x763B, + 0xE192: 0x7647, + 0xE193: 0x7648, + 0xE194: 0x7646, + 0xE195: 0x765C, + 0xE196: 0x7658, + 0xE197: 0x7661, + 0xE198: 0x7662, + 0xE199: 0x7668, + 0xE19A: 0x7669, + 0xE19B: 0x766A, + 0xE19C: 0x7667, + 0xE19D: 0x766C, + 0xE19E: 0x7670, + 0xE19F: 0x7672, + 0xE1A0: 0x7676, + 0xE1A1: 0x7678, + 0xE1A2: 0x767C, + 0xE1A3: 0x7680, + 0xE1A4: 0x7683, + 0xE1A5: 0x7688, + 0xE1A6: 0x768B, + 0xE1A7: 0x768E, + 0xE1A8: 0x7696, + 0xE1A9: 0x7693, + 0xE1AA: 0x7699, + 0xE1AB: 0x769A, + 0xE1AC: 0x76B0, + 0xE1AD: 0x76B4, + 0xE1AE: 0x76B8, + 0xE1AF: 0x76B9, + 0xE1B0: 0x76BA, + 0xE1B1: 0x76C2, + 0xE1B2: 0x76CD, + 0xE1B3: 0x76D6, + 0xE1B4: 0x76D2, + 0xE1B5: 0x76DE, + 0xE1B6: 0x76E1, + 0xE1B7: 0x76E5, + 0xE1B8: 0x76E7, + 0xE1B9: 0x76EA, + 0xE1BA: 0x862F, + 0xE1BB: 0x76FB, + 0xE1BC: 0x7708, + 0xE1BD: 0x7707, + 0xE1BE: 0x7704, + 0xE1BF: 0x7729, + 0xE1C0: 0x7724, + 0xE1C1: 0x771E, + 0xE1C2: 0x7725, + 0xE1C3: 0x7726, + 0xE1C4: 0x771B, + 0xE1C5: 0x7737, + 0xE1C6: 0x7738, + 0xE1C7: 0x7747, + 0xE1C8: 0x775A, + 0xE1C9: 0x7768, + 0xE1CA: 0x776B, + 0xE1CB: 0x775B, + 0xE1CC: 0x7765, + 0xE1CD: 0x777F, + 0xE1CE: 0x777E, + 0xE1CF: 0x7779, + 0xE1D0: 0x778E, + 0xE1D1: 0x778B, + 0xE1D2: 0x7791, + 0xE1D3: 0x77A0, + 0xE1D4: 0x779E, + 0xE1D5: 0x77B0, + 0xE1D6: 0x77B6, + 0xE1D7: 0x77B9, + 0xE1D8: 0x77BF, + 0xE1D9: 0x77BC, + 0xE1DA: 0x77BD, + 0xE1DB: 0x77BB, + 0xE1DC: 0x77C7, + 0xE1DD: 0x77CD, + 0xE1DE: 0x77D7, + 0xE1DF: 0x77DA, + 0xE1E0: 0x77DC, + 0xE1E1: 0x77E3, + 0xE1E2: 0x77EE, + 0xE1E3: 0x77FC, + 0xE1E4: 0x780C, + 0xE1E5: 0x7812, + 0xE1E6: 0x7926, + 0xE1E7: 0x7820, + 0xE1E8: 0x792A, + 0xE1E9: 0x7845, + 0xE1EA: 0x788E, + 0xE1EB: 0x7874, + 0xE1EC: 0x7886, + 0xE1ED: 0x787C, + 0xE1EE: 0x789A, + 0xE1EF: 0x788C, + 0xE1F0: 0x78A3, + 0xE1F1: 0x78B5, + 0xE1F2: 0x78AA, + 0xE1F3: 0x78AF, + 0xE1F4: 0x78D1, + 0xE1F5: 0x78C6, + 0xE1F6: 0x78CB, + 0xE1F7: 0x78D4, + 0xE1F8: 0x78BE, + 0xE1F9: 0x78BC, + 0xE1FA: 0x78C5, + 0xE1FB: 0x78CA, + 0xE1FC: 0x78EC, + 0xE240: 0x78E7, + 0xE241: 0x78DA, + 0xE242: 0x78FD, + 0xE243: 0x78F4, + 0xE244: 0x7907, + 0xE245: 0x7912, + 0xE246: 0x7911, + 0xE247: 0x7919, + 0xE248: 0x792C, + 0xE249: 0x792B, + 0xE24A: 0x7940, + 0xE24B: 0x7960, + 0xE24C: 0x7957, + 0xE24D: 0x795F, + 0xE24E: 0x795A, + 0xE24F: 0x7955, + 0xE250: 0x7953, + 0xE251: 0x797A, + 0xE252: 0x797F, + 0xE253: 0x798A, + 0xE254: 0x799D, + 0xE255: 0x79A7, + 0xE256: 0x9F4B, + 0xE257: 0x79AA, + 0xE258: 0x79AE, + 0xE259: 0x79B3, + 0xE25A: 0x79B9, + 0xE25B: 0x79BA, + 0xE25C: 0x79C9, + 0xE25D: 0x79D5, + 0xE25E: 0x79E7, + 0xE25F: 0x79EC, + 0xE260: 0x79E1, + 0xE261: 0x79E3, + 0xE262: 0x7A08, + 0xE263: 0x7A0D, + 0xE264: 0x7A18, + 0xE265: 0x7A19, + 0xE266: 0x7A20, + 0xE267: 0x7A1F, + 0xE268: 0x7980, + 0xE269: 0x7A31, + 0xE26A: 0x7A3B, + 0xE26B: 0x7A3E, + 0xE26C: 0x7A37, + 0xE26D: 0x7A43, + 0xE26E: 0x7A57, + 0xE26F: 0x7A49, + 0xE270: 0x7A61, + 0xE271: 0x7A62, + 0xE272: 0x7A69, + 0xE273: 0x9F9D, + 0xE274: 0x7A70, + 0xE275: 0x7A79, + 0xE276: 0x7A7D, + 0xE277: 0x7A88, + 0xE278: 0x7A97, + 0xE279: 0x7A95, + 0xE27A: 0x7A98, + 0xE27B: 0x7A96, + 0xE27C: 0x7AA9, + 0xE27D: 0x7AC8, + 0xE27E: 0x7AB0, + 0xE280: 0x7AB6, + 0xE281: 0x7AC5, + 0xE282: 0x7AC4, + 0xE283: 0x7ABF, + 0xE284: 0x9083, + 0xE285: 0x7AC7, + 0xE286: 0x7ACA, + 0xE287: 0x7ACD, + 0xE288: 0x7ACF, + 0xE289: 0x7AD5, + 0xE28A: 0x7AD3, + 0xE28B: 0x7AD9, + 0xE28C: 0x7ADA, + 0xE28D: 0x7ADD, + 0xE28E: 0x7AE1, + 0xE28F: 0x7AE2, + 0xE290: 0x7AE6, + 0xE291: 0x7AED, + 0xE292: 0x7AF0, + 0xE293: 0x7B02, + 0xE294: 0x7B0F, + 0xE295: 0x7B0A, + 0xE296: 0x7B06, + 0xE297: 0x7B33, + 0xE298: 0x7B18, + 0xE299: 0x7B19, + 0xE29A: 0x7B1E, + 0xE29B: 0x7B35, + 0xE29C: 0x7B28, + 0xE29D: 0x7B36, + 0xE29E: 0x7B50, + 0xE29F: 0x7B7A, + 0xE2A0: 0x7B04, + 0xE2A1: 0x7B4D, + 0xE2A2: 0x7B0B, + 0xE2A3: 0x7B4C, + 0xE2A4: 0x7B45, + 0xE2A5: 0x7B75, + 0xE2A6: 0x7B65, + 0xE2A7: 0x7B74, + 0xE2A8: 0x7B67, + 0xE2A9: 0x7B70, + 0xE2AA: 0x7B71, + 0xE2AB: 0x7B6C, + 0xE2AC: 0x7B6E, + 0xE2AD: 0x7B9D, + 0xE2AE: 0x7B98, + 0xE2AF: 0x7B9F, + 0xE2B0: 0x7B8D, + 0xE2B1: 0x7B9C, + 0xE2B2: 0x7B9A, + 0xE2B3: 0x7B8B, + 0xE2B4: 0x7B92, + 0xE2B5: 0x7B8F, + 0xE2B6: 0x7B5D, + 0xE2B7: 0x7B99, + 0xE2B8: 0x7BCB, + 0xE2B9: 0x7BC1, + 0xE2BA: 0x7BCC, + 0xE2BB: 0x7BCF, + 0xE2BC: 0x7BB4, + 0xE2BD: 0x7BC6, + 0xE2BE: 0x7BDD, + 0xE2BF: 0x7BE9, + 0xE2C0: 0x7C11, + 0xE2C1: 0x7C14, + 0xE2C2: 0x7BE6, + 0xE2C3: 0x7BE5, + 0xE2C4: 0x7C60, + 0xE2C5: 0x7C00, + 0xE2C6: 0x7C07, + 0xE2C7: 0x7C13, + 0xE2C8: 0x7BF3, + 0xE2C9: 0x7BF7, + 0xE2CA: 0x7C17, + 0xE2CB: 0x7C0D, + 0xE2CC: 0x7BF6, + 0xE2CD: 0x7C23, + 0xE2CE: 0x7C27, + 0xE2CF: 0x7C2A, + 0xE2D0: 0x7C1F, + 0xE2D1: 0x7C37, + 0xE2D2: 0x7C2B, + 0xE2D3: 0x7C3D, + 0xE2D4: 0x7C4C, + 0xE2D5: 0x7C43, + 0xE2D6: 0x7C54, + 0xE2D7: 0x7C4F, + 0xE2D8: 0x7C40, + 0xE2D9: 0x7C50, + 0xE2DA: 0x7C58, + 0xE2DB: 0x7C5F, + 0xE2DC: 0x7C64, + 0xE2DD: 0x7C56, + 0xE2DE: 0x7C65, + 0xE2DF: 0x7C6C, + 0xE2E0: 0x7C75, + 0xE2E1: 0x7C83, + 0xE2E2: 0x7C90, + 0xE2E3: 0x7CA4, + 0xE2E4: 0x7CAD, + 0xE2E5: 0x7CA2, + 0xE2E6: 0x7CAB, + 0xE2E7: 0x7CA1, + 0xE2E8: 0x7CA8, + 0xE2E9: 0x7CB3, + 0xE2EA: 0x7CB2, + 0xE2EB: 0x7CB1, + 0xE2EC: 0x7CAE, + 0xE2ED: 0x7CB9, + 0xE2EE: 0x7CBD, + 0xE2EF: 0x7CC0, + 0xE2F0: 0x7CC5, + 0xE2F1: 0x7CC2, + 0xE2F2: 0x7CD8, + 0xE2F3: 0x7CD2, + 0xE2F4: 0x7CDC, + 0xE2F5: 0x7CE2, + 0xE2F6: 0x9B3B, + 0xE2F7: 0x7CEF, + 0xE2F8: 0x7CF2, + 0xE2F9: 0x7CF4, + 0xE2FA: 0x7CF6, + 0xE2FB: 0x7CFA, + 0xE2FC: 0x7D06, + 0xE340: 0x7D02, + 0xE341: 0x7D1C, + 0xE342: 0x7D15, + 0xE343: 0x7D0A, + 0xE344: 0x7D45, + 0xE345: 0x7D4B, + 0xE346: 0x7D2E, + 0xE347: 0x7D32, + 0xE348: 0x7D3F, + 0xE349: 0x7D35, + 0xE34A: 0x7D46, + 0xE34B: 0x7D73, + 0xE34C: 0x7D56, + 0xE34D: 0x7D4E, + 0xE34E: 0x7D72, + 0xE34F: 0x7D68, + 0xE350: 0x7D6E, + 0xE351: 0x7D4F, + 0xE352: 0x7D63, + 0xE353: 0x7D93, + 0xE354: 0x7D89, + 0xE355: 0x7D5B, + 0xE356: 0x7D8F, + 0xE357: 0x7D7D, + 0xE358: 0x7D9B, + 0xE359: 0x7DBA, + 0xE35A: 0x7DAE, + 0xE35B: 0x7DA3, + 0xE35C: 0x7DB5, + 0xE35D: 0x7DC7, + 0xE35E: 0x7DBD, + 0xE35F: 0x7DAB, + 0xE360: 0x7E3D, + 0xE361: 0x7DA2, + 0xE362: 0x7DAF, + 0xE363: 0x7DDC, + 0xE364: 0x7DB8, + 0xE365: 0x7D9F, + 0xE366: 0x7DB0, + 0xE367: 0x7DD8, + 0xE368: 0x7DDD, + 0xE369: 0x7DE4, + 0xE36A: 0x7DDE, + 0xE36B: 0x7DFB, + 0xE36C: 0x7DF2, + 0xE36D: 0x7DE1, + 0xE36E: 0x7E05, + 0xE36F: 0x7E0A, + 0xE370: 0x7E23, + 0xE371: 0x7E21, + 0xE372: 0x7E12, + 0xE373: 0x7E31, + 0xE374: 0x7E1F, + 0xE375: 0x7E09, + 0xE376: 0x7E0B, + 0xE377: 0x7E22, + 0xE378: 0x7E46, + 0xE379: 0x7E66, + 0xE37A: 0x7E3B, + 0xE37B: 0x7E35, + 0xE37C: 0x7E39, + 0xE37D: 0x7E43, + 0xE37E: 0x7E37, + 0xE380: 0x7E32, + 0xE381: 0x7E3A, + 0xE382: 0x7E67, + 0xE383: 0x7E5D, + 0xE384: 0x7E56, + 0xE385: 0x7E5E, + 0xE386: 0x7E59, + 0xE387: 0x7E5A, + 0xE388: 0x7E79, + 0xE389: 0x7E6A, + 0xE38A: 0x7E69, + 0xE38B: 0x7E7C, + 0xE38C: 0x7E7B, + 0xE38D: 0x7E83, + 0xE38E: 0x7DD5, + 0xE38F: 0x7E7D, + 0xE390: 0x8FAE, + 0xE391: 0x7E7F, + 0xE392: 0x7E88, + 0xE393: 0x7E89, + 0xE394: 0x7E8C, + 0xE395: 0x7E92, + 0xE396: 0x7E90, + 0xE397: 0x7E93, + 0xE398: 0x7E94, + 0xE399: 0x7E96, + 0xE39A: 0x7E8E, + 0xE39B: 0x7E9B, + 0xE39C: 0x7E9C, + 0xE39D: 0x7F38, + 0xE39E: 0x7F3A, + 0xE39F: 0x7F45, + 0xE3A0: 0x7F4C, + 0xE3A1: 0x7F4D, + 0xE3A2: 0x7F4E, + 0xE3A3: 0x7F50, + 0xE3A4: 0x7F51, + 0xE3A5: 0x7F55, + 0xE3A6: 0x7F54, + 0xE3A7: 0x7F58, + 0xE3A8: 0x7F5F, + 0xE3A9: 0x7F60, + 0xE3AA: 0x7F68, + 0xE3AB: 0x7F69, + 0xE3AC: 0x7F67, + 0xE3AD: 0x7F78, + 0xE3AE: 0x7F82, + 0xE3AF: 0x7F86, + 0xE3B0: 0x7F83, + 0xE3B1: 0x7F88, + 0xE3B2: 0x7F87, + 0xE3B3: 0x7F8C, + 0xE3B4: 0x7F94, + 0xE3B5: 0x7F9E, + 0xE3B6: 0x7F9D, + 0xE3B7: 0x7F9A, + 0xE3B8: 0x7FA3, + 0xE3B9: 0x7FAF, + 0xE3BA: 0x7FB2, + 0xE3BB: 0x7FB9, + 0xE3BC: 0x7FAE, + 0xE3BD: 0x7FB6, + 0xE3BE: 0x7FB8, + 0xE3BF: 0x8B71, + 0xE3C0: 0x7FC5, + 0xE3C1: 0x7FC6, + 0xE3C2: 0x7FCA, + 0xE3C3: 0x7FD5, + 0xE3C4: 0x7FD4, + 0xE3C5: 0x7FE1, + 0xE3C6: 0x7FE6, + 0xE3C7: 0x7FE9, + 0xE3C8: 0x7FF3, + 0xE3C9: 0x7FF9, + 0xE3CA: 0x98DC, + 0xE3CB: 0x8006, + 0xE3CC: 0x8004, + 0xE3CD: 0x800B, + 0xE3CE: 0x8012, + 0xE3CF: 0x8018, + 0xE3D0: 0x8019, + 0xE3D1: 0x801C, + 0xE3D2: 0x8021, + 0xE3D3: 0x8028, + 0xE3D4: 0x803F, + 0xE3D5: 0x803B, + 0xE3D6: 0x804A, + 0xE3D7: 0x8046, + 0xE3D8: 0x8052, + 0xE3D9: 0x8058, + 0xE3DA: 0x805A, + 0xE3DB: 0x805F, + 0xE3DC: 0x8062, + 0xE3DD: 0x8068, + 0xE3DE: 0x8073, + 0xE3DF: 0x8072, + 0xE3E0: 0x8070, + 0xE3E1: 0x8076, + 0xE3E2: 0x8079, + 0xE3E3: 0x807D, + 0xE3E4: 0x807F, + 0xE3E5: 0x8084, + 0xE3E6: 0x8086, + 0xE3E7: 0x8085, + 0xE3E8: 0x809B, + 0xE3E9: 0x8093, + 0xE3EA: 0x809A, + 0xE3EB: 0x80AD, + 0xE3EC: 0x5190, + 0xE3ED: 0x80AC, + 0xE3EE: 0x80DB, + 0xE3EF: 0x80E5, + 0xE3F0: 0x80D9, + 0xE3F1: 0x80DD, + 0xE3F2: 0x80C4, + 0xE3F3: 0x80DA, + 0xE3F4: 0x80D6, + 0xE3F5: 0x8109, + 0xE3F6: 0x80EF, + 0xE3F7: 0x80F1, + 0xE3F8: 0x811B, + 0xE3F9: 0x8129, + 0xE3FA: 0x8123, + 0xE3FB: 0x812F, + 0xE3FC: 0x814B, + 0xE440: 0x968B, + 0xE441: 0x8146, + 0xE442: 0x813E, + 0xE443: 0x8153, + 0xE444: 0x8151, + 0xE445: 0x80FC, + 0xE446: 0x8171, + 0xE447: 0x816E, + 0xE448: 0x8165, + 0xE449: 0x8166, + 0xE44A: 0x8174, + 0xE44B: 0x8183, + 0xE44C: 0x8188, + 0xE44D: 0x818A, + 0xE44E: 0x8180, + 0xE44F: 0x8182, + 0xE450: 0x81A0, + 0xE451: 0x8195, + 0xE452: 0x81A4, + 0xE453: 0x81A3, + 0xE454: 0x815F, + 0xE455: 0x8193, + 0xE456: 0x81A9, + 0xE457: 0x81B0, + 0xE458: 0x81B5, + 0xE459: 0x81BE, + 0xE45A: 0x81B8, + 0xE45B: 0x81BD, + 0xE45C: 0x81C0, + 0xE45D: 0x81C2, + 0xE45E: 0x81BA, + 0xE45F: 0x81C9, + 0xE460: 0x81CD, + 0xE461: 0x81D1, + 0xE462: 0x81D9, + 0xE463: 0x81D8, + 0xE464: 0x81C8, + 0xE465: 0x81DA, + 0xE466: 0x81DF, + 0xE467: 0x81E0, + 0xE468: 0x81E7, + 0xE469: 0x81FA, + 0xE46A: 0x81FB, + 0xE46B: 0x81FE, + 0xE46C: 0x8201, + 0xE46D: 0x8202, + 0xE46E: 0x8205, + 0xE46F: 0x8207, + 0xE470: 0x820A, + 0xE471: 0x820D, + 0xE472: 0x8210, + 0xE473: 0x8216, + 0xE474: 0x8229, + 0xE475: 0x822B, + 0xE476: 0x8238, + 0xE477: 0x8233, + 0xE478: 0x8240, + 0xE479: 0x8259, + 0xE47A: 0x8258, + 0xE47B: 0x825D, + 0xE47C: 0x825A, + 0xE47D: 0x825F, + 0xE47E: 0x8264, + 0xE480: 0x8262, + 0xE481: 0x8268, + 0xE482: 0x826A, + 0xE483: 0x826B, + 0xE484: 0x822E, + 0xE485: 0x8271, + 0xE486: 0x8277, + 0xE487: 0x8278, + 0xE488: 0x827E, + 0xE489: 0x828D, + 0xE48A: 0x8292, + 0xE48B: 0x82AB, + 0xE48C: 0x829F, + 0xE48D: 0x82BB, + 0xE48E: 0x82AC, + 0xE48F: 0x82E1, + 0xE490: 0x82E3, + 0xE491: 0x82DF, + 0xE492: 0x82D2, + 0xE493: 0x82F4, + 0xE494: 0x82F3, + 0xE495: 0x82FA, + 0xE496: 0x8393, + 0xE497: 0x8303, + 0xE498: 0x82FB, + 0xE499: 0x82F9, + 0xE49A: 0x82DE, + 0xE49B: 0x8306, + 0xE49C: 0x82DC, + 0xE49D: 0x8309, + 0xE49E: 0x82D9, + 0xE49F: 0x8335, + 0xE4A0: 0x8334, + 0xE4A1: 0x8316, + 0xE4A2: 0x8332, + 0xE4A3: 0x8331, + 0xE4A4: 0x8340, + 0xE4A5: 0x8339, + 0xE4A6: 0x8350, + 0xE4A7: 0x8345, + 0xE4A8: 0x832F, + 0xE4A9: 0x832B, + 0xE4AA: 0x8317, + 0xE4AB: 0x8318, + 0xE4AC: 0x8385, + 0xE4AD: 0x839A, + 0xE4AE: 0x83AA, + 0xE4AF: 0x839F, + 0xE4B0: 0x83A2, + 0xE4B1: 0x8396, + 0xE4B2: 0x8323, + 0xE4B3: 0x838E, + 0xE4B4: 0x8387, + 0xE4B5: 0x838A, + 0xE4B6: 0x837C, + 0xE4B7: 0x83B5, + 0xE4B8: 0x8373, + 0xE4B9: 0x8375, + 0xE4BA: 0x83A0, + 0xE4BB: 0x8389, + 0xE4BC: 0x83A8, + 0xE4BD: 0x83F4, + 0xE4BE: 0x8413, + 0xE4BF: 0x83EB, + 0xE4C0: 0x83CE, + 0xE4C1: 0x83FD, + 0xE4C2: 0x8403, + 0xE4C3: 0x83D8, + 0xE4C4: 0x840B, + 0xE4C5: 0x83C1, + 0xE4C6: 0x83F7, + 0xE4C7: 0x8407, + 0xE4C8: 0x83E0, + 0xE4C9: 0x83F2, + 0xE4CA: 0x840D, + 0xE4CB: 0x8422, + 0xE4CC: 0x8420, + 0xE4CD: 0x83BD, + 0xE4CE: 0x8438, + 0xE4CF: 0x8506, + 0xE4D0: 0x83FB, + 0xE4D1: 0x846D, + 0xE4D2: 0x842A, + 0xE4D3: 0x843C, + 0xE4D4: 0x855A, + 0xE4D5: 0x8484, + 0xE4D6: 0x8477, + 0xE4D7: 0x846B, + 0xE4D8: 0x84AD, + 0xE4D9: 0x846E, + 0xE4DA: 0x8482, + 0xE4DB: 0x8469, + 0xE4DC: 0x8446, + 0xE4DD: 0x842C, + 0xE4DE: 0x846F, + 0xE4DF: 0x8479, + 0xE4E0: 0x8435, + 0xE4E1: 0x84CA, + 0xE4E2: 0x8462, + 0xE4E3: 0x84B9, + 0xE4E4: 0x84BF, + 0xE4E5: 0x849F, + 0xE4E6: 0x84D9, + 0xE4E7: 0x84CD, + 0xE4E8: 0x84BB, + 0xE4E9: 0x84DA, + 0xE4EA: 0x84D0, + 0xE4EB: 0x84C1, + 0xE4EC: 0x84C6, + 0xE4ED: 0x84D6, + 0xE4EE: 0x84A1, + 0xE4EF: 0x8521, + 0xE4F0: 0x84FF, + 0xE4F1: 0x84F4, + 0xE4F2: 0x8517, + 0xE4F3: 0x8518, + 0xE4F4: 0x852C, + 0xE4F5: 0x851F, + 0xE4F6: 0x8515, + 0xE4F7: 0x8514, + 0xE4F8: 0x84FC, + 0xE4F9: 0x8540, + 0xE4FA: 0x8563, + 0xE4FB: 0x8558, + 0xE4FC: 0x8548, + 0xE540: 0x8541, + 0xE541: 0x8602, + 0xE542: 0x854B, + 0xE543: 0x8555, + 0xE544: 0x8580, + 0xE545: 0x85A4, + 0xE546: 0x8588, + 0xE547: 0x8591, + 0xE548: 0x858A, + 0xE549: 0x85A8, + 0xE54A: 0x856D, + 0xE54B: 0x8594, + 0xE54C: 0x859B, + 0xE54D: 0x85EA, + 0xE54E: 0x8587, + 0xE54F: 0x859C, + 0xE550: 0x8577, + 0xE551: 0x857E, + 0xE552: 0x8590, + 0xE553: 0x85C9, + 0xE554: 0x85BA, + 0xE555: 0x85CF, + 0xE556: 0x85B9, + 0xE557: 0x85D0, + 0xE558: 0x85D5, + 0xE559: 0x85DD, + 0xE55A: 0x85E5, + 0xE55B: 0x85DC, + 0xE55C: 0x85F9, + 0xE55D: 0x860A, + 0xE55E: 0x8613, + 0xE55F: 0x860B, + 0xE560: 0x85FE, + 0xE561: 0x85FA, + 0xE562: 0x8606, + 0xE563: 0x8622, + 0xE564: 0x861A, + 0xE565: 0x8630, + 0xE566: 0x863F, + 0xE567: 0x864D, + 0xE568: 0x4E55, + 0xE569: 0x8654, + 0xE56A: 0x865F, + 0xE56B: 0x8667, + 0xE56C: 0x8671, + 0xE56D: 0x8693, + 0xE56E: 0x86A3, + 0xE56F: 0x86A9, + 0xE570: 0x86AA, + 0xE571: 0x868B, + 0xE572: 0x868C, + 0xE573: 0x86B6, + 0xE574: 0x86AF, + 0xE575: 0x86C4, + 0xE576: 0x86C6, + 0xE577: 0x86B0, + 0xE578: 0x86C9, + 0xE579: 0x8823, + 0xE57A: 0x86AB, + 0xE57B: 0x86D4, + 0xE57C: 0x86DE, + 0xE57D: 0x86E9, + 0xE57E: 0x86EC, + 0xE580: 0x86DF, + 0xE581: 0x86DB, + 0xE582: 0x86EF, + 0xE583: 0x8712, + 0xE584: 0x8706, + 0xE585: 0x8708, + 0xE586: 0x8700, + 0xE587: 0x8703, + 0xE588: 0x86FB, + 0xE589: 0x8711, + 0xE58A: 0x8709, + 0xE58B: 0x870D, + 0xE58C: 0x86F9, + 0xE58D: 0x870A, + 0xE58E: 0x8734, + 0xE58F: 0x873F, + 0xE590: 0x8737, + 0xE591: 0x873B, + 0xE592: 0x8725, + 0xE593: 0x8729, + 0xE594: 0x871A, + 0xE595: 0x8760, + 0xE596: 0x875F, + 0xE597: 0x8778, + 0xE598: 0x874C, + 0xE599: 0x874E, + 0xE59A: 0x8774, + 0xE59B: 0x8757, + 0xE59C: 0x8768, + 0xE59D: 0x876E, + 0xE59E: 0x8759, + 0xE59F: 0x8753, + 0xE5A0: 0x8763, + 0xE5A1: 0x876A, + 0xE5A2: 0x8805, + 0xE5A3: 0x87A2, + 0xE5A4: 0x879F, + 0xE5A5: 0x8782, + 0xE5A6: 0x87AF, + 0xE5A7: 0x87CB, + 0xE5A8: 0x87BD, + 0xE5A9: 0x87C0, + 0xE5AA: 0x87D0, + 0xE5AB: 0x96D6, + 0xE5AC: 0x87AB, + 0xE5AD: 0x87C4, + 0xE5AE: 0x87B3, + 0xE5AF: 0x87C7, + 0xE5B0: 0x87C6, + 0xE5B1: 0x87BB, + 0xE5B2: 0x87EF, + 0xE5B3: 0x87F2, + 0xE5B4: 0x87E0, + 0xE5B5: 0x880F, + 0xE5B6: 0x880D, + 0xE5B7: 0x87FE, + 0xE5B8: 0x87F6, + 0xE5B9: 0x87F7, + 0xE5BA: 0x880E, + 0xE5BB: 0x87D2, + 0xE5BC: 0x8811, + 0xE5BD: 0x8816, + 0xE5BE: 0x8815, + 0xE5BF: 0x8822, + 0xE5C0: 0x8821, + 0xE5C1: 0x8831, + 0xE5C2: 0x8836, + 0xE5C3: 0x8839, + 0xE5C4: 0x8827, + 0xE5C5: 0x883B, + 0xE5C6: 0x8844, + 0xE5C7: 0x8842, + 0xE5C8: 0x8852, + 0xE5C9: 0x8859, + 0xE5CA: 0x885E, + 0xE5CB: 0x8862, + 0xE5CC: 0x886B, + 0xE5CD: 0x8881, + 0xE5CE: 0x887E, + 0xE5CF: 0x889E, + 0xE5D0: 0x8875, + 0xE5D1: 0x887D, + 0xE5D2: 0x88B5, + 0xE5D3: 0x8872, + 0xE5D4: 0x8882, + 0xE5D5: 0x8897, + 0xE5D6: 0x8892, + 0xE5D7: 0x88AE, + 0xE5D8: 0x8899, + 0xE5D9: 0x88A2, + 0xE5DA: 0x888D, + 0xE5DB: 0x88A4, + 0xE5DC: 0x88B0, + 0xE5DD: 0x88BF, + 0xE5DE: 0x88B1, + 0xE5DF: 0x88C3, + 0xE5E0: 0x88C4, + 0xE5E1: 0x88D4, + 0xE5E2: 0x88D8, + 0xE5E3: 0x88D9, + 0xE5E4: 0x88DD, + 0xE5E5: 0x88F9, + 0xE5E6: 0x8902, + 0xE5E7: 0x88FC, + 0xE5E8: 0x88F4, + 0xE5E9: 0x88E8, + 0xE5EA: 0x88F2, + 0xE5EB: 0x8904, + 0xE5EC: 0x890C, + 0xE5ED: 0x890A, + 0xE5EE: 0x8913, + 0xE5EF: 0x8943, + 0xE5F0: 0x891E, + 0xE5F1: 0x8925, + 0xE5F2: 0x892A, + 0xE5F3: 0x892B, + 0xE5F4: 0x8941, + 0xE5F5: 0x8944, + 0xE5F6: 0x893B, + 0xE5F7: 0x8936, + 0xE5F8: 0x8938, + 0xE5F9: 0x894C, + 0xE5FA: 0x891D, + 0xE5FB: 0x8960, + 0xE5FC: 0x895E, + 0xE640: 0x8966, + 0xE641: 0x8964, + 0xE642: 0x896D, + 0xE643: 0x896A, + 0xE644: 0x896F, + 0xE645: 0x8974, + 0xE646: 0x8977, + 0xE647: 0x897E, + 0xE648: 0x8983, + 0xE649: 0x8988, + 0xE64A: 0x898A, + 0xE64B: 0x8993, + 0xE64C: 0x8998, + 0xE64D: 0x89A1, + 0xE64E: 0x89A9, + 0xE64F: 0x89A6, + 0xE650: 0x89AC, + 0xE651: 0x89AF, + 0xE652: 0x89B2, + 0xE653: 0x89BA, + 0xE654: 0x89BD, + 0xE655: 0x89BF, + 0xE656: 0x89C0, + 0xE657: 0x89DA, + 0xE658: 0x89DC, + 0xE659: 0x89DD, + 0xE65A: 0x89E7, + 0xE65B: 0x89F4, + 0xE65C: 0x89F8, + 0xE65D: 0x8A03, + 0xE65E: 0x8A16, + 0xE65F: 0x8A10, + 0xE660: 0x8A0C, + 0xE661: 0x8A1B, + 0xE662: 0x8A1D, + 0xE663: 0x8A25, + 0xE664: 0x8A36, + 0xE665: 0x8A41, + 0xE666: 0x8A5B, + 0xE667: 0x8A52, + 0xE668: 0x8A46, + 0xE669: 0x8A48, + 0xE66A: 0x8A7C, + 0xE66B: 0x8A6D, + 0xE66C: 0x8A6C, + 0xE66D: 0x8A62, + 0xE66E: 0x8A85, + 0xE66F: 0x8A82, + 0xE670: 0x8A84, + 0xE671: 0x8AA8, + 0xE672: 0x8AA1, + 0xE673: 0x8A91, + 0xE674: 0x8AA5, + 0xE675: 0x8AA6, + 0xE676: 0x8A9A, + 0xE677: 0x8AA3, + 0xE678: 0x8AC4, + 0xE679: 0x8ACD, + 0xE67A: 0x8AC2, + 0xE67B: 0x8ADA, + 0xE67C: 0x8AEB, + 0xE67D: 0x8AF3, + 0xE67E: 0x8AE7, + 0xE680: 0x8AE4, + 0xE681: 0x8AF1, + 0xE682: 0x8B14, + 0xE683: 0x8AE0, + 0xE684: 0x8AE2, + 0xE685: 0x8AF7, + 0xE686: 0x8ADE, + 0xE687: 0x8ADB, + 0xE688: 0x8B0C, + 0xE689: 0x8B07, + 0xE68A: 0x8B1A, + 0xE68B: 0x8AE1, + 0xE68C: 0x8B16, + 0xE68D: 0x8B10, + 0xE68E: 0x8B17, + 0xE68F: 0x8B20, + 0xE690: 0x8B33, + 0xE691: 0x97AB, + 0xE692: 0x8B26, + 0xE693: 0x8B2B, + 0xE694: 0x8B3E, + 0xE695: 0x8B28, + 0xE696: 0x8B41, + 0xE697: 0x8B4C, + 0xE698: 0x8B4F, + 0xE699: 0x8B4E, + 0xE69A: 0x8B49, + 0xE69B: 0x8B56, + 0xE69C: 0x8B5B, + 0xE69D: 0x8B5A, + 0xE69E: 0x8B6B, + 0xE69F: 0x8B5F, + 0xE6A0: 0x8B6C, + 0xE6A1: 0x8B6F, + 0xE6A2: 0x8B74, + 0xE6A3: 0x8B7D, + 0xE6A4: 0x8B80, + 0xE6A5: 0x8B8C, + 0xE6A6: 0x8B8E, + 0xE6A7: 0x8B92, + 0xE6A8: 0x8B93, + 0xE6A9: 0x8B96, + 0xE6AA: 0x8B99, + 0xE6AB: 0x8B9A, + 0xE6AC: 0x8C3A, + 0xE6AD: 0x8C41, + 0xE6AE: 0x8C3F, + 0xE6AF: 0x8C48, + 0xE6B0: 0x8C4C, + 0xE6B1: 0x8C4E, + 0xE6B2: 0x8C50, + 0xE6B3: 0x8C55, + 0xE6B4: 0x8C62, + 0xE6B5: 0x8C6C, + 0xE6B6: 0x8C78, + 0xE6B7: 0x8C7A, + 0xE6B8: 0x8C82, + 0xE6B9: 0x8C89, + 0xE6BA: 0x8C85, + 0xE6BB: 0x8C8A, + 0xE6BC: 0x8C8D, + 0xE6BD: 0x8C8E, + 0xE6BE: 0x8C94, + 0xE6BF: 0x8C7C, + 0xE6C0: 0x8C98, + 0xE6C1: 0x621D, + 0xE6C2: 0x8CAD, + 0xE6C3: 0x8CAA, + 0xE6C4: 0x8CBD, + 0xE6C5: 0x8CB2, + 0xE6C6: 0x8CB3, + 0xE6C7: 0x8CAE, + 0xE6C8: 0x8CB6, + 0xE6C9: 0x8CC8, + 0xE6CA: 0x8CC1, + 0xE6CB: 0x8CE4, + 0xE6CC: 0x8CE3, + 0xE6CD: 0x8CDA, + 0xE6CE: 0x8CFD, + 0xE6CF: 0x8CFA, + 0xE6D0: 0x8CFB, + 0xE6D1: 0x8D04, + 0xE6D2: 0x8D05, + 0xE6D3: 0x8D0A, + 0xE6D4: 0x8D07, + 0xE6D5: 0x8D0F, + 0xE6D6: 0x8D0D, + 0xE6D7: 0x8D10, + 0xE6D8: 0x9F4E, + 0xE6D9: 0x8D13, + 0xE6DA: 0x8CCD, + 0xE6DB: 0x8D14, + 0xE6DC: 0x8D16, + 0xE6DD: 0x8D67, + 0xE6DE: 0x8D6D, + 0xE6DF: 0x8D71, + 0xE6E0: 0x8D73, + 0xE6E1: 0x8D81, + 0xE6E2: 0x8D99, + 0xE6E3: 0x8DC2, + 0xE6E4: 0x8DBE, + 0xE6E5: 0x8DBA, + 0xE6E6: 0x8DCF, + 0xE6E7: 0x8DDA, + 0xE6E8: 0x8DD6, + 0xE6E9: 0x8DCC, + 0xE6EA: 0x8DDB, + 0xE6EB: 0x8DCB, + 0xE6EC: 0x8DEA, + 0xE6ED: 0x8DEB, + 0xE6EE: 0x8DDF, + 0xE6EF: 0x8DE3, + 0xE6F0: 0x8DFC, + 0xE6F1: 0x8E08, + 0xE6F2: 0x8E09, + 0xE6F3: 0x8DFF, + 0xE6F4: 0x8E1D, + 0xE6F5: 0x8E1E, + 0xE6F6: 0x8E10, + 0xE6F7: 0x8E1F, + 0xE6F8: 0x8E42, + 0xE6F9: 0x8E35, + 0xE6FA: 0x8E30, + 0xE6FB: 0x8E34, + 0xE6FC: 0x8E4A, + 0xE740: 0x8E47, + 0xE741: 0x8E49, + 0xE742: 0x8E4C, + 0xE743: 0x8E50, + 0xE744: 0x8E48, + 0xE745: 0x8E59, + 0xE746: 0x8E64, + 0xE747: 0x8E60, + 0xE748: 0x8E2A, + 0xE749: 0x8E63, + 0xE74A: 0x8E55, + 0xE74B: 0x8E76, + 0xE74C: 0x8E72, + 0xE74D: 0x8E7C, + 0xE74E: 0x8E81, + 0xE74F: 0x8E87, + 0xE750: 0x8E85, + 0xE751: 0x8E84, + 0xE752: 0x8E8B, + 0xE753: 0x8E8A, + 0xE754: 0x8E93, + 0xE755: 0x8E91, + 0xE756: 0x8E94, + 0xE757: 0x8E99, + 0xE758: 0x8EAA, + 0xE759: 0x8EA1, + 0xE75A: 0x8EAC, + 0xE75B: 0x8EB0, + 0xE75C: 0x8EC6, + 0xE75D: 0x8EB1, + 0xE75E: 0x8EBE, + 0xE75F: 0x8EC5, + 0xE760: 0x8EC8, + 0xE761: 0x8ECB, + 0xE762: 0x8EDB, + 0xE763: 0x8EE3, + 0xE764: 0x8EFC, + 0xE765: 0x8EFB, + 0xE766: 0x8EEB, + 0xE767: 0x8EFE, + 0xE768: 0x8F0A, + 0xE769: 0x8F05, + 0xE76A: 0x8F15, + 0xE76B: 0x8F12, + 0xE76C: 0x8F19, + 0xE76D: 0x8F13, + 0xE76E: 0x8F1C, + 0xE76F: 0x8F1F, + 0xE770: 0x8F1B, + 0xE771: 0x8F0C, + 0xE772: 0x8F26, + 0xE773: 0x8F33, + 0xE774: 0x8F3B, + 0xE775: 0x8F39, + 0xE776: 0x8F45, + 0xE777: 0x8F42, + 0xE778: 0x8F3E, + 0xE779: 0x8F4C, + 0xE77A: 0x8F49, + 0xE77B: 0x8F46, + 0xE77C: 0x8F4E, + 0xE77D: 0x8F57, + 0xE77E: 0x8F5C, + 0xE780: 0x8F62, + 0xE781: 0x8F63, + 0xE782: 0x8F64, + 0xE783: 0x8F9C, + 0xE784: 0x8F9F, + 0xE785: 0x8FA3, + 0xE786: 0x8FAD, + 0xE787: 0x8FAF, + 0xE788: 0x8FB7, + 0xE789: 0x8FDA, + 0xE78A: 0x8FE5, + 0xE78B: 0x8FE2, + 0xE78C: 0x8FEA, + 0xE78D: 0x8FEF, + 0xE78E: 0x9087, + 0xE78F: 0x8FF4, + 0xE790: 0x9005, + 0xE791: 0x8FF9, + 0xE792: 0x8FFA, + 0xE793: 0x9011, + 0xE794: 0x9015, + 0xE795: 0x9021, + 0xE796: 0x900D, + 0xE797: 0x901E, + 0xE798: 0x9016, + 0xE799: 0x900B, + 0xE79A: 0x9027, + 0xE79B: 0x9036, + 0xE79C: 0x9035, + 0xE79D: 0x9039, + 0xE79E: 0x8FF8, + 0xE79F: 0x904F, + 0xE7A0: 0x9050, + 0xE7A1: 0x9051, + 0xE7A2: 0x9052, + 0xE7A3: 0x900E, + 0xE7A4: 0x9049, + 0xE7A5: 0x903E, + 0xE7A6: 0x9056, + 0xE7A7: 0x9058, + 0xE7A8: 0x905E, + 0xE7A9: 0x9068, + 0xE7AA: 0x906F, + 0xE7AB: 0x9076, + 0xE7AC: 0x96A8, + 0xE7AD: 0x9072, + 0xE7AE: 0x9082, + 0xE7AF: 0x907D, + 0xE7B0: 0x9081, + 0xE7B1: 0x9080, + 0xE7B2: 0x908A, + 0xE7B3: 0x9089, + 0xE7B4: 0x908F, + 0xE7B5: 0x90A8, + 0xE7B6: 0x90AF, + 0xE7B7: 0x90B1, + 0xE7B8: 0x90B5, + 0xE7B9: 0x90E2, + 0xE7BA: 0x90E4, + 0xE7BB: 0x6248, + 0xE7BC: 0x90DB, + 0xE7BD: 0x9102, + 0xE7BE: 0x9112, + 0xE7BF: 0x9119, + 0xE7C0: 0x9132, + 0xE7C1: 0x9130, + 0xE7C2: 0x914A, + 0xE7C3: 0x9156, + 0xE7C4: 0x9158, + 0xE7C5: 0x9163, + 0xE7C6: 0x9165, + 0xE7C7: 0x9169, + 0xE7C8: 0x9173, + 0xE7C9: 0x9172, + 0xE7CA: 0x918B, + 0xE7CB: 0x9189, + 0xE7CC: 0x9182, + 0xE7CD: 0x91A2, + 0xE7CE: 0x91AB, + 0xE7CF: 0x91AF, + 0xE7D0: 0x91AA, + 0xE7D1: 0x91B5, + 0xE7D2: 0x91B4, + 0xE7D3: 0x91BA, + 0xE7D4: 0x91C0, + 0xE7D5: 0x91C1, + 0xE7D6: 0x91C9, + 0xE7D7: 0x91CB, + 0xE7D8: 0x91D0, + 0xE7D9: 0x91D6, + 0xE7DA: 0x91DF, + 0xE7DB: 0x91E1, + 0xE7DC: 0x91DB, + 0xE7DD: 0x91FC, + 0xE7DE: 0x91F5, + 0xE7DF: 0x91F6, + 0xE7E0: 0x921E, + 0xE7E1: 0x91FF, + 0xE7E2: 0x9214, + 0xE7E3: 0x922C, + 0xE7E4: 0x9215, + 0xE7E5: 0x9211, + 0xE7E6: 0x925E, + 0xE7E7: 0x9257, + 0xE7E8: 0x9245, + 0xE7E9: 0x9249, + 0xE7EA: 0x9264, + 0xE7EB: 0x9248, + 0xE7EC: 0x9295, + 0xE7ED: 0x923F, + 0xE7EE: 0x924B, + 0xE7EF: 0x9250, + 0xE7F0: 0x929C, + 0xE7F1: 0x9296, + 0xE7F2: 0x9293, + 0xE7F3: 0x929B, + 0xE7F4: 0x925A, + 0xE7F5: 0x92CF, + 0xE7F6: 0x92B9, + 0xE7F7: 0x92B7, + 0xE7F8: 0x92E9, + 0xE7F9: 0x930F, + 0xE7FA: 0x92FA, + 0xE7FB: 0x9344, + 0xE7FC: 0x932E, + 0xE840: 0x9319, + 0xE841: 0x9322, + 0xE842: 0x931A, + 0xE843: 0x9323, + 0xE844: 0x933A, + 0xE845: 0x9335, + 0xE846: 0x933B, + 0xE847: 0x935C, + 0xE848: 0x9360, + 0xE849: 0x937C, + 0xE84A: 0x936E, + 0xE84B: 0x9356, + 0xE84C: 0x93B0, + 0xE84D: 0x93AC, + 0xE84E: 0x93AD, + 0xE84F: 0x9394, + 0xE850: 0x93B9, + 0xE851: 0x93D6, + 0xE852: 0x93D7, + 0xE853: 0x93E8, + 0xE854: 0x93E5, + 0xE855: 0x93D8, + 0xE856: 0x93C3, + 0xE857: 0x93DD, + 0xE858: 0x93D0, + 0xE859: 0x93C8, + 0xE85A: 0x93E4, + 0xE85B: 0x941A, + 0xE85C: 0x9414, + 0xE85D: 0x9413, + 0xE85E: 0x9403, + 0xE85F: 0x9407, + 0xE860: 0x9410, + 0xE861: 0x9436, + 0xE862: 0x942B, + 0xE863: 0x9435, + 0xE864: 0x9421, + 0xE865: 0x943A, + 0xE866: 0x9441, + 0xE867: 0x9452, + 0xE868: 0x9444, + 0xE869: 0x945B, + 0xE86A: 0x9460, + 0xE86B: 0x9462, + 0xE86C: 0x945E, + 0xE86D: 0x946A, + 0xE86E: 0x9229, + 0xE86F: 0x9470, + 0xE870: 0x9475, + 0xE871: 0x9477, + 0xE872: 0x947D, + 0xE873: 0x945A, + 0xE874: 0x947C, + 0xE875: 0x947E, + 0xE876: 0x9481, + 0xE877: 0x947F, + 0xE878: 0x9582, + 0xE879: 0x9587, + 0xE87A: 0x958A, + 0xE87B: 0x9594, + 0xE87C: 0x9596, + 0xE87D: 0x9598, + 0xE87E: 0x9599, + 0xE880: 0x95A0, + 0xE881: 0x95A8, + 0xE882: 0x95A7, + 0xE883: 0x95AD, + 0xE884: 0x95BC, + 0xE885: 0x95BB, + 0xE886: 0x95B9, + 0xE887: 0x95BE, + 0xE888: 0x95CA, + 0xE889: 0x6FF6, + 0xE88A: 0x95C3, + 0xE88B: 0x95CD, + 0xE88C: 0x95CC, + 0xE88D: 0x95D5, + 0xE88E: 0x95D4, + 0xE88F: 0x95D6, + 0xE890: 0x95DC, + 0xE891: 0x95E1, + 0xE892: 0x95E5, + 0xE893: 0x95E2, + 0xE894: 0x9621, + 0xE895: 0x9628, + 0xE896: 0x962E, + 0xE897: 0x962F, + 0xE898: 0x9642, + 0xE899: 0x964C, + 0xE89A: 0x964F, + 0xE89B: 0x964B, + 0xE89C: 0x9677, + 0xE89D: 0x965C, + 0xE89E: 0x965E, + 0xE89F: 0x965D, + 0xE8A0: 0x965F, + 0xE8A1: 0x9666, + 0xE8A2: 0x9672, + 0xE8A3: 0x966C, + 0xE8A4: 0x968D, + 0xE8A5: 0x9698, + 0xE8A6: 0x9695, + 0xE8A7: 0x9697, + 0xE8A8: 0x96AA, + 0xE8A9: 0x96A7, + 0xE8AA: 0x96B1, + 0xE8AB: 0x96B2, + 0xE8AC: 0x96B0, + 0xE8AD: 0x96B4, + 0xE8AE: 0x96B6, + 0xE8AF: 0x96B8, + 0xE8B0: 0x96B9, + 0xE8B1: 0x96CE, + 0xE8B2: 0x96CB, + 0xE8B3: 0x96C9, + 0xE8B4: 0x96CD, + 0xE8B5: 0x894D, + 0xE8B6: 0x96DC, + 0xE8B7: 0x970D, + 0xE8B8: 0x96D5, + 0xE8B9: 0x96F9, + 0xE8BA: 0x9704, + 0xE8BB: 0x9706, + 0xE8BC: 0x9708, + 0xE8BD: 0x9713, + 0xE8BE: 0x970E, + 0xE8BF: 0x9711, + 0xE8C0: 0x970F, + 0xE8C1: 0x9716, + 0xE8C2: 0x9719, + 0xE8C3: 0x9724, + 0xE8C4: 0x972A, + 0xE8C5: 0x9730, + 0xE8C6: 0x9739, + 0xE8C7: 0x973D, + 0xE8C8: 0x973E, + 0xE8C9: 0x9744, + 0xE8CA: 0x9746, + 0xE8CB: 0x9748, + 0xE8CC: 0x9742, + 0xE8CD: 0x9749, + 0xE8CE: 0x975C, + 0xE8CF: 0x9760, + 0xE8D0: 0x9764, + 0xE8D1: 0x9766, + 0xE8D2: 0x9768, + 0xE8D3: 0x52D2, + 0xE8D4: 0x976B, + 0xE8D5: 0x9771, + 0xE8D6: 0x9779, + 0xE8D7: 0x9785, + 0xE8D8: 0x977C, + 0xE8D9: 0x9781, + 0xE8DA: 0x977A, + 0xE8DB: 0x9786, + 0xE8DC: 0x978B, + 0xE8DD: 0x978F, + 0xE8DE: 0x9790, + 0xE8DF: 0x979C, + 0xE8E0: 0x97A8, + 0xE8E1: 0x97A6, + 0xE8E2: 0x97A3, + 0xE8E3: 0x97B3, + 0xE8E4: 0x97B4, + 0xE8E5: 0x97C3, + 0xE8E6: 0x97C6, + 0xE8E7: 0x97C8, + 0xE8E8: 0x97CB, + 0xE8E9: 0x97DC, + 0xE8EA: 0x97ED, + 0xE8EB: 0x9F4F, + 0xE8EC: 0x97F2, + 0xE8ED: 0x7ADF, + 0xE8EE: 0x97F6, + 0xE8EF: 0x97F5, + 0xE8F0: 0x980F, + 0xE8F1: 0x980C, + 0xE8F2: 0x9838, + 0xE8F3: 0x9824, + 0xE8F4: 0x9821, + 0xE8F5: 0x9837, + 0xE8F6: 0x983D, + 0xE8F7: 0x9846, + 0xE8F8: 0x984F, + 0xE8F9: 0x984B, + 0xE8FA: 0x986B, + 0xE8FB: 0x986F, + 0xE8FC: 0x9870, + 0xE940: 0x9871, + 0xE941: 0x9874, + 0xE942: 0x9873, + 0xE943: 0x98AA, + 0xE944: 0x98AF, + 0xE945: 0x98B1, + 0xE946: 0x98B6, + 0xE947: 0x98C4, + 0xE948: 0x98C3, + 0xE949: 0x98C6, + 0xE94A: 0x98E9, + 0xE94B: 0x98EB, + 0xE94C: 0x9903, + 0xE94D: 0x9909, + 0xE94E: 0x9912, + 0xE94F: 0x9914, + 0xE950: 0x9918, + 0xE951: 0x9921, + 0xE952: 0x991D, + 0xE953: 0x991E, + 0xE954: 0x9924, + 0xE955: 0x9920, + 0xE956: 0x992C, + 0xE957: 0x992E, + 0xE958: 0x993D, + 0xE959: 0x993E, + 0xE95A: 0x9942, + 0xE95B: 0x9949, + 0xE95C: 0x9945, + 0xE95D: 0x9950, + 0xE95E: 0x994B, + 0xE95F: 0x9951, + 0xE960: 0x9952, + 0xE961: 0x994C, + 0xE962: 0x9955, + 0xE963: 0x9997, + 0xE964: 0x9998, + 0xE965: 0x99A5, + 0xE966: 0x99AD, + 0xE967: 0x99AE, + 0xE968: 0x99BC, + 0xE969: 0x99DF, + 0xE96A: 0x99DB, + 0xE96B: 0x99DD, + 0xE96C: 0x99D8, + 0xE96D: 0x99D1, + 0xE96E: 0x99ED, + 0xE96F: 0x99EE, + 0xE970: 0x99F1, + 0xE971: 0x99F2, + 0xE972: 0x99FB, + 0xE973: 0x99F8, + 0xE974: 0x9A01, + 0xE975: 0x9A0F, + 0xE976: 0x9A05, + 0xE977: 0x99E2, + 0xE978: 0x9A19, + 0xE979: 0x9A2B, + 0xE97A: 0x9A37, + 0xE97B: 0x9A45, + 0xE97C: 0x9A42, + 0xE97D: 0x9A40, + 0xE97E: 0x9A43, + 0xE980: 0x9A3E, + 0xE981: 0x9A55, + 0xE982: 0x9A4D, + 0xE983: 0x9A5B, + 0xE984: 0x9A57, + 0xE985: 0x9A5F, + 0xE986: 0x9A62, + 0xE987: 0x9A65, + 0xE988: 0x9A64, + 0xE989: 0x9A69, + 0xE98A: 0x9A6B, + 0xE98B: 0x9A6A, + 0xE98C: 0x9AAD, + 0xE98D: 0x9AB0, + 0xE98E: 0x9ABC, + 0xE98F: 0x9AC0, + 0xE990: 0x9ACF, + 0xE991: 0x9AD1, + 0xE992: 0x9AD3, + 0xE993: 0x9AD4, + 0xE994: 0x9ADE, + 0xE995: 0x9ADF, + 0xE996: 0x9AE2, + 0xE997: 0x9AE3, + 0xE998: 0x9AE6, + 0xE999: 0x9AEF, + 0xE99A: 0x9AEB, + 0xE99B: 0x9AEE, + 0xE99C: 0x9AF4, + 0xE99D: 0x9AF1, + 0xE99E: 0x9AF7, + 0xE99F: 0x9AFB, + 0xE9A0: 0x9B06, + 0xE9A1: 0x9B18, + 0xE9A2: 0x9B1A, + 0xE9A3: 0x9B1F, + 0xE9A4: 0x9B22, + 0xE9A5: 0x9B23, + 0xE9A6: 0x9B25, + 0xE9A7: 0x9B27, + 0xE9A8: 0x9B28, + 0xE9A9: 0x9B29, + 0xE9AA: 0x9B2A, + 0xE9AB: 0x9B2E, + 0xE9AC: 0x9B2F, + 0xE9AD: 0x9B32, + 0xE9AE: 0x9B44, + 0xE9AF: 0x9B43, + 0xE9B0: 0x9B4F, + 0xE9B1: 0x9B4D, + 0xE9B2: 0x9B4E, + 0xE9B3: 0x9B51, + 0xE9B4: 0x9B58, + 0xE9B5: 0x9B74, + 0xE9B6: 0x9B93, + 0xE9B7: 0x9B83, + 0xE9B8: 0x9B91, + 0xE9B9: 0x9B96, + 0xE9BA: 0x9B97, + 0xE9BB: 0x9B9F, + 0xE9BC: 0x9BA0, + 0xE9BD: 0x9BA8, + 0xE9BE: 0x9BB4, + 0xE9BF: 0x9BC0, + 0xE9C0: 0x9BCA, + 0xE9C1: 0x9BB9, + 0xE9C2: 0x9BC6, + 0xE9C3: 0x9BCF, + 0xE9C4: 0x9BD1, + 0xE9C5: 0x9BD2, + 0xE9C6: 0x9BE3, + 0xE9C7: 0x9BE2, + 0xE9C8: 0x9BE4, + 0xE9C9: 0x9BD4, + 0xE9CA: 0x9BE1, + 0xE9CB: 0x9C3A, + 0xE9CC: 0x9BF2, + 0xE9CD: 0x9BF1, + 0xE9CE: 0x9BF0, + 0xE9CF: 0x9C15, + 0xE9D0: 0x9C14, + 0xE9D1: 0x9C09, + 0xE9D2: 0x9C13, + 0xE9D3: 0x9C0C, + 0xE9D4: 0x9C06, + 0xE9D5: 0x9C08, + 0xE9D6: 0x9C12, + 0xE9D7: 0x9C0A, + 0xE9D8: 0x9C04, + 0xE9D9: 0x9C2E, + 0xE9DA: 0x9C1B, + 0xE9DB: 0x9C25, + 0xE9DC: 0x9C24, + 0xE9DD: 0x9C21, + 0xE9DE: 0x9C30, + 0xE9DF: 0x9C47, + 0xE9E0: 0x9C32, + 0xE9E1: 0x9C46, + 0xE9E2: 0x9C3E, + 0xE9E3: 0x9C5A, + 0xE9E4: 0x9C60, + 0xE9E5: 0x9C67, + 0xE9E6: 0x9C76, + 0xE9E7: 0x9C78, + 0xE9E8: 0x9CE7, + 0xE9E9: 0x9CEC, + 0xE9EA: 0x9CF0, + 0xE9EB: 0x9D09, + 0xE9EC: 0x9D08, + 0xE9ED: 0x9CEB, + 0xE9EE: 0x9D03, + 0xE9EF: 0x9D06, + 0xE9F0: 0x9D2A, + 0xE9F1: 0x9D26, + 0xE9F2: 0x9DAF, + 0xE9F3: 0x9D23, + 0xE9F4: 0x9D1F, + 0xE9F5: 0x9D44, + 0xE9F6: 0x9D15, + 0xE9F7: 0x9D12, + 0xE9F8: 0x9D41, + 0xE9F9: 0x9D3F, + 0xE9FA: 0x9D3E, + 0xE9FB: 0x9D46, + 0xE9FC: 0x9D48, + 0xEA40: 0x9D5D, + 0xEA41: 0x9D5E, + 0xEA42: 0x9D64, + 0xEA43: 0x9D51, + 0xEA44: 0x9D50, + 0xEA45: 0x9D59, + 0xEA46: 0x9D72, + 0xEA47: 0x9D89, + 0xEA48: 0x9D87, + 0xEA49: 0x9DAB, + 0xEA4A: 0x9D6F, + 0xEA4B: 0x9D7A, + 0xEA4C: 0x9D9A, + 0xEA4D: 0x9DA4, + 0xEA4E: 0x9DA9, + 0xEA4F: 0x9DB2, + 0xEA50: 0x9DC4, + 0xEA51: 0x9DC1, + 0xEA52: 0x9DBB, + 0xEA53: 0x9DB8, + 0xEA54: 0x9DBA, + 0xEA55: 0x9DC6, + 0xEA56: 0x9DCF, + 0xEA57: 0x9DC2, + 0xEA58: 0x9DD9, + 0xEA59: 0x9DD3, + 0xEA5A: 0x9DF8, + 0xEA5B: 0x9DE6, + 0xEA5C: 0x9DED, + 0xEA5D: 0x9DEF, + 0xEA5E: 0x9DFD, + 0xEA5F: 0x9E1A, + 0xEA60: 0x9E1B, + 0xEA61: 0x9E1E, + 0xEA62: 0x9E75, + 0xEA63: 0x9E79, + 0xEA64: 0x9E7D, + 0xEA65: 0x9E81, + 0xEA66: 0x9E88, + 0xEA67: 0x9E8B, + 0xEA68: 0x9E8C, + 0xEA69: 0x9E92, + 0xEA6A: 0x9E95, + 0xEA6B: 0x9E91, + 0xEA6C: 0x9E9D, + 0xEA6D: 0x9EA5, + 0xEA6E: 0x9EA9, + 0xEA6F: 0x9EB8, + 0xEA70: 0x9EAA, + 0xEA71: 0x9EAD, + 0xEA72: 0x9761, + 0xEA73: 0x9ECC, + 0xEA74: 0x9ECE, + 0xEA75: 0x9ECF, + 0xEA76: 0x9ED0, + 0xEA77: 0x9ED4, + 0xEA78: 0x9EDC, + 0xEA79: 0x9EDE, + 0xEA7A: 0x9EDD, + 0xEA7B: 0x9EE0, + 0xEA7C: 0x9EE5, + 0xEA7D: 0x9EE8, + 0xEA7E: 0x9EEF, + 0xEA80: 0x9EF4, + 0xEA81: 0x9EF6, + 0xEA82: 0x9EF7, + 0xEA83: 0x9EF9, + 0xEA84: 0x9EFB, + 0xEA85: 0x9EFC, + 0xEA86: 0x9EFD, + 0xEA87: 0x9F07, + 0xEA88: 0x9F08, + 0xEA89: 0x76B7, + 0xEA8A: 0x9F15, + 0xEA8B: 0x9F21, + 0xEA8C: 0x9F2C, + 0xEA8D: 0x9F3E, + 0xEA8E: 0x9F4A, + 0xEA8F: 0x9F52, + 0xEA90: 0x9F54, + 0xEA91: 0x9F63, + 0xEA92: 0x9F5F, + 0xEA93: 0x9F60, + 0xEA94: 0x9F61, + 0xEA95: 0x9F66, + 0xEA96: 0x9F67, + 0xEA97: 0x9F6C, + 0xEA98: 0x9F6A, + 0xEA99: 0x9F77, + 0xEA9A: 0x9F72, + 0xEA9B: 0x9F76, + 0xEA9C: 0x9F95, + 0xEA9D: 0x9F9C, + 0xEA9E: 0x9FA0, + 0xEA9F: 0x582F, + 0xEAA0: 0x69C7, + 0xEAA1: 0x9059, + 0xEAA2: 0x7464, + 0xEAA3: 0x51DC, + 0xEAA4: 0x7199, +}; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSIONS = [ + { + infoBits: null, + versionNumber: 1, + alignmentPatternCenters: [], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 7, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + { + ecCodewordsPerBlock: 13, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }], + }, + { + ecCodewordsPerBlock: 17, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 2, + alignmentPatternCenters: [6, 18], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 3, + alignmentPatternCenters: [6, 22], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 15, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 4, + alignmentPatternCenters: [6, 26], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 5, + alignmentPatternCenters: [6, 30], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 11 }, + { numBlocks: 2, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: null, + versionNumber: 6, + alignmentPatternCenters: [6, 34], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }], + }, + ], + }, + { + infoBits: 0x07C94, + versionNumber: 7, + alignmentPatternCenters: [6, 22, 38], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + { numBlocks: 1, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x085BC, + versionNumber: 8, + alignmentPatternCenters: [6, 24, 42], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 38 }, + { numBlocks: 2, dataCodewordsPerBlock: 39 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 18 }, + { numBlocks: 2, dataCodewordsPerBlock: 19 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 14 }, + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x09A99, + versionNumber: 9, + alignmentPatternCenters: [6, 26, 46], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0A4D3, + versionNumber: 10, + alignmentPatternCenters: [6, 28, 50], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 68 }, + { numBlocks: 2, dataCodewordsPerBlock: 69 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 43 }, + { numBlocks: 1, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x0BBF6, + versionNumber: 11, + alignmentPatternCenters: [6, 30, 54], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 50 }, + { numBlocks: 4, dataCodewordsPerBlock: 51 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + { numBlocks: 4, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 12 }, + { numBlocks: 8, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0C762, + versionNumber: 12, + alignmentPatternCenters: [6, 32, 58], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 92 }, + { numBlocks: 2, dataCodewordsPerBlock: 93 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 20 }, + { numBlocks: 6, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x0D847, + versionNumber: 13, + alignmentPatternCenters: [6, 34, 62], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 37 }, + { numBlocks: 1, dataCodewordsPerBlock: 38 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 20 }, + { numBlocks: 4, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 11 }, + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: 0x0E60D, + versionNumber: 14, + alignmentPatternCenters: [6, 26, 46, 66], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 40 }, + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 16 }, + { numBlocks: 5, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 5, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0F928, + versionNumber: 15, + alignmentPatternCenters: [6, 26, 48, 70], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 87 }, + { numBlocks: 1, dataCodewordsPerBlock: 88 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + { numBlocks: 5, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 7, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x10B78, + versionNumber: 16, + alignmentPatternCenters: [6, 26, 50, 74], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 98 }, + { numBlocks: 1, dataCodewordsPerBlock: 99 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1145D, + versionNumber: 17, + alignmentPatternCenters: [6, 30, 54, 78], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 1, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 22 }, + { numBlocks: 15, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 17, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x12A17, + versionNumber: 18, + alignmentPatternCenters: [6, 30, 56, 82], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 120 }, + { numBlocks: 1, dataCodewordsPerBlock: 121 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 43 }, + { numBlocks: 4, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x13532, + versionNumber: 19, + alignmentPatternCenters: [6, 30, 58, 86], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 113 }, + { numBlocks: 4, dataCodewordsPerBlock: 114 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 44 }, + { numBlocks: 11, dataCodewordsPerBlock: 45 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 21 }, + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 13 }, + { numBlocks: 16, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x149A6, + versionNumber: 20, + alignmentPatternCenters: [6, 34, 62, 90], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 41 }, + { numBlocks: 13, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 5, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 15 }, + { numBlocks: 10, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x15683, + versionNumber: 21, + alignmentPatternCenters: [6, 28, 50, 72, 94], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 116 }, + { numBlocks: 4, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 16 }, + { numBlocks: 6, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x168C9, + versionNumber: 22, + alignmentPatternCenters: [6, 26, 50, 74, 98], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 111 }, + { numBlocks: 7, dataCodewordsPerBlock: 112 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: 0x177EC, + versionNumber: 23, + alignmentPatternCenters: [6, 30, 54, 74, 102], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 121 }, + { numBlocks: 5, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + { numBlocks: 14, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 16, dataCodewordsPerBlock: 15 }, + { numBlocks: 14, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x18EC4, + versionNumber: 24, + alignmentPatternCenters: [6, 28, 54, 80, 106], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 45 }, + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 30, dataCodewordsPerBlock: 16 }, + { numBlocks: 2, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x191E1, + versionNumber: 25, + alignmentPatternCenters: [6, 32, 58, 84, 110], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 106 }, + { numBlocks: 4, dataCodewordsPerBlock: 107 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 47 }, + { numBlocks: 13, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1AFAB, + versionNumber: 26, + alignmentPatternCenters: [6, 30, 58, 86, 114], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 114 }, + { numBlocks: 2, dataCodewordsPerBlock: 115 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 46 }, + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 28, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 33, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x1B08E, + versionNumber: 27, + alignmentPatternCenters: [6, 34, 62, 90, 118], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 23 }, + { numBlocks: 26, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1CC1A, + versionNumber: 28, + alignmentPatternCenters: [6, 26, 50, 74, 98, 122], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 117 }, + { numBlocks: 10, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 45 }, + { numBlocks: 23, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 24 }, + { numBlocks: 31, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 31, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1D33F, + versionNumber: 29, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 116 }, + { numBlocks: 7, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 21, dataCodewordsPerBlock: 45 }, + { numBlocks: 7, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + { numBlocks: 37, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 26, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1ED75, + versionNumber: 30, + alignmentPatternCenters: [6, 26, 52, 78, 104, 130], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 115 }, + { numBlocks: 10, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 47 }, + { numBlocks: 10, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 25, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 25, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1F250, + versionNumber: 31, + alignmentPatternCenters: [6, 30, 56, 82, 108, 134], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 3, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 46 }, + { numBlocks: 29, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 24 }, + { numBlocks: 1, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x209D5, + versionNumber: 32, + alignmentPatternCenters: [6, 34, 60, 86, 112, 138], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 24 }, + { numBlocks: 35, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 35, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x216F0, + versionNumber: 33, + alignmentPatternCenters: [6, 30, 58, 86, 114, 142], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 21, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 24 }, + { numBlocks: 19, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x228BA, + versionNumber: 34, + alignmentPatternCenters: [6, 34, 62, 90, 118, 146], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 6, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 44, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 59, dataCodewordsPerBlock: 16 }, + { numBlocks: 1, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x2379F, + versionNumber: 35, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126, 150], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 121 }, + { numBlocks: 7, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 47 }, + { numBlocks: 26, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 39, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 41, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x24B0B, + versionNumber: 36, + alignmentPatternCenters: [6, 24, 50, 76, 102, 128, 154], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 121 }, + { numBlocks: 14, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 47 }, + { numBlocks: 34, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 46, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 64, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x2542E, + versionNumber: 37, + alignmentPatternCenters: [6, 28, 54, 80, 106, 132, 158], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 46 }, + { numBlocks: 14, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 49, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 24, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x26A64, + versionNumber: 38, + alignmentPatternCenters: [6, 32, 58, 84, 110, 136, 162], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 122 }, + { numBlocks: 18, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 46 }, + { numBlocks: 32, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 48, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 15 }, + { numBlocks: 32, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x27541, + versionNumber: 39, + alignmentPatternCenters: [6, 26, 54, 82, 110, 138, 166], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 40, dataCodewordsPerBlock: 47 }, + { numBlocks: 7, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 43, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 15 }, + { numBlocks: 67, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x28C69, + versionNumber: 40, + alignmentPatternCenters: [6, 30, 58, 86, 114, 142, 170], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 118 }, + { numBlocks: 6, dataCodewordsPerBlock: 119 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 18, dataCodewordsPerBlock: 47 }, + { numBlocks: 31, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 34, dataCodewordsPerBlock: 24 }, + { numBlocks: 34, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 15 }, + { numBlocks: 61, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, +]; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +function squareToQuadrilateral(p1, p2, p3, p4) { + var dx3 = p1.x - p2.x + p3.x - p4.x; + var dy3 = p1.y - p2.y + p3.y - p4.y; + if (dx3 === 0 && dy3 === 0) { // Affine + return { + a11: p2.x - p1.x, + a12: p2.y - p1.y, + a13: 0, + a21: p3.x - p2.x, + a22: p3.y - p2.y, + a23: 0, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } + else { + var dx1 = p2.x - p3.x; + var dx2 = p4.x - p3.x; + var dy1 = p2.y - p3.y; + var dy2 = p4.y - p3.y; + var denominator = dx1 * dy2 - dx2 * dy1; + var a13 = (dx3 * dy2 - dx2 * dy3) / denominator; + var a23 = (dx1 * dy3 - dx3 * dy1) / denominator; + return { + a11: p2.x - p1.x + a13 * p2.x, + a12: p2.y - p1.y + a13 * p2.y, + a13: a13, + a21: p4.x - p1.x + a23 * p4.x, + a22: p4.y - p1.y + a23 * p4.y, + a23: a23, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } +} +function quadrilateralToSquare(p1, p2, p3, p4) { + // Here, the adjoint serves as the inverse: + var sToQ = squareToQuadrilateral(p1, p2, p3, p4); + return { + a11: sToQ.a22 * sToQ.a33 - sToQ.a23 * sToQ.a32, + a12: sToQ.a13 * sToQ.a32 - sToQ.a12 * sToQ.a33, + a13: sToQ.a12 * sToQ.a23 - sToQ.a13 * sToQ.a22, + a21: sToQ.a23 * sToQ.a31 - sToQ.a21 * sToQ.a33, + a22: sToQ.a11 * sToQ.a33 - sToQ.a13 * sToQ.a31, + a23: sToQ.a13 * sToQ.a21 - sToQ.a11 * sToQ.a23, + a31: sToQ.a21 * sToQ.a32 - sToQ.a22 * sToQ.a31, + a32: sToQ.a12 * sToQ.a31 - sToQ.a11 * sToQ.a32, + a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21, + }; +} +function times(a, b) { + return { + a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13, + a12: a.a12 * b.a11 + a.a22 * b.a12 + a.a32 * b.a13, + a13: a.a13 * b.a11 + a.a23 * b.a12 + a.a33 * b.a13, + a21: a.a11 * b.a21 + a.a21 * b.a22 + a.a31 * b.a23, + a22: a.a12 * b.a21 + a.a22 * b.a22 + a.a32 * b.a23, + a23: a.a13 * b.a21 + a.a23 * b.a22 + a.a33 * b.a23, + a31: a.a11 * b.a31 + a.a21 * b.a32 + a.a31 * b.a33, + a32: a.a12 * b.a31 + a.a22 * b.a32 + a.a32 * b.a33, + a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33, + }; +} +function extract(image, location) { + var qToS = quadrilateralToSquare({ x: 3.5, y: 3.5 }, { x: location.dimension - 3.5, y: 3.5 }, { x: location.dimension - 6.5, y: location.dimension - 6.5 }, { x: 3.5, y: location.dimension - 3.5 }); + var sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft); + var transform = times(sToQ, qToS); + var matrix = BitMatrix_1.BitMatrix.createEmpty(location.dimension, location.dimension); + var mappingFunction = function (x, y) { + var denominator = transform.a13 * x + transform.a23 * y + transform.a33; + return { + x: (transform.a11 * x + transform.a21 * y + transform.a31) / denominator, + y: (transform.a12 * x + transform.a22 * y + transform.a32) / denominator, + }; + }; + for (var y = 0; y < location.dimension; y++) { + for (var x = 0; x < location.dimension; x++) { + var xValue = x + 0.5; + var yValue = y + 0.5; + var sourcePixel = mappingFunction(xValue, yValue); + matrix.set(x, y, image.get(Math.floor(sourcePixel.x), Math.floor(sourcePixel.y))); + } + } + return { + matrix: matrix, + mappingFunction: mappingFunction, + }; +} +exports.extract = extract; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var MAX_FINDERPATTERNS_TO_SEARCH = 4; +var MIN_QUAD_RATIO = 0.5; +var MAX_QUAD_RATIO = 1.5; +var distance = function (a, b) { return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2)); }; +function sum(values) { + return values.reduce(function (a, b) { return a + b; }); +} +// Takes three finder patterns and organizes them into topLeft, topRight, etc +function reorderFinderPatterns(pattern1, pattern2, pattern3) { + var _a, _b, _c, _d; + // Find distances between pattern centers + var oneTwoDistance = distance(pattern1, pattern2); + var twoThreeDistance = distance(pattern2, pattern3); + var oneThreeDistance = distance(pattern1, pattern3); + var bottomLeft; + var topLeft; + var topRight; + // Assume one closest to other two is B; A and C will just be guesses at first + if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) { + _a = [pattern2, pattern1, pattern3], bottomLeft = _a[0], topLeft = _a[1], topRight = _a[2]; + } + else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) { + _b = [pattern1, pattern2, pattern3], bottomLeft = _b[0], topLeft = _b[1], topRight = _b[2]; + } + else { + _c = [pattern1, pattern3, pattern2], bottomLeft = _c[0], topLeft = _c[1], topRight = _c[2]; + } + // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B) + // This asks whether BC x BA has a positive z component, which is the arrangement we want. If it's negative, then + // we've got it flipped around and should swap topRight and bottomLeft. + if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) { + _d = [topRight, bottomLeft], bottomLeft = _d[0], topRight = _d[1]; + } + return { bottomLeft: bottomLeft, topLeft: topLeft, topRight: topRight }; +} +// Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns +function computeDimension(topLeft, topRight, bottomLeft, matrix) { + var moduleSize = (sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1 + sum(countBlackWhiteRun(topLeft, topRight, matrix, 5)) / 7 + + sum(countBlackWhiteRun(bottomLeft, topLeft, matrix, 5)) / 7 + + sum(countBlackWhiteRun(topRight, topLeft, matrix, 5)) / 7) / 4; + if (moduleSize < 1) { + throw new Error("Invalid module size"); + } + var topDimension = Math.round(distance(topLeft, topRight) / moduleSize); + var sideDimension = Math.round(distance(topLeft, bottomLeft) / moduleSize); + var dimension = Math.floor((topDimension + sideDimension) / 2) + 7; + switch (dimension % 4) { + case 0: + dimension++; + break; + case 2: + dimension--; + break; + } + return { dimension: dimension, moduleSize: moduleSize }; +} +// Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point. +// Returns an array of elements, representing the pixel size of the black white run. +// Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm +function countBlackWhiteRunTowardsPoint(origin, end, matrix, length) { + var switchPoints = [{ x: Math.floor(origin.x), y: Math.floor(origin.y) }]; + var steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x); + var fromX; + var fromY; + var toX; + var toY; + if (steep) { + fromX = Math.floor(origin.y); + fromY = Math.floor(origin.x); + toX = Math.floor(end.y); + toY = Math.floor(end.x); + } + else { + fromX = Math.floor(origin.x); + fromY = Math.floor(origin.y); + toX = Math.floor(end.x); + toY = Math.floor(end.y); + } + var dx = Math.abs(toX - fromX); + var dy = Math.abs(toY - fromY); + var error = Math.floor(-dx / 2); + var xStep = fromX < toX ? 1 : -1; + var yStep = fromY < toY ? 1 : -1; + var currentPixel = true; + // Loop up until x == toX, but not beyond + for (var x = fromX, y = fromY; x !== toX + xStep; x += xStep) { + // Does current pixel mean we have moved white to black or vice versa? + // Scanning black in state 0,2 and white in state 1, so if we find the wrong + // color, advance to next state or end if we are in state 2 already + var realX = steep ? y : x; + var realY = steep ? x : y; + if (matrix.get(realX, realY) !== currentPixel) { + currentPixel = !currentPixel; + switchPoints.push({ x: realX, y: realY }); + if (switchPoints.length === length + 1) { + break; + } + } + error += dy; + if (error > 0) { + if (y === toY) { + break; + } + y += yStep; + error -= dx; + } + } + var distances = []; + for (var i = 0; i < length; i++) { + if (switchPoints[i] && switchPoints[i + 1]) { + distances.push(distance(switchPoints[i], switchPoints[i + 1])); + } + else { + distances.push(0); + } + } + return distances; +} +// Takes an origin point and an end point and counts the sizes of the black white run in the origin point +// along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes +// of the black white run. Takes a length which represents the number of switches from black to white to look for. +function countBlackWhiteRun(origin, end, matrix, length) { + var _a; + var rise = end.y - origin.y; + var run = end.x - origin.x; + var towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2)); + var awayFromEnd = countBlackWhiteRunTowardsPoint(origin, { x: origin.x - run, y: origin.y - rise }, matrix, Math.ceil(length / 2)); + var middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel + return (_a = awayFromEnd.concat(middleValue)).concat.apply(_a, towardsEnd); +} +// Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the "error" - +// that is the amount the run diverges from the expected ratio +function scoreBlackWhiteRun(sequence, ratios) { + var averageSize = sum(sequence) / sum(ratios); + var error = 0; + ratios.forEach(function (ratio, i) { + error += Math.pow((sequence[i] - ratio * averageSize), 2); + }); + return { averageSize: averageSize, error: error }; +} +// Takes an X,Y point and an array of sizes and scores the point against those ratios. +// For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios +// against that. +function scorePattern(point, ratios, matrix) { + try { + var horizontalRun = countBlackWhiteRun(point, { x: -1, y: point.y }, matrix, ratios.length); + var verticalRun = countBlackWhiteRun(point, { x: point.x, y: -1 }, matrix, ratios.length); + var topLeftPoint = { + x: Math.max(0, point.x - point.y) - 1, + y: Math.max(0, point.y - point.x) - 1, + }; + var topLeftBottomRightRun = countBlackWhiteRun(point, topLeftPoint, matrix, ratios.length); + var bottomLeftPoint = { + x: Math.min(matrix.width, point.x + point.y) + 1, + y: Math.min(matrix.height, point.y + point.x) + 1, + }; + var bottomLeftTopRightRun = countBlackWhiteRun(point, bottomLeftPoint, matrix, ratios.length); + var horzError = scoreBlackWhiteRun(horizontalRun, ratios); + var vertError = scoreBlackWhiteRun(verticalRun, ratios); + var diagDownError = scoreBlackWhiteRun(topLeftBottomRightRun, ratios); + var diagUpError = scoreBlackWhiteRun(bottomLeftTopRightRun, ratios); + var ratioError = Math.sqrt(horzError.error * horzError.error + + vertError.error * vertError.error + + diagDownError.error * diagDownError.error + + diagUpError.error * diagUpError.error); + var avgSize = (horzError.averageSize + vertError.averageSize + diagDownError.averageSize + diagUpError.averageSize) / 4; + var sizeError = (Math.pow((horzError.averageSize - avgSize), 2) + + Math.pow((vertError.averageSize - avgSize), 2) + + Math.pow((diagDownError.averageSize - avgSize), 2) + + Math.pow((diagUpError.averageSize - avgSize), 2)) / avgSize; + return ratioError + sizeError; + } + catch (_a) { + return Infinity; + } +} +function recenterLocation(matrix, p) { + var leftX = Math.round(p.x); + while (matrix.get(leftX, Math.round(p.y))) { + leftX--; + } + var rightX = Math.round(p.x); + while (matrix.get(rightX, Math.round(p.y))) { + rightX++; + } + var x = (leftX + rightX) / 2; + var topY = Math.round(p.y); + while (matrix.get(Math.round(x), topY)) { + topY--; + } + var bottomY = Math.round(p.y); + while (matrix.get(Math.round(x), bottomY)) { + bottomY++; + } + var y = (topY + bottomY) / 2; + return { x: x, y: y }; +} +function locate(matrix) { + var finderPatternQuads = []; + var activeFinderPatternQuads = []; + var alignmentPatternQuads = []; + var activeAlignmentPatternQuads = []; + var _loop_1 = function (y) { + var length_1 = 0; + var lastBit = false; + var scans = [0, 0, 0, 0, 0]; + var _loop_2 = function (x) { + var v = matrix.get(x, y); + if (v === lastBit) { + length_1++; + } + else { + scans = [scans[1], scans[2], scans[3], scans[4], length_1]; + length_1 = 1; + lastBit = v; + // Do the last 5 color changes ~ match the expected ratio for a finder pattern? 1:1:3:1:1 of b:w:b:w:b + var averageFinderPatternBlocksize = sum(scans) / 7; + var validFinderPattern = Math.abs(scans[0] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[1] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[2] - 3 * averageFinderPatternBlocksize) < 3 * averageFinderPatternBlocksize && + Math.abs(scans[3] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[4] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + !v; // And make sure the current pixel is white since finder patterns are bordered in white + // Do the last 3 color changes ~ match the expected ratio for an alignment pattern? 1:1:1 of w:b:w + var averageAlignmentPatternBlocksize = sum(scans.slice(-3)) / 3; + var validAlignmentPattern = Math.abs(scans[2] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[3] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[4] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + v; // Is the current pixel black since alignment patterns are bordered in black + if (validFinderPattern) { + // Compute the start and end x values of the large center black square + var endX_1 = x - scans[3] - scans[4]; + var startX_1 = endX_1 - scans[2]; + var line = { startX: startX_1, endX: endX_1, y: y }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + var matchingQuads = activeFinderPatternQuads.filter(function (q) { + return (startX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) || + (endX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) || + (startX_1 <= q.bottom.startX && endX_1 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO)); + }); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } + else { + activeFinderPatternQuads.push({ top: line, bottom: line }); + } + } + if (validAlignmentPattern) { + // Compute the start and end x values of the center black square + var endX_2 = x - scans[4]; + var startX_2 = endX_2 - scans[3]; + var line = { startX: startX_2, y: y, endX: endX_2 }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + var matchingQuads = activeAlignmentPatternQuads.filter(function (q) { + return (startX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) || + (endX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) || + (startX_2 <= q.bottom.startX && endX_2 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO)); + }); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } + else { + activeAlignmentPatternQuads.push({ top: line, bottom: line }); + } + } + } + }; + for (var x = -1; x <= matrix.width; x++) { + _loop_2(x); + } + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y !== y && q.bottom.y - q.top.y >= 2; })); + activeFinderPatternQuads = activeFinderPatternQuads.filter(function (q) { return q.bottom.y === y; }); + alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y !== y; })); + activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y === y; }); + }; + for (var y = 0; y <= matrix.height; y++) { + _loop_1(y); + } + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y - q.top.y >= 2; })); + alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads); + var finderPatternGroups = finderPatternQuads + .filter(function (q) { return q.bottom.y - q.top.y >= 2; }) // All quads must be at least 2px tall since the center square is larger than a block + .map(function (q) { + var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + var y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.round(x), Math.round(y))) { + return; + } + var lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, q.bottom.y - q.top.y + 1]; + var size = sum(lengths) / lengths.length; + var score = scorePattern({ x: Math.round(x), y: Math.round(y) }, [1, 1, 3, 1, 1], matrix); + return { score: score, x: x, y: y, size: size }; + }) + .filter(function (q) { return !!q; }) // Filter out any rejected quads from above + .sort(function (a, b) { return a.score - b.score; }) + // Now take the top finder pattern options and try to find 2 other options with a similar size. + .map(function (point, i, finderPatterns) { + if (i > MAX_FINDERPATTERNS_TO_SEARCH) { + return null; + } + var otherPoints = finderPatterns + .filter(function (p, ii) { return i !== ii; }) + .map(function (p) { return ({ x: p.x, y: p.y, score: p.score + (Math.pow((p.size - point.size), 2)) / point.size, size: p.size }); }) + .sort(function (a, b) { return a.score - b.score; }); + if (otherPoints.length < 2) { + return null; + } + var score = point.score + otherPoints[0].score + otherPoints[1].score; + return { points: [point].concat(otherPoints.slice(0, 2)), score: score }; + }) + .filter(function (q) { return !!q; }) // Filter out any rejected finder patterns from above + .sort(function (a, b) { return a.score - b.score; }); + if (finderPatternGroups.length === 0) { + return null; + } + var _a = reorderFinderPatterns(finderPatternGroups[0].points[0], finderPatternGroups[0].points[1], finderPatternGroups[0].points[2]), topRight = _a.topRight, topLeft = _a.topLeft, bottomLeft = _a.bottomLeft; + var alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft); + var result = []; + if (alignment) { + result.push({ + alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y }, + bottomLeft: { x: bottomLeft.x, y: bottomLeft.y }, + dimension: alignment.dimension, + topLeft: { x: topLeft.x, y: topLeft.y }, + topRight: { x: topRight.x, y: topRight.y }, + }); + } + // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account + // for a skew in the image. However, In some cases, a slight skew might not be real and instead be caused by image compression + // errors and/or low resolution. For those cases, we'd be better off centering the point exactly in the middle of the black area. We + // compute and return the location data for the naively centered points as it is little additional work and allows for multiple + // attempts at decoding harder images. + var midTopRight = recenterLocation(matrix, topRight); + var midTopLeft = recenterLocation(matrix, topLeft); + var midBottomLeft = recenterLocation(matrix, bottomLeft); + var centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft); + if (centeredAlignment) { + result.push({ + alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y }, + bottomLeft: { x: midBottomLeft.x, y: midBottomLeft.y }, + topLeft: { x: midTopLeft.x, y: midTopLeft.y }, + topRight: { x: midTopRight.x, y: midTopRight.y }, + dimension: centeredAlignment.dimension, + }); + } + if (result.length === 0) { + return null; + } + return result; +} +exports.locate = locate; +function findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft) { + var _a; + // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code. + // We'll use these to help find the alignment pattern but also later when we do the extraction. + var dimension; + var moduleSize; + try { + (_a = computeDimension(topLeft, topRight, bottomLeft, matrix), dimension = _a.dimension, moduleSize = _a.moduleSize); + } + catch (e) { + return null; + } + // Now find the alignment pattern + var bottomRightFinderPattern = { + x: topRight.x - topLeft.x + bottomLeft.x, + y: topRight.y - topLeft.y + bottomLeft.y, + }; + var modulesBetweenFinderPatterns = ((distance(topLeft, bottomLeft) + distance(topLeft, topRight)) / 2 / moduleSize); + var correctionToTopLeft = 1 - (3 / modulesBetweenFinderPatterns); + var expectedAlignmentPattern = { + x: topLeft.x + correctionToTopLeft * (bottomRightFinderPattern.x - topLeft.x), + y: topLeft.y + correctionToTopLeft * (bottomRightFinderPattern.y - topLeft.y), + }; + var alignmentPatterns = alignmentPatternQuads + .map(function (q) { + var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + var y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.floor(x), Math.floor(y))) { + return; + } + var sizeScore = scorePattern({ x: Math.floor(x), y: Math.floor(y) }, [1, 1, 1], matrix); + var score = sizeScore + distance({ x: x, y: y }, expectedAlignmentPattern); + return { x: x, y: y, score: score }; + }) + .filter(function (v) { return !!v; }) + .sort(function (a, b) { return a.score - b.score; }); + // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern + // so we can only use our best guess. + var alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern; + return { alignmentPattern: alignmentPattern, dimension: dimension }; +} + + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/jsQR/dist/locator/index.d.ts b/jsQR/dist/locator/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..11316062a86062c96419a9c3698670ee034d3b69 --- /dev/null +++ b/jsQR/dist/locator/index.d.ts @@ -0,0 +1,13 @@ +import { BitMatrix } from "../BitMatrix"; +export interface Point { + x: number; + y: number; +} +export interface QRLocation { + topRight: Point; + bottomLeft: Point; + topLeft: Point; + alignmentPattern: Point; + dimension: number; +} +export declare function locate(matrix: BitMatrix): QRLocation[]; diff --git a/jsQR/docs/index.html b/jsQR/docs/index.html new file mode 100644 index 0000000000000000000000000000000000000000..23341e8c856b7ec84bff272667dea590f3aa41ed --- /dev/null +++ b/jsQR/docs/index.html @@ -0,0 +1,122 @@ +<html> +<head> + <meta charset="utf-8"> + <title>jsQR Demo</title> + <script src="./jsQR.js"></script> + <link href="https://fonts.googleapis.com/css?family=Ropa+Sans" rel="stylesheet"> + <style> + body { + font-family: 'Ropa Sans', sans-serif; + color: #333; + max-width: 640px; + margin: 0 auto; + position: relative; + } + + #githubLink { + position: absolute; + right: 0; + top: 12px; + color: #2D99FF; + } + + h1 { + margin: 10px 0; + font-size: 40px; + } + + #loadingMessage { + text-align: center; + padding: 40px; + background-color: #eee; + } + + #canvas { + width: 100%; + } + + #output { + margin-top: 20px; + background: #eee; + padding: 10px; + padding-bottom: 0; + } + + #output div { + padding-bottom: 10px; + word-wrap: break-word; + } + + #noQRFound { + text-align: center; + } + </style> +</head> +<body> + <h1>jsQR Demo</h1> + <a id="githubLink" href="https://github.com/cozmo/jsQR">View documentation on Github</a> + <p>Pure JavaScript QR code decoding library.</p> + <div id="loadingMessage">🎥 Unable to access video stream (please make sure you have a webcam enabled)</div> + <canvas id="canvas" hidden></canvas> + <div id="output" hidden> + <div id="outputMessage">No QR code detected.</div> + <div hidden><b>Data:</b> <span id="outputData"></span></div> + </div> + <script> + var video = document.createElement("video"); + var canvasElement = document.getElementById("canvas"); + var canvas = canvasElement.getContext("2d"); + var loadingMessage = document.getElementById("loadingMessage"); + var outputContainer = document.getElementById("output"); + var outputMessage = document.getElementById("outputMessage"); + var outputData = document.getElementById("outputData"); + + function drawLine(begin, end, color) { + canvas.beginPath(); + canvas.moveTo(begin.x, begin.y); + canvas.lineTo(end.x, end.y); + canvas.lineWidth = 4; + canvas.strokeStyle = color; + canvas.stroke(); + } + + // Use facingMode: environment to attemt to get the front camera on phones + navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" } }).then(function(stream) { + video.srcObject = stream; + video.setAttribute("playsinline", true); // required to tell iOS safari we don't want fullscreen + video.play(); + requestAnimationFrame(tick); + }); + + function tick() { + loadingMessage.innerText = "⌛ Loading video..." + if (video.readyState === video.HAVE_ENOUGH_DATA) { + loadingMessage.hidden = true; + canvasElement.hidden = false; + outputContainer.hidden = false; + + canvasElement.height = video.videoHeight; + canvasElement.width = video.videoWidth; + canvas.drawImage(video, 0, 0, canvasElement.width, canvasElement.height); + var imageData = canvas.getImageData(0, 0, canvasElement.width, canvasElement.height); + var code = jsQR(imageData.data, imageData.width, imageData.height, { + inversionAttempts: "dontInvert", + }); + if (code) { + drawLine(code.location.topLeftCorner, code.location.topRightCorner, "#FF3B58"); + drawLine(code.location.topRightCorner, code.location.bottomRightCorner, "#FF3B58"); + drawLine(code.location.bottomRightCorner, code.location.bottomLeftCorner, "#FF3B58"); + drawLine(code.location.bottomLeftCorner, code.location.topLeftCorner, "#FF3B58"); + outputMessage.hidden = true; + outputData.parentElement.hidden = false; + outputData.innerText = code.data; + } else { + outputMessage.hidden = false; + outputData.parentElement.hidden = true; + } + } + requestAnimationFrame(tick); + } + </script> +</body> +</html> diff --git a/jsQR/docs/jsQR.js b/jsQR/docs/jsQR.js new file mode 100644 index 0000000000000000000000000000000000000000..1b242c29380531c138a0531bb176fbc9c97fc4cd --- /dev/null +++ b/jsQR/docs/jsQR.js @@ -0,0 +1,9766 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["jsQR"] = factory(); + else + root["jsQR"] = factory(); +})(typeof self !== 'undefined' ? self : this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix = /** @class */ (function () { + function BitMatrix(data, width) { + this.width = width; + this.height = data.length / width; + this.data = data; + } + BitMatrix.createEmpty = function (width, height) { + return new BitMatrix(new Uint8ClampedArray(width * height), width); + }; + BitMatrix.prototype.get = function (x, y) { + if (x < 0 || x >= this.width || y < 0 || y >= this.height) { + return false; + } + return !!this.data[y * this.width + x]; + }; + BitMatrix.prototype.set = function (x, y, v) { + this.data[y * this.width + x] = v ? 1 : 0; + }; + BitMatrix.prototype.setRegion = function (left, top, width, height, v) { + for (var y = top; y < top + height; y++) { + for (var x = left; x < left + width; x++) { + this.set(x, y, !!v); + } + } + }; + return BitMatrix; +}()); +exports.BitMatrix = BitMatrix; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var binarizer_1 = __webpack_require__(2); +var decoder_1 = __webpack_require__(3); +var extractor_1 = __webpack_require__(8); +var locator_1 = __webpack_require__(9); +function scan(matrix) { + var locations = locator_1.locate(matrix); + if (!locations) { + return null; + } + for (var _i = 0, locations_1 = locations; _i < locations_1.length; _i++) { + var location_1 = locations_1[_i]; + var extracted = extractor_1.extract(matrix, location_1); + var decoded = decoder_1.decode(extracted.matrix); + if (decoded) { + return { + binaryData: decoded.bytes, + data: decoded.text, + chunks: decoded.chunks, + version: decoded.version, + location: { + topRightCorner: extracted.mappingFunction(location_1.dimension, 0), + topLeftCorner: extracted.mappingFunction(0, 0), + bottomRightCorner: extracted.mappingFunction(location_1.dimension, location_1.dimension), + bottomLeftCorner: extracted.mappingFunction(0, location_1.dimension), + topRightFinderPattern: location_1.topRight, + topLeftFinderPattern: location_1.topLeft, + bottomLeftFinderPattern: location_1.bottomLeft, + bottomRightAlignmentPattern: location_1.alignmentPattern, + }, + }; + } + } + return null; +} +var defaultOptions = { + inversionAttempts: "attemptBoth", +}; +function jsQR(data, width, height, providedOptions) { + if (providedOptions === void 0) { providedOptions = {}; } + var options = defaultOptions; + Object.keys(options || {}).forEach(function (opt) { + options[opt] = providedOptions[opt] || options[opt]; + }); + var shouldInvert = options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst"; + var tryInvertedFirst = options.inversionAttempts === "onlyInvert" || options.inversionAttempts === "invertFirst"; + var _a = binarizer_1.binarize(data, width, height, shouldInvert), binarized = _a.binarized, inverted = _a.inverted; + var result = scan(tryInvertedFirst ? inverted : binarized); + if (!result && (options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst")) { + result = scan(tryInvertedFirst ? binarized : inverted); + } + return result; +} +jsQR.default = jsQR; +exports.default = jsQR; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +var REGION_SIZE = 8; +var MIN_DYNAMIC_RANGE = 24; +function numBetween(value, min, max) { + return value < min ? min : value > max ? max : value; +} +// Like BitMatrix but accepts arbitry Uint8 values +var Matrix = /** @class */ (function () { + function Matrix(width, height) { + this.width = width; + this.data = new Uint8ClampedArray(width * height); + } + Matrix.prototype.get = function (x, y) { + return this.data[y * this.width + x]; + }; + Matrix.prototype.set = function (x, y, value) { + this.data[y * this.width + x] = value; + }; + return Matrix; +}()); +function binarize(data, width, height, returnInverted) { + if (data.length !== width * height * 4) { + throw new Error("Malformed data passed to binarizer."); + } + // Convert image to greyscale + var greyscalePixels = new Matrix(width, height); + for (var x = 0; x < width; x++) { + for (var y = 0; y < height; y++) { + var r = data[((y * width + x) * 4) + 0]; + var g = data[((y * width + x) * 4) + 1]; + var b = data[((y * width + x) * 4) + 2]; + greyscalePixels.set(x, y, 0.2126 * r + 0.7152 * g + 0.0722 * b); + } + } + var horizontalRegionCount = Math.ceil(width / REGION_SIZE); + var verticalRegionCount = Math.ceil(height / REGION_SIZE); + var blackPoints = new Matrix(horizontalRegionCount, verticalRegionCount); + for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + var sum = 0; + var min = Infinity; + var max = 0; + for (var y = 0; y < REGION_SIZE; y++) { + for (var x = 0; x < REGION_SIZE; x++) { + var pixelLumosity = greyscalePixels.get(hortizontalRegion * REGION_SIZE + x, verticalRegion * REGION_SIZE + y); + sum += pixelLumosity; + min = Math.min(min, pixelLumosity); + max = Math.max(max, pixelLumosity); + } + } + var average = sum / (Math.pow(REGION_SIZE, 2)); + if (max - min <= MIN_DYNAMIC_RANGE) { + // If variation within the block is low, assume this is a block with only light or only + // dark pixels. In that case we do not want to use the average, as it would divide this + // low contrast area into black and white pixels, essentially creating data out of noise. + // + // Default the blackpoint for these blocks to be half the min - effectively white them out + average = min / 2; + if (verticalRegion > 0 && hortizontalRegion > 0) { + // Correct the "white background" assumption for blocks that have neighbors by comparing + // the pixels in this block to the previously calculated black points. This is based on + // the fact that dark barcode symbology is always surrounded by some amount of light + // background for which reasonable black point estimates were made. The bp estimated at + // the boundaries is used for the interior. + // The (min < bp) is arbitrary but works better than other heuristics that were tried. + var averageNeighborBlackPoint = (blackPoints.get(hortizontalRegion, verticalRegion - 1) + + (2 * blackPoints.get(hortizontalRegion - 1, verticalRegion)) + + blackPoints.get(hortizontalRegion - 1, verticalRegion - 1)) / 4; + if (min < averageNeighborBlackPoint) { + average = averageNeighborBlackPoint; + } + } + } + blackPoints.set(hortizontalRegion, verticalRegion, average); + } + } + var binarized = BitMatrix_1.BitMatrix.createEmpty(width, height); + var inverted = null; + if (returnInverted) { + inverted = BitMatrix_1.BitMatrix.createEmpty(width, height); + } + for (var verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (var hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + var left = numBetween(hortizontalRegion, 2, horizontalRegionCount - 3); + var top_1 = numBetween(verticalRegion, 2, verticalRegionCount - 3); + var sum = 0; + for (var xRegion = -2; xRegion <= 2; xRegion++) { + for (var yRegion = -2; yRegion <= 2; yRegion++) { + sum += blackPoints.get(left + xRegion, top_1 + yRegion); + } + } + var threshold = sum / 25; + for (var xRegion = 0; xRegion < REGION_SIZE; xRegion++) { + for (var yRegion = 0; yRegion < REGION_SIZE; yRegion++) { + var x = hortizontalRegion * REGION_SIZE + xRegion; + var y = verticalRegion * REGION_SIZE + yRegion; + var lum = greyscalePixels.get(x, y); + binarized.set(x, y, lum <= threshold); + if (returnInverted) { + inverted.set(x, y, !(lum <= threshold)); + } + } + } + } + } + if (returnInverted) { + return { binarized: binarized, inverted: inverted }; + } + return { binarized: binarized }; +} +exports.binarize = binarize; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +var decodeData_1 = __webpack_require__(4); +var version_1 = __webpack_require__(7); +// tslint:disable:no-bitwise +function numBitsDiffering(x, y) { + var z = x ^ y; + var bitCount = 0; + while (z) { + bitCount++; + z &= z - 1; + } + return bitCount; +} +function pushBit(bit, byte) { + return (byte << 1) | bit; +} +// tslint:enable:no-bitwise +var FORMAT_INFO_TABLE = [ + { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } }, + { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } }, + { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } }, + { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } }, + { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } }, + { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } }, + { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } }, + { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } }, + { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } }, + { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } }, + { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } }, + { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } }, + { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } }, + { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } }, + { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } }, + { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } }, + { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } }, + { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } }, + { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } }, + { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } }, + { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } }, + { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } }, + { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } }, + { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } }, + { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } }, + { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } }, + { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } }, + { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } }, + { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } }, + { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } }, + { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } }, + { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } }, +]; +var DATA_MASKS = [ + function (p) { return ((p.y + p.x) % 2) === 0; }, + function (p) { return (p.y % 2) === 0; }, + function (p) { return p.x % 3 === 0; }, + function (p) { return (p.y + p.x) % 3 === 0; }, + function (p) { return (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0; }, + function (p) { return ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0; }, + function (p) { return ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, + function (p) { return ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0; }, +]; +function buildFunctionPatternMask(version) { + var dimension = 17 + 4 * version.versionNumber; + var matrix = BitMatrix_1.BitMatrix.createEmpty(dimension, dimension); + matrix.setRegion(0, 0, 9, 9, true); // Top left finder pattern + separator + format + matrix.setRegion(dimension - 8, 0, 8, 9, true); // Top right finder pattern + separator + format + matrix.setRegion(0, dimension - 8, 9, 8, true); // Bottom left finder pattern + separator + format + // Alignment patterns + for (var _i = 0, _a = version.alignmentPatternCenters; _i < _a.length; _i++) { + var x = _a[_i]; + for (var _b = 0, _c = version.alignmentPatternCenters; _b < _c.length; _b++) { + var y = _c[_b]; + if (!(x === 6 && y === 6 || x === 6 && y === dimension - 7 || x === dimension - 7 && y === 6)) { + matrix.setRegion(x - 2, y - 2, 5, 5, true); + } + } + } + matrix.setRegion(6, 9, 1, dimension - 17, true); // Vertical timing pattern + matrix.setRegion(9, 6, dimension - 17, 1, true); // Horizontal timing pattern + if (version.versionNumber > 6) { + matrix.setRegion(dimension - 11, 0, 3, 6, true); // Version info, top right + matrix.setRegion(0, dimension - 11, 6, 3, true); // Version info, bottom left + } + return matrix; +} +function readCodewords(matrix, version, formatInfo) { + var dataMask = DATA_MASKS[formatInfo.dataMask]; + var dimension = matrix.height; + var functionPatternMask = buildFunctionPatternMask(version); + var codewords = []; + var currentByte = 0; + var bitsRead = 0; + // Read columns in pairs, from right to left + var readingUp = true; + for (var columnIndex = dimension - 1; columnIndex > 0; columnIndex -= 2) { + if (columnIndex === 6) { // Skip whole column with vertical alignment pattern; + columnIndex--; + } + for (var i = 0; i < dimension; i++) { + var y = readingUp ? dimension - 1 - i : i; + for (var columnOffset = 0; columnOffset < 2; columnOffset++) { + var x = columnIndex - columnOffset; + if (!functionPatternMask.get(x, y)) { + bitsRead++; + var bit = matrix.get(x, y); + if (dataMask({ y: y, x: x })) { + bit = !bit; + } + currentByte = pushBit(bit, currentByte); + if (bitsRead === 8) { // Whole bytes + codewords.push(currentByte); + bitsRead = 0; + currentByte = 0; + } + } + } + } + readingUp = !readingUp; + } + return codewords; +} +function readVersion(matrix) { + var dimension = matrix.height; + var provisionalVersion = Math.floor((dimension - 17) / 4); + if (provisionalVersion <= 6) { // 6 and under dont have version info in the QR code + return version_1.VERSIONS[provisionalVersion - 1]; + } + var topRightVersionBits = 0; + for (var y = 5; y >= 0; y--) { + for (var x = dimension - 9; x >= dimension - 11; x--) { + topRightVersionBits = pushBit(matrix.get(x, y), topRightVersionBits); + } + } + var bottomLeftVersionBits = 0; + for (var x = 5; x >= 0; x--) { + for (var y = dimension - 9; y >= dimension - 11; y--) { + bottomLeftVersionBits = pushBit(matrix.get(x, y), bottomLeftVersionBits); + } + } + var bestDifference = Infinity; + var bestVersion; + for (var _i = 0, VERSIONS_1 = version_1.VERSIONS; _i < VERSIONS_1.length; _i++) { + var version = VERSIONS_1[_i]; + if (version.infoBits === topRightVersionBits || version.infoBits === bottomLeftVersionBits) { + return version; + } + var difference = numBitsDiffering(topRightVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + difference = numBitsDiffering(bottomLeftVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + } + // We can tolerate up to 3 bits of error since no two version info codewords will + // differ in less than 8 bits. + if (bestDifference <= 3) { + return bestVersion; + } +} +function readFormatInformation(matrix) { + var topLeftFormatInfoBits = 0; + for (var x = 0; x <= 8; x++) { + if (x !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(x, 8), topLeftFormatInfoBits); + } + } + for (var y = 7; y >= 0; y--) { + if (y !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(8, y), topLeftFormatInfoBits); + } + } + var dimension = matrix.height; + var topRightBottomRightFormatInfoBits = 0; + for (var y = dimension - 1; y >= dimension - 7; y--) { // bottom left + topRightBottomRightFormatInfoBits = pushBit(matrix.get(8, y), topRightBottomRightFormatInfoBits); + } + for (var x = dimension - 8; x < dimension; x++) { // top right + topRightBottomRightFormatInfoBits = pushBit(matrix.get(x, 8), topRightBottomRightFormatInfoBits); + } + var bestDifference = Infinity; + var bestFormatInfo = null; + for (var _i = 0, FORMAT_INFO_TABLE_1 = FORMAT_INFO_TABLE; _i < FORMAT_INFO_TABLE_1.length; _i++) { + var _a = FORMAT_INFO_TABLE_1[_i], bits = _a.bits, formatInfo = _a.formatInfo; + if (bits === topLeftFormatInfoBits || bits === topRightBottomRightFormatInfoBits) { + return formatInfo; + } + var difference = numBitsDiffering(topLeftFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + if (topLeftFormatInfoBits !== topRightBottomRightFormatInfoBits) { // also try the other option + difference = numBitsDiffering(topRightBottomRightFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + } + } + // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match + if (bestDifference <= 3) { + return bestFormatInfo; + } + return null; +} +function getDataBlocks(codewords, version, ecLevel) { + var ecInfo = version.errorCorrectionLevels[ecLevel]; + var dataBlocks = []; + var totalCodewords = 0; + ecInfo.ecBlocks.forEach(function (block) { + for (var i = 0; i < block.numBlocks; i++) { + dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] }); + totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock; + } + }); + // In some cases the QR code will be malformed enough that we pull off more or less than we should. + // If we pull off less there's nothing we can do. + // If we pull off more we can safely truncate + if (codewords.length < totalCodewords) { + return null; + } + codewords = codewords.slice(0, totalCodewords); + var shortBlockSize = ecInfo.ecBlocks[0].dataCodewordsPerBlock; + // Pull codewords to fill the blocks up to the minimum size + for (var i = 0; i < shortBlockSize; i++) { + for (var _i = 0, dataBlocks_1 = dataBlocks; _i < dataBlocks_1.length; _i++) { + var dataBlock = dataBlocks_1[_i]; + dataBlock.codewords.push(codewords.shift()); + } + } + // If there are any large blocks, pull codewords to fill the last element of those + if (ecInfo.ecBlocks.length > 1) { + var smallBlockCount = ecInfo.ecBlocks[0].numBlocks; + var largeBlockCount = ecInfo.ecBlocks[1].numBlocks; + for (var i = 0; i < largeBlockCount; i++) { + dataBlocks[smallBlockCount + i].codewords.push(codewords.shift()); + } + } + // Add the rest of the codewords to the blocks. These are the error correction codewords. + while (codewords.length > 0) { + for (var _a = 0, dataBlocks_2 = dataBlocks; _a < dataBlocks_2.length; _a++) { + var dataBlock = dataBlocks_2[_a]; + dataBlock.codewords.push(codewords.shift()); + } + } + return dataBlocks; +} +function decodeMatrix(matrix) { + var version = readVersion(matrix); + if (!version) { + return null; + } + var formatInfo = readFormatInformation(matrix); + if (!formatInfo) { + return null; + } + var codewords = readCodewords(matrix, version, formatInfo); + var dataBlocks = getDataBlocks(codewords, version, formatInfo.errorCorrectionLevel); + if (!dataBlocks) { + return null; + } + // Count total number of data bytes + var totalBytes = dataBlocks.reduce(function (a, b) { return a + b.numDataCodewords; }, 0); + var resultBytes = new Uint8ClampedArray(totalBytes); + var resultIndex = 0; + for (var _i = 0, dataBlocks_3 = dataBlocks; _i < dataBlocks_3.length; _i++) { + var dataBlock = dataBlocks_3[_i]; + /*const correctedBytes = rsDecode(dataBlock.codewords, dataBlock.codewords.length - dataBlock.numDataCodewords); + if (!correctedBytes) { + return null; + }*/ + if (resultIndex == 0) { + console.log(dataBlock.codewords[0]); + } + for (var i = 0; i < dataBlock.numDataCodewords; i++) { + resultBytes[resultIndex++] = dataBlock.codewords[i]; + } + } + try { + return decodeData_1.decode(resultBytes, version.versionNumber); + } + catch (_a) { + return null; + } +} +function decode(matrix) { + if (matrix == null) { + return null; + } + var result = decodeMatrix(matrix); + if (result) { + return result; + } + // Decoding didn't work, try mirroring the QR across the topLeft -> bottomRight line. + for (var x = 0; x < matrix.width; x++) { + for (var y = x + 1; y < matrix.height; y++) { + if (matrix.get(x, y) !== matrix.get(y, x)) { + matrix.set(x, y, !matrix.get(x, y)); + matrix.set(y, x, !matrix.get(y, x)); + } + } + } + return decodeMatrix(matrix); +} +exports.decode = decode; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +// tslint:disable:no-bitwise +var BitStream_1 = __webpack_require__(5); +var shiftJISTable_1 = __webpack_require__(6); +var Mode; +(function (Mode) { + Mode["Numeric"] = "numeric"; + Mode["Alphanumeric"] = "alphanumeric"; + Mode["Byte"] = "byte"; + Mode["Kanji"] = "kanji"; + Mode["ECI"] = "eci"; +})(Mode = exports.Mode || (exports.Mode = {})); +var ModeByte; +(function (ModeByte) { + ModeByte[ModeByte["Terminator"] = 0] = "Terminator"; + ModeByte[ModeByte["Numeric"] = 1] = "Numeric"; + ModeByte[ModeByte["Alphanumeric"] = 2] = "Alphanumeric"; + ModeByte[ModeByte["Byte"] = 4] = "Byte"; + ModeByte[ModeByte["Kanji"] = 8] = "Kanji"; + ModeByte[ModeByte["ECI"] = 7] = "ECI"; + // StructuredAppend = 0x3, + // FNC1FirstPosition = 0x5, + // FNC1SecondPosition = 0x9, +})(ModeByte || (ModeByte = {})); +function decodeNumeric(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [10, 12, 14][size]; + var length = stream.readBits(characterCountSize); + // Read digits in groups of 3 + while (length >= 3) { + var num = stream.readBits(10); + if (num >= 1000) { + throw new Error("Invalid numeric value above 999"); + } + var a = Math.floor(num / 100); + var b = Math.floor(num / 10) % 10; + var c = num % 10; + bytes.push(48 + a, 48 + b, 48 + c); + text += a.toString() + b.toString() + c.toString(); + length -= 3; + } + // If the number of digits aren't a multiple of 3, the remaining digits are special cased. + if (length === 2) { + var num = stream.readBits(7); + if (num >= 100) { + throw new Error("Invalid numeric value above 99"); + } + var a = Math.floor(num / 10); + var b = num % 10; + bytes.push(48 + a, 48 + b); + text += a.toString() + b.toString(); + } + else if (length === 1) { + var num = stream.readBits(4); + if (num >= 10) { + throw new Error("Invalid numeric value above 9"); + } + bytes.push(48 + num); + text += num.toString(); + } + return { bytes: bytes, text: text }; +} +var AlphanumericCharacterCodes = [ + "0", "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", + " ", "$", "%", "*", "+", "-", ".", "/", ":", +]; +function decodeAlphanumeric(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [9, 11, 13][size]; + var length = stream.readBits(characterCountSize); + while (length >= 2) { + var v = stream.readBits(11); + var a = Math.floor(v / 45); + var b = v % 45; + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0), AlphanumericCharacterCodes[b].charCodeAt(0)); + text += AlphanumericCharacterCodes[a] + AlphanumericCharacterCodes[b]; + length -= 2; + } + if (length === 1) { + var a = stream.readBits(6); + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0)); + text += AlphanumericCharacterCodes[a]; + } + return { bytes: bytes, text: text }; +} +function decodeByte(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [8, 16, 16][size]; + var length = stream.readBits(characterCountSize); + for (var i = 0; i < length; i++) { + var b = stream.readBits(8); + bytes.push(b); + } + try { + text += decodeURIComponent(bytes.map(function (b) { return "%" + ("0" + b.toString(16)).substr(-2); }).join("")); + } + catch (_a) { + // failed to decode + } + return { bytes: bytes, text: text }; +} +function decodeKanji(stream, size) { + var bytes = []; + var text = ""; + var characterCountSize = [8, 10, 12][size]; + var length = stream.readBits(characterCountSize); + for (var i = 0; i < length; i++) { + var k = stream.readBits(13); + var c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0); + if (c < 0x1F00) { + c += 0x8140; + } + else { + c += 0xC140; + } + bytes.push(c >> 8, c & 0xFF); + text += String.fromCharCode(shiftJISTable_1.shiftJISTable[c]); + } + return { bytes: bytes, text: text }; +} +function decode(data, version) { + var _a, _b, _c, _d; + var stream = new BitStream_1.BitStream(data); + // There are 3 'sizes' based on the version. 1-9 is small (0), 10-26 is medium (1) and 27-40 is large (2). + var size = version <= 9 ? 0 : version <= 26 ? 1 : 2; + var result = { + text: "", + bytes: [], + chunks: [], + version: version, + }; + while (stream.available() >= 4) { + var mode = stream.readBits(4); + if (mode === ModeByte.Terminator) { + return result; + } + else if (mode === ModeByte.ECI) { + if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(7), + }); + } + else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(14), + }); + } + else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(21), + }); + } + else { + // ECI data seems corrupted + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: -1, + }); + } + } + else if (mode === ModeByte.Numeric) { + var numericResult = decodeNumeric(stream, size); + result.text += numericResult.text; + (_a = result.bytes).push.apply(_a, numericResult.bytes); + result.chunks.push({ + type: Mode.Numeric, + text: numericResult.text, + }); + } + else if (mode === ModeByte.Alphanumeric) { + var alphanumericResult = decodeAlphanumeric(stream, size); + result.text += alphanumericResult.text; + (_b = result.bytes).push.apply(_b, alphanumericResult.bytes); + result.chunks.push({ + type: Mode.Alphanumeric, + text: alphanumericResult.text, + }); + } + else if (mode === ModeByte.Byte) { + var byteResult = decodeByte(stream, size); + result.text += byteResult.text; + (_c = result.bytes).push.apply(_c, byteResult.bytes); + result.chunks.push({ + type: Mode.Byte, + bytes: byteResult.bytes, + text: byteResult.text, + }); + } + else if (mode === ModeByte.Kanji) { + var kanjiResult = decodeKanji(stream, size); + result.text += kanjiResult.text; + (_d = result.bytes).push.apply(_d, kanjiResult.bytes); + result.chunks.push({ + type: Mode.Kanji, + bytes: kanjiResult.bytes, + text: kanjiResult.text, + }); + } + } + // If there is no data left, or the remaining bits are all 0, then that counts as a termination marker + if (stream.available() === 0 || stream.readBits(stream.available()) === 0) { + return result; + } +} +exports.decode = decode; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// tslint:disable:no-bitwise +Object.defineProperty(exports, "__esModule", { value: true }); +var BitStream = /** @class */ (function () { + function BitStream(bytes) { + this.byteOffset = 0; + this.bitOffset = 0; + this.bytes = bytes; + } + BitStream.prototype.readBits = function (numBits) { + if (numBits < 1 || numBits > 32 || numBits > this.available()) { + throw new Error("Cannot read " + numBits.toString() + " bits"); + } + var result = 0; + // First, read remainder from current byte + if (this.bitOffset > 0) { + var bitsLeft = 8 - this.bitOffset; + var toRead = numBits < bitsLeft ? numBits : bitsLeft; + var bitsToNotRead = bitsLeft - toRead; + var mask = (0xFF >> (8 - toRead)) << bitsToNotRead; + result = (this.bytes[this.byteOffset] & mask) >> bitsToNotRead; + numBits -= toRead; + this.bitOffset += toRead; + if (this.bitOffset === 8) { + this.bitOffset = 0; + this.byteOffset++; + } + } + // Next read whole bytes + if (numBits > 0) { + while (numBits >= 8) { + result = (result << 8) | (this.bytes[this.byteOffset] & 0xFF); + this.byteOffset++; + numBits -= 8; + } + // Finally read a partial byte + if (numBits > 0) { + var bitsToNotRead = 8 - numBits; + var mask = (0xFF >> bitsToNotRead) << bitsToNotRead; + result = (result << numBits) | ((this.bytes[this.byteOffset] & mask) >> bitsToNotRead); + this.bitOffset += numBits; + } + } + return result; + }; + BitStream.prototype.available = function () { + return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset; + }; + return BitStream; +}()); +exports.BitStream = BitStream; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.shiftJISTable = { + 0x20: 0x0020, + 0x21: 0x0021, + 0x22: 0x0022, + 0x23: 0x0023, + 0x24: 0x0024, + 0x25: 0x0025, + 0x26: 0x0026, + 0x27: 0x0027, + 0x28: 0x0028, + 0x29: 0x0029, + 0x2A: 0x002A, + 0x2B: 0x002B, + 0x2C: 0x002C, + 0x2D: 0x002D, + 0x2E: 0x002E, + 0x2F: 0x002F, + 0x30: 0x0030, + 0x31: 0x0031, + 0x32: 0x0032, + 0x33: 0x0033, + 0x34: 0x0034, + 0x35: 0x0035, + 0x36: 0x0036, + 0x37: 0x0037, + 0x38: 0x0038, + 0x39: 0x0039, + 0x3A: 0x003A, + 0x3B: 0x003B, + 0x3C: 0x003C, + 0x3D: 0x003D, + 0x3E: 0x003E, + 0x3F: 0x003F, + 0x40: 0x0040, + 0x41: 0x0041, + 0x42: 0x0042, + 0x43: 0x0043, + 0x44: 0x0044, + 0x45: 0x0045, + 0x46: 0x0046, + 0x47: 0x0047, + 0x48: 0x0048, + 0x49: 0x0049, + 0x4A: 0x004A, + 0x4B: 0x004B, + 0x4C: 0x004C, + 0x4D: 0x004D, + 0x4E: 0x004E, + 0x4F: 0x004F, + 0x50: 0x0050, + 0x51: 0x0051, + 0x52: 0x0052, + 0x53: 0x0053, + 0x54: 0x0054, + 0x55: 0x0055, + 0x56: 0x0056, + 0x57: 0x0057, + 0x58: 0x0058, + 0x59: 0x0059, + 0x5A: 0x005A, + 0x5B: 0x005B, + 0x5C: 0x00A5, + 0x5D: 0x005D, + 0x5E: 0x005E, + 0x5F: 0x005F, + 0x60: 0x0060, + 0x61: 0x0061, + 0x62: 0x0062, + 0x63: 0x0063, + 0x64: 0x0064, + 0x65: 0x0065, + 0x66: 0x0066, + 0x67: 0x0067, + 0x68: 0x0068, + 0x69: 0x0069, + 0x6A: 0x006A, + 0x6B: 0x006B, + 0x6C: 0x006C, + 0x6D: 0x006D, + 0x6E: 0x006E, + 0x6F: 0x006F, + 0x70: 0x0070, + 0x71: 0x0071, + 0x72: 0x0072, + 0x73: 0x0073, + 0x74: 0x0074, + 0x75: 0x0075, + 0x76: 0x0076, + 0x77: 0x0077, + 0x78: 0x0078, + 0x79: 0x0079, + 0x7A: 0x007A, + 0x7B: 0x007B, + 0x7C: 0x007C, + 0x7D: 0x007D, + 0x7E: 0x203E, + 0x8140: 0x3000, + 0x8141: 0x3001, + 0x8142: 0x3002, + 0x8143: 0xFF0C, + 0x8144: 0xFF0E, + 0x8145: 0x30FB, + 0x8146: 0xFF1A, + 0x8147: 0xFF1B, + 0x8148: 0xFF1F, + 0x8149: 0xFF01, + 0x814A: 0x309B, + 0x814B: 0x309C, + 0x814C: 0x00B4, + 0x814D: 0xFF40, + 0x814E: 0x00A8, + 0x814F: 0xFF3E, + 0x8150: 0xFFE3, + 0x8151: 0xFF3F, + 0x8152: 0x30FD, + 0x8153: 0x30FE, + 0x8154: 0x309D, + 0x8155: 0x309E, + 0x8156: 0x3003, + 0x8157: 0x4EDD, + 0x8158: 0x3005, + 0x8159: 0x3006, + 0x815A: 0x3007, + 0x815B: 0x30FC, + 0x815C: 0x2015, + 0x815D: 0x2010, + 0x815E: 0xFF0F, + 0x815F: 0x005C, + 0x8160: 0x301C, + 0x8161: 0x2016, + 0x8162: 0xFF5C, + 0x8163: 0x2026, + 0x8164: 0x2025, + 0x8165: 0x2018, + 0x8166: 0x2019, + 0x8167: 0x201C, + 0x8168: 0x201D, + 0x8169: 0xFF08, + 0x816A: 0xFF09, + 0x816B: 0x3014, + 0x816C: 0x3015, + 0x816D: 0xFF3B, + 0x816E: 0xFF3D, + 0x816F: 0xFF5B, + 0x8170: 0xFF5D, + 0x8171: 0x3008, + 0x8172: 0x3009, + 0x8173: 0x300A, + 0x8174: 0x300B, + 0x8175: 0x300C, + 0x8176: 0x300D, + 0x8177: 0x300E, + 0x8178: 0x300F, + 0x8179: 0x3010, + 0x817A: 0x3011, + 0x817B: 0xFF0B, + 0x817C: 0x2212, + 0x817D: 0x00B1, + 0x817E: 0x00D7, + 0x8180: 0x00F7, + 0x8181: 0xFF1D, + 0x8182: 0x2260, + 0x8183: 0xFF1C, + 0x8184: 0xFF1E, + 0x8185: 0x2266, + 0x8186: 0x2267, + 0x8187: 0x221E, + 0x8188: 0x2234, + 0x8189: 0x2642, + 0x818A: 0x2640, + 0x818B: 0x00B0, + 0x818C: 0x2032, + 0x818D: 0x2033, + 0x818E: 0x2103, + 0x818F: 0xFFE5, + 0x8190: 0xFF04, + 0x8191: 0x00A2, + 0x8192: 0x00A3, + 0x8193: 0xFF05, + 0x8194: 0xFF03, + 0x8195: 0xFF06, + 0x8196: 0xFF0A, + 0x8197: 0xFF20, + 0x8198: 0x00A7, + 0x8199: 0x2606, + 0x819A: 0x2605, + 0x819B: 0x25CB, + 0x819C: 0x25CF, + 0x819D: 0x25CE, + 0x819E: 0x25C7, + 0x819F: 0x25C6, + 0x81A0: 0x25A1, + 0x81A1: 0x25A0, + 0x81A2: 0x25B3, + 0x81A3: 0x25B2, + 0x81A4: 0x25BD, + 0x81A5: 0x25BC, + 0x81A6: 0x203B, + 0x81A7: 0x3012, + 0x81A8: 0x2192, + 0x81A9: 0x2190, + 0x81AA: 0x2191, + 0x81AB: 0x2193, + 0x81AC: 0x3013, + 0x81B8: 0x2208, + 0x81B9: 0x220B, + 0x81BA: 0x2286, + 0x81BB: 0x2287, + 0x81BC: 0x2282, + 0x81BD: 0x2283, + 0x81BE: 0x222A, + 0x81BF: 0x2229, + 0x81C8: 0x2227, + 0x81C9: 0x2228, + 0x81CA: 0x00AC, + 0x81CB: 0x21D2, + 0x81CC: 0x21D4, + 0x81CD: 0x2200, + 0x81CE: 0x2203, + 0x81DA: 0x2220, + 0x81DB: 0x22A5, + 0x81DC: 0x2312, + 0x81DD: 0x2202, + 0x81DE: 0x2207, + 0x81DF: 0x2261, + 0x81E0: 0x2252, + 0x81E1: 0x226A, + 0x81E2: 0x226B, + 0x81E3: 0x221A, + 0x81E4: 0x223D, + 0x81E5: 0x221D, + 0x81E6: 0x2235, + 0x81E7: 0x222B, + 0x81E8: 0x222C, + 0x81F0: 0x212B, + 0x81F1: 0x2030, + 0x81F2: 0x266F, + 0x81F3: 0x266D, + 0x81F4: 0x266A, + 0x81F5: 0x2020, + 0x81F6: 0x2021, + 0x81F7: 0x00B6, + 0x81FC: 0x25EF, + 0x824F: 0xFF10, + 0x8250: 0xFF11, + 0x8251: 0xFF12, + 0x8252: 0xFF13, + 0x8253: 0xFF14, + 0x8254: 0xFF15, + 0x8255: 0xFF16, + 0x8256: 0xFF17, + 0x8257: 0xFF18, + 0x8258: 0xFF19, + 0x8260: 0xFF21, + 0x8261: 0xFF22, + 0x8262: 0xFF23, + 0x8263: 0xFF24, + 0x8264: 0xFF25, + 0x8265: 0xFF26, + 0x8266: 0xFF27, + 0x8267: 0xFF28, + 0x8268: 0xFF29, + 0x8269: 0xFF2A, + 0x826A: 0xFF2B, + 0x826B: 0xFF2C, + 0x826C: 0xFF2D, + 0x826D: 0xFF2E, + 0x826E: 0xFF2F, + 0x826F: 0xFF30, + 0x8270: 0xFF31, + 0x8271: 0xFF32, + 0x8272: 0xFF33, + 0x8273: 0xFF34, + 0x8274: 0xFF35, + 0x8275: 0xFF36, + 0x8276: 0xFF37, + 0x8277: 0xFF38, + 0x8278: 0xFF39, + 0x8279: 0xFF3A, + 0x8281: 0xFF41, + 0x8282: 0xFF42, + 0x8283: 0xFF43, + 0x8284: 0xFF44, + 0x8285: 0xFF45, + 0x8286: 0xFF46, + 0x8287: 0xFF47, + 0x8288: 0xFF48, + 0x8289: 0xFF49, + 0x828A: 0xFF4A, + 0x828B: 0xFF4B, + 0x828C: 0xFF4C, + 0x828D: 0xFF4D, + 0x828E: 0xFF4E, + 0x828F: 0xFF4F, + 0x8290: 0xFF50, + 0x8291: 0xFF51, + 0x8292: 0xFF52, + 0x8293: 0xFF53, + 0x8294: 0xFF54, + 0x8295: 0xFF55, + 0x8296: 0xFF56, + 0x8297: 0xFF57, + 0x8298: 0xFF58, + 0x8299: 0xFF59, + 0x829A: 0xFF5A, + 0x829F: 0x3041, + 0x82A0: 0x3042, + 0x82A1: 0x3043, + 0x82A2: 0x3044, + 0x82A3: 0x3045, + 0x82A4: 0x3046, + 0x82A5: 0x3047, + 0x82A6: 0x3048, + 0x82A7: 0x3049, + 0x82A8: 0x304A, + 0x82A9: 0x304B, + 0x82AA: 0x304C, + 0x82AB: 0x304D, + 0x82AC: 0x304E, + 0x82AD: 0x304F, + 0x82AE: 0x3050, + 0x82AF: 0x3051, + 0x82B0: 0x3052, + 0x82B1: 0x3053, + 0x82B2: 0x3054, + 0x82B3: 0x3055, + 0x82B4: 0x3056, + 0x82B5: 0x3057, + 0x82B6: 0x3058, + 0x82B7: 0x3059, + 0x82B8: 0x305A, + 0x82B9: 0x305B, + 0x82BA: 0x305C, + 0x82BB: 0x305D, + 0x82BC: 0x305E, + 0x82BD: 0x305F, + 0x82BE: 0x3060, + 0x82BF: 0x3061, + 0x82C0: 0x3062, + 0x82C1: 0x3063, + 0x82C2: 0x3064, + 0x82C3: 0x3065, + 0x82C4: 0x3066, + 0x82C5: 0x3067, + 0x82C6: 0x3068, + 0x82C7: 0x3069, + 0x82C8: 0x306A, + 0x82C9: 0x306B, + 0x82CA: 0x306C, + 0x82CB: 0x306D, + 0x82CC: 0x306E, + 0x82CD: 0x306F, + 0x82CE: 0x3070, + 0x82CF: 0x3071, + 0x82D0: 0x3072, + 0x82D1: 0x3073, + 0x82D2: 0x3074, + 0x82D3: 0x3075, + 0x82D4: 0x3076, + 0x82D5: 0x3077, + 0x82D6: 0x3078, + 0x82D7: 0x3079, + 0x82D8: 0x307A, + 0x82D9: 0x307B, + 0x82DA: 0x307C, + 0x82DB: 0x307D, + 0x82DC: 0x307E, + 0x82DD: 0x307F, + 0x82DE: 0x3080, + 0x82DF: 0x3081, + 0x82E0: 0x3082, + 0x82E1: 0x3083, + 0x82E2: 0x3084, + 0x82E3: 0x3085, + 0x82E4: 0x3086, + 0x82E5: 0x3087, + 0x82E6: 0x3088, + 0x82E7: 0x3089, + 0x82E8: 0x308A, + 0x82E9: 0x308B, + 0x82EA: 0x308C, + 0x82EB: 0x308D, + 0x82EC: 0x308E, + 0x82ED: 0x308F, + 0x82EE: 0x3090, + 0x82EF: 0x3091, + 0x82F0: 0x3092, + 0x82F1: 0x3093, + 0x8340: 0x30A1, + 0x8341: 0x30A2, + 0x8342: 0x30A3, + 0x8343: 0x30A4, + 0x8344: 0x30A5, + 0x8345: 0x30A6, + 0x8346: 0x30A7, + 0x8347: 0x30A8, + 0x8348: 0x30A9, + 0x8349: 0x30AA, + 0x834A: 0x30AB, + 0x834B: 0x30AC, + 0x834C: 0x30AD, + 0x834D: 0x30AE, + 0x834E: 0x30AF, + 0x834F: 0x30B0, + 0x8350: 0x30B1, + 0x8351: 0x30B2, + 0x8352: 0x30B3, + 0x8353: 0x30B4, + 0x8354: 0x30B5, + 0x8355: 0x30B6, + 0x8356: 0x30B7, + 0x8357: 0x30B8, + 0x8358: 0x30B9, + 0x8359: 0x30BA, + 0x835A: 0x30BB, + 0x835B: 0x30BC, + 0x835C: 0x30BD, + 0x835D: 0x30BE, + 0x835E: 0x30BF, + 0x835F: 0x30C0, + 0x8360: 0x30C1, + 0x8361: 0x30C2, + 0x8362: 0x30C3, + 0x8363: 0x30C4, + 0x8364: 0x30C5, + 0x8365: 0x30C6, + 0x8366: 0x30C7, + 0x8367: 0x30C8, + 0x8368: 0x30C9, + 0x8369: 0x30CA, + 0x836A: 0x30CB, + 0x836B: 0x30CC, + 0x836C: 0x30CD, + 0x836D: 0x30CE, + 0x836E: 0x30CF, + 0x836F: 0x30D0, + 0x8370: 0x30D1, + 0x8371: 0x30D2, + 0x8372: 0x30D3, + 0x8373: 0x30D4, + 0x8374: 0x30D5, + 0x8375: 0x30D6, + 0x8376: 0x30D7, + 0x8377: 0x30D8, + 0x8378: 0x30D9, + 0x8379: 0x30DA, + 0x837A: 0x30DB, + 0x837B: 0x30DC, + 0x837C: 0x30DD, + 0x837D: 0x30DE, + 0x837E: 0x30DF, + 0x8380: 0x30E0, + 0x8381: 0x30E1, + 0x8382: 0x30E2, + 0x8383: 0x30E3, + 0x8384: 0x30E4, + 0x8385: 0x30E5, + 0x8386: 0x30E6, + 0x8387: 0x30E7, + 0x8388: 0x30E8, + 0x8389: 0x30E9, + 0x838A: 0x30EA, + 0x838B: 0x30EB, + 0x838C: 0x30EC, + 0x838D: 0x30ED, + 0x838E: 0x30EE, + 0x838F: 0x30EF, + 0x8390: 0x30F0, + 0x8391: 0x30F1, + 0x8392: 0x30F2, + 0x8393: 0x30F3, + 0x8394: 0x30F4, + 0x8395: 0x30F5, + 0x8396: 0x30F6, + 0x839F: 0x0391, + 0x83A0: 0x0392, + 0x83A1: 0x0393, + 0x83A2: 0x0394, + 0x83A3: 0x0395, + 0x83A4: 0x0396, + 0x83A5: 0x0397, + 0x83A6: 0x0398, + 0x83A7: 0x0399, + 0x83A8: 0x039A, + 0x83A9: 0x039B, + 0x83AA: 0x039C, + 0x83AB: 0x039D, + 0x83AC: 0x039E, + 0x83AD: 0x039F, + 0x83AE: 0x03A0, + 0x83AF: 0x03A1, + 0x83B0: 0x03A3, + 0x83B1: 0x03A4, + 0x83B2: 0x03A5, + 0x83B3: 0x03A6, + 0x83B4: 0x03A7, + 0x83B5: 0x03A8, + 0x83B6: 0x03A9, + 0x83BF: 0x03B1, + 0x83C0: 0x03B2, + 0x83C1: 0x03B3, + 0x83C2: 0x03B4, + 0x83C3: 0x03B5, + 0x83C4: 0x03B6, + 0x83C5: 0x03B7, + 0x83C6: 0x03B8, + 0x83C7: 0x03B9, + 0x83C8: 0x03BA, + 0x83C9: 0x03BB, + 0x83CA: 0x03BC, + 0x83CB: 0x03BD, + 0x83CC: 0x03BE, + 0x83CD: 0x03BF, + 0x83CE: 0x03C0, + 0x83CF: 0x03C1, + 0x83D0: 0x03C3, + 0x83D1: 0x03C4, + 0x83D2: 0x03C5, + 0x83D3: 0x03C6, + 0x83D4: 0x03C7, + 0x83D5: 0x03C8, + 0x83D6: 0x03C9, + 0x8440: 0x0410, + 0x8441: 0x0411, + 0x8442: 0x0412, + 0x8443: 0x0413, + 0x8444: 0x0414, + 0x8445: 0x0415, + 0x8446: 0x0401, + 0x8447: 0x0416, + 0x8448: 0x0417, + 0x8449: 0x0418, + 0x844A: 0x0419, + 0x844B: 0x041A, + 0x844C: 0x041B, + 0x844D: 0x041C, + 0x844E: 0x041D, + 0x844F: 0x041E, + 0x8450: 0x041F, + 0x8451: 0x0420, + 0x8452: 0x0421, + 0x8453: 0x0422, + 0x8454: 0x0423, + 0x8455: 0x0424, + 0x8456: 0x0425, + 0x8457: 0x0426, + 0x8458: 0x0427, + 0x8459: 0x0428, + 0x845A: 0x0429, + 0x845B: 0x042A, + 0x845C: 0x042B, + 0x845D: 0x042C, + 0x845E: 0x042D, + 0x845F: 0x042E, + 0x8460: 0x042F, + 0x8470: 0x0430, + 0x8471: 0x0431, + 0x8472: 0x0432, + 0x8473: 0x0433, + 0x8474: 0x0434, + 0x8475: 0x0435, + 0x8476: 0x0451, + 0x8477: 0x0436, + 0x8478: 0x0437, + 0x8479: 0x0438, + 0x847A: 0x0439, + 0x847B: 0x043A, + 0x847C: 0x043B, + 0x847D: 0x043C, + 0x847E: 0x043D, + 0x8480: 0x043E, + 0x8481: 0x043F, + 0x8482: 0x0440, + 0x8483: 0x0441, + 0x8484: 0x0442, + 0x8485: 0x0443, + 0x8486: 0x0444, + 0x8487: 0x0445, + 0x8488: 0x0446, + 0x8489: 0x0447, + 0x848A: 0x0448, + 0x848B: 0x0449, + 0x848C: 0x044A, + 0x848D: 0x044B, + 0x848E: 0x044C, + 0x848F: 0x044D, + 0x8490: 0x044E, + 0x8491: 0x044F, + 0x849F: 0x2500, + 0x84A0: 0x2502, + 0x84A1: 0x250C, + 0x84A2: 0x2510, + 0x84A3: 0x2518, + 0x84A4: 0x2514, + 0x84A5: 0x251C, + 0x84A6: 0x252C, + 0x84A7: 0x2524, + 0x84A8: 0x2534, + 0x84A9: 0x253C, + 0x84AA: 0x2501, + 0x84AB: 0x2503, + 0x84AC: 0x250F, + 0x84AD: 0x2513, + 0x84AE: 0x251B, + 0x84AF: 0x2517, + 0x84B0: 0x2523, + 0x84B1: 0x2533, + 0x84B2: 0x252B, + 0x84B3: 0x253B, + 0x84B4: 0x254B, + 0x84B5: 0x2520, + 0x84B6: 0x252F, + 0x84B7: 0x2528, + 0x84B8: 0x2537, + 0x84B9: 0x253F, + 0x84BA: 0x251D, + 0x84BB: 0x2530, + 0x84BC: 0x2525, + 0x84BD: 0x2538, + 0x84BE: 0x2542, + 0x889F: 0x4E9C, + 0x88A0: 0x5516, + 0x88A1: 0x5A03, + 0x88A2: 0x963F, + 0x88A3: 0x54C0, + 0x88A4: 0x611B, + 0x88A5: 0x6328, + 0x88A6: 0x59F6, + 0x88A7: 0x9022, + 0x88A8: 0x8475, + 0x88A9: 0x831C, + 0x88AA: 0x7A50, + 0x88AB: 0x60AA, + 0x88AC: 0x63E1, + 0x88AD: 0x6E25, + 0x88AE: 0x65ED, + 0x88AF: 0x8466, + 0x88B0: 0x82A6, + 0x88B1: 0x9BF5, + 0x88B2: 0x6893, + 0x88B3: 0x5727, + 0x88B4: 0x65A1, + 0x88B5: 0x6271, + 0x88B6: 0x5B9B, + 0x88B7: 0x59D0, + 0x88B8: 0x867B, + 0x88B9: 0x98F4, + 0x88BA: 0x7D62, + 0x88BB: 0x7DBE, + 0x88BC: 0x9B8E, + 0x88BD: 0x6216, + 0x88BE: 0x7C9F, + 0x88BF: 0x88B7, + 0x88C0: 0x5B89, + 0x88C1: 0x5EB5, + 0x88C2: 0x6309, + 0x88C3: 0x6697, + 0x88C4: 0x6848, + 0x88C5: 0x95C7, + 0x88C6: 0x978D, + 0x88C7: 0x674F, + 0x88C8: 0x4EE5, + 0x88C9: 0x4F0A, + 0x88CA: 0x4F4D, + 0x88CB: 0x4F9D, + 0x88CC: 0x5049, + 0x88CD: 0x56F2, + 0x88CE: 0x5937, + 0x88CF: 0x59D4, + 0x88D0: 0x5A01, + 0x88D1: 0x5C09, + 0x88D2: 0x60DF, + 0x88D3: 0x610F, + 0x88D4: 0x6170, + 0x88D5: 0x6613, + 0x88D6: 0x6905, + 0x88D7: 0x70BA, + 0x88D8: 0x754F, + 0x88D9: 0x7570, + 0x88DA: 0x79FB, + 0x88DB: 0x7DAD, + 0x88DC: 0x7DEF, + 0x88DD: 0x80C3, + 0x88DE: 0x840E, + 0x88DF: 0x8863, + 0x88E0: 0x8B02, + 0x88E1: 0x9055, + 0x88E2: 0x907A, + 0x88E3: 0x533B, + 0x88E4: 0x4E95, + 0x88E5: 0x4EA5, + 0x88E6: 0x57DF, + 0x88E7: 0x80B2, + 0x88E8: 0x90C1, + 0x88E9: 0x78EF, + 0x88EA: 0x4E00, + 0x88EB: 0x58F1, + 0x88EC: 0x6EA2, + 0x88ED: 0x9038, + 0x88EE: 0x7A32, + 0x88EF: 0x8328, + 0x88F0: 0x828B, + 0x88F1: 0x9C2F, + 0x88F2: 0x5141, + 0x88F3: 0x5370, + 0x88F4: 0x54BD, + 0x88F5: 0x54E1, + 0x88F6: 0x56E0, + 0x88F7: 0x59FB, + 0x88F8: 0x5F15, + 0x88F9: 0x98F2, + 0x88FA: 0x6DEB, + 0x88FB: 0x80E4, + 0x88FC: 0x852D, + 0x8940: 0x9662, + 0x8941: 0x9670, + 0x8942: 0x96A0, + 0x8943: 0x97FB, + 0x8944: 0x540B, + 0x8945: 0x53F3, + 0x8946: 0x5B87, + 0x8947: 0x70CF, + 0x8948: 0x7FBD, + 0x8949: 0x8FC2, + 0x894A: 0x96E8, + 0x894B: 0x536F, + 0x894C: 0x9D5C, + 0x894D: 0x7ABA, + 0x894E: 0x4E11, + 0x894F: 0x7893, + 0x8950: 0x81FC, + 0x8951: 0x6E26, + 0x8952: 0x5618, + 0x8953: 0x5504, + 0x8954: 0x6B1D, + 0x8955: 0x851A, + 0x8956: 0x9C3B, + 0x8957: 0x59E5, + 0x8958: 0x53A9, + 0x8959: 0x6D66, + 0x895A: 0x74DC, + 0x895B: 0x958F, + 0x895C: 0x5642, + 0x895D: 0x4E91, + 0x895E: 0x904B, + 0x895F: 0x96F2, + 0x8960: 0x834F, + 0x8961: 0x990C, + 0x8962: 0x53E1, + 0x8963: 0x55B6, + 0x8964: 0x5B30, + 0x8965: 0x5F71, + 0x8966: 0x6620, + 0x8967: 0x66F3, + 0x8968: 0x6804, + 0x8969: 0x6C38, + 0x896A: 0x6CF3, + 0x896B: 0x6D29, + 0x896C: 0x745B, + 0x896D: 0x76C8, + 0x896E: 0x7A4E, + 0x896F: 0x9834, + 0x8970: 0x82F1, + 0x8971: 0x885B, + 0x8972: 0x8A60, + 0x8973: 0x92ED, + 0x8974: 0x6DB2, + 0x8975: 0x75AB, + 0x8976: 0x76CA, + 0x8977: 0x99C5, + 0x8978: 0x60A6, + 0x8979: 0x8B01, + 0x897A: 0x8D8A, + 0x897B: 0x95B2, + 0x897C: 0x698E, + 0x897D: 0x53AD, + 0x897E: 0x5186, + 0x8980: 0x5712, + 0x8981: 0x5830, + 0x8982: 0x5944, + 0x8983: 0x5BB4, + 0x8984: 0x5EF6, + 0x8985: 0x6028, + 0x8986: 0x63A9, + 0x8987: 0x63F4, + 0x8988: 0x6CBF, + 0x8989: 0x6F14, + 0x898A: 0x708E, + 0x898B: 0x7114, + 0x898C: 0x7159, + 0x898D: 0x71D5, + 0x898E: 0x733F, + 0x898F: 0x7E01, + 0x8990: 0x8276, + 0x8991: 0x82D1, + 0x8992: 0x8597, + 0x8993: 0x9060, + 0x8994: 0x925B, + 0x8995: 0x9D1B, + 0x8996: 0x5869, + 0x8997: 0x65BC, + 0x8998: 0x6C5A, + 0x8999: 0x7525, + 0x899A: 0x51F9, + 0x899B: 0x592E, + 0x899C: 0x5965, + 0x899D: 0x5F80, + 0x899E: 0x5FDC, + 0x899F: 0x62BC, + 0x89A0: 0x65FA, + 0x89A1: 0x6A2A, + 0x89A2: 0x6B27, + 0x89A3: 0x6BB4, + 0x89A4: 0x738B, + 0x89A5: 0x7FC1, + 0x89A6: 0x8956, + 0x89A7: 0x9D2C, + 0x89A8: 0x9D0E, + 0x89A9: 0x9EC4, + 0x89AA: 0x5CA1, + 0x89AB: 0x6C96, + 0x89AC: 0x837B, + 0x89AD: 0x5104, + 0x89AE: 0x5C4B, + 0x89AF: 0x61B6, + 0x89B0: 0x81C6, + 0x89B1: 0x6876, + 0x89B2: 0x7261, + 0x89B3: 0x4E59, + 0x89B4: 0x4FFA, + 0x89B5: 0x5378, + 0x89B6: 0x6069, + 0x89B7: 0x6E29, + 0x89B8: 0x7A4F, + 0x89B9: 0x97F3, + 0x89BA: 0x4E0B, + 0x89BB: 0x5316, + 0x89BC: 0x4EEE, + 0x89BD: 0x4F55, + 0x89BE: 0x4F3D, + 0x89BF: 0x4FA1, + 0x89C0: 0x4F73, + 0x89C1: 0x52A0, + 0x89C2: 0x53EF, + 0x89C3: 0x5609, + 0x89C4: 0x590F, + 0x89C5: 0x5AC1, + 0x89C6: 0x5BB6, + 0x89C7: 0x5BE1, + 0x89C8: 0x79D1, + 0x89C9: 0x6687, + 0x89CA: 0x679C, + 0x89CB: 0x67B6, + 0x89CC: 0x6B4C, + 0x89CD: 0x6CB3, + 0x89CE: 0x706B, + 0x89CF: 0x73C2, + 0x89D0: 0x798D, + 0x89D1: 0x79BE, + 0x89D2: 0x7A3C, + 0x89D3: 0x7B87, + 0x89D4: 0x82B1, + 0x89D5: 0x82DB, + 0x89D6: 0x8304, + 0x89D7: 0x8377, + 0x89D8: 0x83EF, + 0x89D9: 0x83D3, + 0x89DA: 0x8766, + 0x89DB: 0x8AB2, + 0x89DC: 0x5629, + 0x89DD: 0x8CA8, + 0x89DE: 0x8FE6, + 0x89DF: 0x904E, + 0x89E0: 0x971E, + 0x89E1: 0x868A, + 0x89E2: 0x4FC4, + 0x89E3: 0x5CE8, + 0x89E4: 0x6211, + 0x89E5: 0x7259, + 0x89E6: 0x753B, + 0x89E7: 0x81E5, + 0x89E8: 0x82BD, + 0x89E9: 0x86FE, + 0x89EA: 0x8CC0, + 0x89EB: 0x96C5, + 0x89EC: 0x9913, + 0x89ED: 0x99D5, + 0x89EE: 0x4ECB, + 0x89EF: 0x4F1A, + 0x89F0: 0x89E3, + 0x89F1: 0x56DE, + 0x89F2: 0x584A, + 0x89F3: 0x58CA, + 0x89F4: 0x5EFB, + 0x89F5: 0x5FEB, + 0x89F6: 0x602A, + 0x89F7: 0x6094, + 0x89F8: 0x6062, + 0x89F9: 0x61D0, + 0x89FA: 0x6212, + 0x89FB: 0x62D0, + 0x89FC: 0x6539, + 0x8A40: 0x9B41, + 0x8A41: 0x6666, + 0x8A42: 0x68B0, + 0x8A43: 0x6D77, + 0x8A44: 0x7070, + 0x8A45: 0x754C, + 0x8A46: 0x7686, + 0x8A47: 0x7D75, + 0x8A48: 0x82A5, + 0x8A49: 0x87F9, + 0x8A4A: 0x958B, + 0x8A4B: 0x968E, + 0x8A4C: 0x8C9D, + 0x8A4D: 0x51F1, + 0x8A4E: 0x52BE, + 0x8A4F: 0x5916, + 0x8A50: 0x54B3, + 0x8A51: 0x5BB3, + 0x8A52: 0x5D16, + 0x8A53: 0x6168, + 0x8A54: 0x6982, + 0x8A55: 0x6DAF, + 0x8A56: 0x788D, + 0x8A57: 0x84CB, + 0x8A58: 0x8857, + 0x8A59: 0x8A72, + 0x8A5A: 0x93A7, + 0x8A5B: 0x9AB8, + 0x8A5C: 0x6D6C, + 0x8A5D: 0x99A8, + 0x8A5E: 0x86D9, + 0x8A5F: 0x57A3, + 0x8A60: 0x67FF, + 0x8A61: 0x86CE, + 0x8A62: 0x920E, + 0x8A63: 0x5283, + 0x8A64: 0x5687, + 0x8A65: 0x5404, + 0x8A66: 0x5ED3, + 0x8A67: 0x62E1, + 0x8A68: 0x64B9, + 0x8A69: 0x683C, + 0x8A6A: 0x6838, + 0x8A6B: 0x6BBB, + 0x8A6C: 0x7372, + 0x8A6D: 0x78BA, + 0x8A6E: 0x7A6B, + 0x8A6F: 0x899A, + 0x8A70: 0x89D2, + 0x8A71: 0x8D6B, + 0x8A72: 0x8F03, + 0x8A73: 0x90ED, + 0x8A74: 0x95A3, + 0x8A75: 0x9694, + 0x8A76: 0x9769, + 0x8A77: 0x5B66, + 0x8A78: 0x5CB3, + 0x8A79: 0x697D, + 0x8A7A: 0x984D, + 0x8A7B: 0x984E, + 0x8A7C: 0x639B, + 0x8A7D: 0x7B20, + 0x8A7E: 0x6A2B, + 0x8A80: 0x6A7F, + 0x8A81: 0x68B6, + 0x8A82: 0x9C0D, + 0x8A83: 0x6F5F, + 0x8A84: 0x5272, + 0x8A85: 0x559D, + 0x8A86: 0x6070, + 0x8A87: 0x62EC, + 0x8A88: 0x6D3B, + 0x8A89: 0x6E07, + 0x8A8A: 0x6ED1, + 0x8A8B: 0x845B, + 0x8A8C: 0x8910, + 0x8A8D: 0x8F44, + 0x8A8E: 0x4E14, + 0x8A8F: 0x9C39, + 0x8A90: 0x53F6, + 0x8A91: 0x691B, + 0x8A92: 0x6A3A, + 0x8A93: 0x9784, + 0x8A94: 0x682A, + 0x8A95: 0x515C, + 0x8A96: 0x7AC3, + 0x8A97: 0x84B2, + 0x8A98: 0x91DC, + 0x8A99: 0x938C, + 0x8A9A: 0x565B, + 0x8A9B: 0x9D28, + 0x8A9C: 0x6822, + 0x8A9D: 0x8305, + 0x8A9E: 0x8431, + 0x8A9F: 0x7CA5, + 0x8AA0: 0x5208, + 0x8AA1: 0x82C5, + 0x8AA2: 0x74E6, + 0x8AA3: 0x4E7E, + 0x8AA4: 0x4F83, + 0x8AA5: 0x51A0, + 0x8AA6: 0x5BD2, + 0x8AA7: 0x520A, + 0x8AA8: 0x52D8, + 0x8AA9: 0x52E7, + 0x8AAA: 0x5DFB, + 0x8AAB: 0x559A, + 0x8AAC: 0x582A, + 0x8AAD: 0x59E6, + 0x8AAE: 0x5B8C, + 0x8AAF: 0x5B98, + 0x8AB0: 0x5BDB, + 0x8AB1: 0x5E72, + 0x8AB2: 0x5E79, + 0x8AB3: 0x60A3, + 0x8AB4: 0x611F, + 0x8AB5: 0x6163, + 0x8AB6: 0x61BE, + 0x8AB7: 0x63DB, + 0x8AB8: 0x6562, + 0x8AB9: 0x67D1, + 0x8ABA: 0x6853, + 0x8ABB: 0x68FA, + 0x8ABC: 0x6B3E, + 0x8ABD: 0x6B53, + 0x8ABE: 0x6C57, + 0x8ABF: 0x6F22, + 0x8AC0: 0x6F97, + 0x8AC1: 0x6F45, + 0x8AC2: 0x74B0, + 0x8AC3: 0x7518, + 0x8AC4: 0x76E3, + 0x8AC5: 0x770B, + 0x8AC6: 0x7AFF, + 0x8AC7: 0x7BA1, + 0x8AC8: 0x7C21, + 0x8AC9: 0x7DE9, + 0x8ACA: 0x7F36, + 0x8ACB: 0x7FF0, + 0x8ACC: 0x809D, + 0x8ACD: 0x8266, + 0x8ACE: 0x839E, + 0x8ACF: 0x89B3, + 0x8AD0: 0x8ACC, + 0x8AD1: 0x8CAB, + 0x8AD2: 0x9084, + 0x8AD3: 0x9451, + 0x8AD4: 0x9593, + 0x8AD5: 0x9591, + 0x8AD6: 0x95A2, + 0x8AD7: 0x9665, + 0x8AD8: 0x97D3, + 0x8AD9: 0x9928, + 0x8ADA: 0x8218, + 0x8ADB: 0x4E38, + 0x8ADC: 0x542B, + 0x8ADD: 0x5CB8, + 0x8ADE: 0x5DCC, + 0x8ADF: 0x73A9, + 0x8AE0: 0x764C, + 0x8AE1: 0x773C, + 0x8AE2: 0x5CA9, + 0x8AE3: 0x7FEB, + 0x8AE4: 0x8D0B, + 0x8AE5: 0x96C1, + 0x8AE6: 0x9811, + 0x8AE7: 0x9854, + 0x8AE8: 0x9858, + 0x8AE9: 0x4F01, + 0x8AEA: 0x4F0E, + 0x8AEB: 0x5371, + 0x8AEC: 0x559C, + 0x8AED: 0x5668, + 0x8AEE: 0x57FA, + 0x8AEF: 0x5947, + 0x8AF0: 0x5B09, + 0x8AF1: 0x5BC4, + 0x8AF2: 0x5C90, + 0x8AF3: 0x5E0C, + 0x8AF4: 0x5E7E, + 0x8AF5: 0x5FCC, + 0x8AF6: 0x63EE, + 0x8AF7: 0x673A, + 0x8AF8: 0x65D7, + 0x8AF9: 0x65E2, + 0x8AFA: 0x671F, + 0x8AFB: 0x68CB, + 0x8AFC: 0x68C4, + 0x8B40: 0x6A5F, + 0x8B41: 0x5E30, + 0x8B42: 0x6BC5, + 0x8B43: 0x6C17, + 0x8B44: 0x6C7D, + 0x8B45: 0x757F, + 0x8B46: 0x7948, + 0x8B47: 0x5B63, + 0x8B48: 0x7A00, + 0x8B49: 0x7D00, + 0x8B4A: 0x5FBD, + 0x8B4B: 0x898F, + 0x8B4C: 0x8A18, + 0x8B4D: 0x8CB4, + 0x8B4E: 0x8D77, + 0x8B4F: 0x8ECC, + 0x8B50: 0x8F1D, + 0x8B51: 0x98E2, + 0x8B52: 0x9A0E, + 0x8B53: 0x9B3C, + 0x8B54: 0x4E80, + 0x8B55: 0x507D, + 0x8B56: 0x5100, + 0x8B57: 0x5993, + 0x8B58: 0x5B9C, + 0x8B59: 0x622F, + 0x8B5A: 0x6280, + 0x8B5B: 0x64EC, + 0x8B5C: 0x6B3A, + 0x8B5D: 0x72A0, + 0x8B5E: 0x7591, + 0x8B5F: 0x7947, + 0x8B60: 0x7FA9, + 0x8B61: 0x87FB, + 0x8B62: 0x8ABC, + 0x8B63: 0x8B70, + 0x8B64: 0x63AC, + 0x8B65: 0x83CA, + 0x8B66: 0x97A0, + 0x8B67: 0x5409, + 0x8B68: 0x5403, + 0x8B69: 0x55AB, + 0x8B6A: 0x6854, + 0x8B6B: 0x6A58, + 0x8B6C: 0x8A70, + 0x8B6D: 0x7827, + 0x8B6E: 0x6775, + 0x8B6F: 0x9ECD, + 0x8B70: 0x5374, + 0x8B71: 0x5BA2, + 0x8B72: 0x811A, + 0x8B73: 0x8650, + 0x8B74: 0x9006, + 0x8B75: 0x4E18, + 0x8B76: 0x4E45, + 0x8B77: 0x4EC7, + 0x8B78: 0x4F11, + 0x8B79: 0x53CA, + 0x8B7A: 0x5438, + 0x8B7B: 0x5BAE, + 0x8B7C: 0x5F13, + 0x8B7D: 0x6025, + 0x8B7E: 0x6551, + 0x8B80: 0x673D, + 0x8B81: 0x6C42, + 0x8B82: 0x6C72, + 0x8B83: 0x6CE3, + 0x8B84: 0x7078, + 0x8B85: 0x7403, + 0x8B86: 0x7A76, + 0x8B87: 0x7AAE, + 0x8B88: 0x7B08, + 0x8B89: 0x7D1A, + 0x8B8A: 0x7CFE, + 0x8B8B: 0x7D66, + 0x8B8C: 0x65E7, + 0x8B8D: 0x725B, + 0x8B8E: 0x53BB, + 0x8B8F: 0x5C45, + 0x8B90: 0x5DE8, + 0x8B91: 0x62D2, + 0x8B92: 0x62E0, + 0x8B93: 0x6319, + 0x8B94: 0x6E20, + 0x8B95: 0x865A, + 0x8B96: 0x8A31, + 0x8B97: 0x8DDD, + 0x8B98: 0x92F8, + 0x8B99: 0x6F01, + 0x8B9A: 0x79A6, + 0x8B9B: 0x9B5A, + 0x8B9C: 0x4EA8, + 0x8B9D: 0x4EAB, + 0x8B9E: 0x4EAC, + 0x8B9F: 0x4F9B, + 0x8BA0: 0x4FA0, + 0x8BA1: 0x50D1, + 0x8BA2: 0x5147, + 0x8BA3: 0x7AF6, + 0x8BA4: 0x5171, + 0x8BA5: 0x51F6, + 0x8BA6: 0x5354, + 0x8BA7: 0x5321, + 0x8BA8: 0x537F, + 0x8BA9: 0x53EB, + 0x8BAA: 0x55AC, + 0x8BAB: 0x5883, + 0x8BAC: 0x5CE1, + 0x8BAD: 0x5F37, + 0x8BAE: 0x5F4A, + 0x8BAF: 0x602F, + 0x8BB0: 0x6050, + 0x8BB1: 0x606D, + 0x8BB2: 0x631F, + 0x8BB3: 0x6559, + 0x8BB4: 0x6A4B, + 0x8BB5: 0x6CC1, + 0x8BB6: 0x72C2, + 0x8BB7: 0x72ED, + 0x8BB8: 0x77EF, + 0x8BB9: 0x80F8, + 0x8BBA: 0x8105, + 0x8BBB: 0x8208, + 0x8BBC: 0x854E, + 0x8BBD: 0x90F7, + 0x8BBE: 0x93E1, + 0x8BBF: 0x97FF, + 0x8BC0: 0x9957, + 0x8BC1: 0x9A5A, + 0x8BC2: 0x4EF0, + 0x8BC3: 0x51DD, + 0x8BC4: 0x5C2D, + 0x8BC5: 0x6681, + 0x8BC6: 0x696D, + 0x8BC7: 0x5C40, + 0x8BC8: 0x66F2, + 0x8BC9: 0x6975, + 0x8BCA: 0x7389, + 0x8BCB: 0x6850, + 0x8BCC: 0x7C81, + 0x8BCD: 0x50C5, + 0x8BCE: 0x52E4, + 0x8BCF: 0x5747, + 0x8BD0: 0x5DFE, + 0x8BD1: 0x9326, + 0x8BD2: 0x65A4, + 0x8BD3: 0x6B23, + 0x8BD4: 0x6B3D, + 0x8BD5: 0x7434, + 0x8BD6: 0x7981, + 0x8BD7: 0x79BD, + 0x8BD8: 0x7B4B, + 0x8BD9: 0x7DCA, + 0x8BDA: 0x82B9, + 0x8BDB: 0x83CC, + 0x8BDC: 0x887F, + 0x8BDD: 0x895F, + 0x8BDE: 0x8B39, + 0x8BDF: 0x8FD1, + 0x8BE0: 0x91D1, + 0x8BE1: 0x541F, + 0x8BE2: 0x9280, + 0x8BE3: 0x4E5D, + 0x8BE4: 0x5036, + 0x8BE5: 0x53E5, + 0x8BE6: 0x533A, + 0x8BE7: 0x72D7, + 0x8BE8: 0x7396, + 0x8BE9: 0x77E9, + 0x8BEA: 0x82E6, + 0x8BEB: 0x8EAF, + 0x8BEC: 0x99C6, + 0x8BED: 0x99C8, + 0x8BEE: 0x99D2, + 0x8BEF: 0x5177, + 0x8BF0: 0x611A, + 0x8BF1: 0x865E, + 0x8BF2: 0x55B0, + 0x8BF3: 0x7A7A, + 0x8BF4: 0x5076, + 0x8BF5: 0x5BD3, + 0x8BF6: 0x9047, + 0x8BF7: 0x9685, + 0x8BF8: 0x4E32, + 0x8BF9: 0x6ADB, + 0x8BFA: 0x91E7, + 0x8BFB: 0x5C51, + 0x8BFC: 0x5C48, + 0x8C40: 0x6398, + 0x8C41: 0x7A9F, + 0x8C42: 0x6C93, + 0x8C43: 0x9774, + 0x8C44: 0x8F61, + 0x8C45: 0x7AAA, + 0x8C46: 0x718A, + 0x8C47: 0x9688, + 0x8C48: 0x7C82, + 0x8C49: 0x6817, + 0x8C4A: 0x7E70, + 0x8C4B: 0x6851, + 0x8C4C: 0x936C, + 0x8C4D: 0x52F2, + 0x8C4E: 0x541B, + 0x8C4F: 0x85AB, + 0x8C50: 0x8A13, + 0x8C51: 0x7FA4, + 0x8C52: 0x8ECD, + 0x8C53: 0x90E1, + 0x8C54: 0x5366, + 0x8C55: 0x8888, + 0x8C56: 0x7941, + 0x8C57: 0x4FC2, + 0x8C58: 0x50BE, + 0x8C59: 0x5211, + 0x8C5A: 0x5144, + 0x8C5B: 0x5553, + 0x8C5C: 0x572D, + 0x8C5D: 0x73EA, + 0x8C5E: 0x578B, + 0x8C5F: 0x5951, + 0x8C60: 0x5F62, + 0x8C61: 0x5F84, + 0x8C62: 0x6075, + 0x8C63: 0x6176, + 0x8C64: 0x6167, + 0x8C65: 0x61A9, + 0x8C66: 0x63B2, + 0x8C67: 0x643A, + 0x8C68: 0x656C, + 0x8C69: 0x666F, + 0x8C6A: 0x6842, + 0x8C6B: 0x6E13, + 0x8C6C: 0x7566, + 0x8C6D: 0x7A3D, + 0x8C6E: 0x7CFB, + 0x8C6F: 0x7D4C, + 0x8C70: 0x7D99, + 0x8C71: 0x7E4B, + 0x8C72: 0x7F6B, + 0x8C73: 0x830E, + 0x8C74: 0x834A, + 0x8C75: 0x86CD, + 0x8C76: 0x8A08, + 0x8C77: 0x8A63, + 0x8C78: 0x8B66, + 0x8C79: 0x8EFD, + 0x8C7A: 0x981A, + 0x8C7B: 0x9D8F, + 0x8C7C: 0x82B8, + 0x8C7D: 0x8FCE, + 0x8C7E: 0x9BE8, + 0x8C80: 0x5287, + 0x8C81: 0x621F, + 0x8C82: 0x6483, + 0x8C83: 0x6FC0, + 0x8C84: 0x9699, + 0x8C85: 0x6841, + 0x8C86: 0x5091, + 0x8C87: 0x6B20, + 0x8C88: 0x6C7A, + 0x8C89: 0x6F54, + 0x8C8A: 0x7A74, + 0x8C8B: 0x7D50, + 0x8C8C: 0x8840, + 0x8C8D: 0x8A23, + 0x8C8E: 0x6708, + 0x8C8F: 0x4EF6, + 0x8C90: 0x5039, + 0x8C91: 0x5026, + 0x8C92: 0x5065, + 0x8C93: 0x517C, + 0x8C94: 0x5238, + 0x8C95: 0x5263, + 0x8C96: 0x55A7, + 0x8C97: 0x570F, + 0x8C98: 0x5805, + 0x8C99: 0x5ACC, + 0x8C9A: 0x5EFA, + 0x8C9B: 0x61B2, + 0x8C9C: 0x61F8, + 0x8C9D: 0x62F3, + 0x8C9E: 0x6372, + 0x8C9F: 0x691C, + 0x8CA0: 0x6A29, + 0x8CA1: 0x727D, + 0x8CA2: 0x72AC, + 0x8CA3: 0x732E, + 0x8CA4: 0x7814, + 0x8CA5: 0x786F, + 0x8CA6: 0x7D79, + 0x8CA7: 0x770C, + 0x8CA8: 0x80A9, + 0x8CA9: 0x898B, + 0x8CAA: 0x8B19, + 0x8CAB: 0x8CE2, + 0x8CAC: 0x8ED2, + 0x8CAD: 0x9063, + 0x8CAE: 0x9375, + 0x8CAF: 0x967A, + 0x8CB0: 0x9855, + 0x8CB1: 0x9A13, + 0x8CB2: 0x9E78, + 0x8CB3: 0x5143, + 0x8CB4: 0x539F, + 0x8CB5: 0x53B3, + 0x8CB6: 0x5E7B, + 0x8CB7: 0x5F26, + 0x8CB8: 0x6E1B, + 0x8CB9: 0x6E90, + 0x8CBA: 0x7384, + 0x8CBB: 0x73FE, + 0x8CBC: 0x7D43, + 0x8CBD: 0x8237, + 0x8CBE: 0x8A00, + 0x8CBF: 0x8AFA, + 0x8CC0: 0x9650, + 0x8CC1: 0x4E4E, + 0x8CC2: 0x500B, + 0x8CC3: 0x53E4, + 0x8CC4: 0x547C, + 0x8CC5: 0x56FA, + 0x8CC6: 0x59D1, + 0x8CC7: 0x5B64, + 0x8CC8: 0x5DF1, + 0x8CC9: 0x5EAB, + 0x8CCA: 0x5F27, + 0x8CCB: 0x6238, + 0x8CCC: 0x6545, + 0x8CCD: 0x67AF, + 0x8CCE: 0x6E56, + 0x8CCF: 0x72D0, + 0x8CD0: 0x7CCA, + 0x8CD1: 0x88B4, + 0x8CD2: 0x80A1, + 0x8CD3: 0x80E1, + 0x8CD4: 0x83F0, + 0x8CD5: 0x864E, + 0x8CD6: 0x8A87, + 0x8CD7: 0x8DE8, + 0x8CD8: 0x9237, + 0x8CD9: 0x96C7, + 0x8CDA: 0x9867, + 0x8CDB: 0x9F13, + 0x8CDC: 0x4E94, + 0x8CDD: 0x4E92, + 0x8CDE: 0x4F0D, + 0x8CDF: 0x5348, + 0x8CE0: 0x5449, + 0x8CE1: 0x543E, + 0x8CE2: 0x5A2F, + 0x8CE3: 0x5F8C, + 0x8CE4: 0x5FA1, + 0x8CE5: 0x609F, + 0x8CE6: 0x68A7, + 0x8CE7: 0x6A8E, + 0x8CE8: 0x745A, + 0x8CE9: 0x7881, + 0x8CEA: 0x8A9E, + 0x8CEB: 0x8AA4, + 0x8CEC: 0x8B77, + 0x8CED: 0x9190, + 0x8CEE: 0x4E5E, + 0x8CEF: 0x9BC9, + 0x8CF0: 0x4EA4, + 0x8CF1: 0x4F7C, + 0x8CF2: 0x4FAF, + 0x8CF3: 0x5019, + 0x8CF4: 0x5016, + 0x8CF5: 0x5149, + 0x8CF6: 0x516C, + 0x8CF7: 0x529F, + 0x8CF8: 0x52B9, + 0x8CF9: 0x52FE, + 0x8CFA: 0x539A, + 0x8CFB: 0x53E3, + 0x8CFC: 0x5411, + 0x8D40: 0x540E, + 0x8D41: 0x5589, + 0x8D42: 0x5751, + 0x8D43: 0x57A2, + 0x8D44: 0x597D, + 0x8D45: 0x5B54, + 0x8D46: 0x5B5D, + 0x8D47: 0x5B8F, + 0x8D48: 0x5DE5, + 0x8D49: 0x5DE7, + 0x8D4A: 0x5DF7, + 0x8D4B: 0x5E78, + 0x8D4C: 0x5E83, + 0x8D4D: 0x5E9A, + 0x8D4E: 0x5EB7, + 0x8D4F: 0x5F18, + 0x8D50: 0x6052, + 0x8D51: 0x614C, + 0x8D52: 0x6297, + 0x8D53: 0x62D8, + 0x8D54: 0x63A7, + 0x8D55: 0x653B, + 0x8D56: 0x6602, + 0x8D57: 0x6643, + 0x8D58: 0x66F4, + 0x8D59: 0x676D, + 0x8D5A: 0x6821, + 0x8D5B: 0x6897, + 0x8D5C: 0x69CB, + 0x8D5D: 0x6C5F, + 0x8D5E: 0x6D2A, + 0x8D5F: 0x6D69, + 0x8D60: 0x6E2F, + 0x8D61: 0x6E9D, + 0x8D62: 0x7532, + 0x8D63: 0x7687, + 0x8D64: 0x786C, + 0x8D65: 0x7A3F, + 0x8D66: 0x7CE0, + 0x8D67: 0x7D05, + 0x8D68: 0x7D18, + 0x8D69: 0x7D5E, + 0x8D6A: 0x7DB1, + 0x8D6B: 0x8015, + 0x8D6C: 0x8003, + 0x8D6D: 0x80AF, + 0x8D6E: 0x80B1, + 0x8D6F: 0x8154, + 0x8D70: 0x818F, + 0x8D71: 0x822A, + 0x8D72: 0x8352, + 0x8D73: 0x884C, + 0x8D74: 0x8861, + 0x8D75: 0x8B1B, + 0x8D76: 0x8CA2, + 0x8D77: 0x8CFC, + 0x8D78: 0x90CA, + 0x8D79: 0x9175, + 0x8D7A: 0x9271, + 0x8D7B: 0x783F, + 0x8D7C: 0x92FC, + 0x8D7D: 0x95A4, + 0x8D7E: 0x964D, + 0x8D80: 0x9805, + 0x8D81: 0x9999, + 0x8D82: 0x9AD8, + 0x8D83: 0x9D3B, + 0x8D84: 0x525B, + 0x8D85: 0x52AB, + 0x8D86: 0x53F7, + 0x8D87: 0x5408, + 0x8D88: 0x58D5, + 0x8D89: 0x62F7, + 0x8D8A: 0x6FE0, + 0x8D8B: 0x8C6A, + 0x8D8C: 0x8F5F, + 0x8D8D: 0x9EB9, + 0x8D8E: 0x514B, + 0x8D8F: 0x523B, + 0x8D90: 0x544A, + 0x8D91: 0x56FD, + 0x8D92: 0x7A40, + 0x8D93: 0x9177, + 0x8D94: 0x9D60, + 0x8D95: 0x9ED2, + 0x8D96: 0x7344, + 0x8D97: 0x6F09, + 0x8D98: 0x8170, + 0x8D99: 0x7511, + 0x8D9A: 0x5FFD, + 0x8D9B: 0x60DA, + 0x8D9C: 0x9AA8, + 0x8D9D: 0x72DB, + 0x8D9E: 0x8FBC, + 0x8D9F: 0x6B64, + 0x8DA0: 0x9803, + 0x8DA1: 0x4ECA, + 0x8DA2: 0x56F0, + 0x8DA3: 0x5764, + 0x8DA4: 0x58BE, + 0x8DA5: 0x5A5A, + 0x8DA6: 0x6068, + 0x8DA7: 0x61C7, + 0x8DA8: 0x660F, + 0x8DA9: 0x6606, + 0x8DAA: 0x6839, + 0x8DAB: 0x68B1, + 0x8DAC: 0x6DF7, + 0x8DAD: 0x75D5, + 0x8DAE: 0x7D3A, + 0x8DAF: 0x826E, + 0x8DB0: 0x9B42, + 0x8DB1: 0x4E9B, + 0x8DB2: 0x4F50, + 0x8DB3: 0x53C9, + 0x8DB4: 0x5506, + 0x8DB5: 0x5D6F, + 0x8DB6: 0x5DE6, + 0x8DB7: 0x5DEE, + 0x8DB8: 0x67FB, + 0x8DB9: 0x6C99, + 0x8DBA: 0x7473, + 0x8DBB: 0x7802, + 0x8DBC: 0x8A50, + 0x8DBD: 0x9396, + 0x8DBE: 0x88DF, + 0x8DBF: 0x5750, + 0x8DC0: 0x5EA7, + 0x8DC1: 0x632B, + 0x8DC2: 0x50B5, + 0x8DC3: 0x50AC, + 0x8DC4: 0x518D, + 0x8DC5: 0x6700, + 0x8DC6: 0x54C9, + 0x8DC7: 0x585E, + 0x8DC8: 0x59BB, + 0x8DC9: 0x5BB0, + 0x8DCA: 0x5F69, + 0x8DCB: 0x624D, + 0x8DCC: 0x63A1, + 0x8DCD: 0x683D, + 0x8DCE: 0x6B73, + 0x8DCF: 0x6E08, + 0x8DD0: 0x707D, + 0x8DD1: 0x91C7, + 0x8DD2: 0x7280, + 0x8DD3: 0x7815, + 0x8DD4: 0x7826, + 0x8DD5: 0x796D, + 0x8DD6: 0x658E, + 0x8DD7: 0x7D30, + 0x8DD8: 0x83DC, + 0x8DD9: 0x88C1, + 0x8DDA: 0x8F09, + 0x8DDB: 0x969B, + 0x8DDC: 0x5264, + 0x8DDD: 0x5728, + 0x8DDE: 0x6750, + 0x8DDF: 0x7F6A, + 0x8DE0: 0x8CA1, + 0x8DE1: 0x51B4, + 0x8DE2: 0x5742, + 0x8DE3: 0x962A, + 0x8DE4: 0x583A, + 0x8DE5: 0x698A, + 0x8DE6: 0x80B4, + 0x8DE7: 0x54B2, + 0x8DE8: 0x5D0E, + 0x8DE9: 0x57FC, + 0x8DEA: 0x7895, + 0x8DEB: 0x9DFA, + 0x8DEC: 0x4F5C, + 0x8DED: 0x524A, + 0x8DEE: 0x548B, + 0x8DEF: 0x643E, + 0x8DF0: 0x6628, + 0x8DF1: 0x6714, + 0x8DF2: 0x67F5, + 0x8DF3: 0x7A84, + 0x8DF4: 0x7B56, + 0x8DF5: 0x7D22, + 0x8DF6: 0x932F, + 0x8DF7: 0x685C, + 0x8DF8: 0x9BAD, + 0x8DF9: 0x7B39, + 0x8DFA: 0x5319, + 0x8DFB: 0x518A, + 0x8DFC: 0x5237, + 0x8E40: 0x5BDF, + 0x8E41: 0x62F6, + 0x8E42: 0x64AE, + 0x8E43: 0x64E6, + 0x8E44: 0x672D, + 0x8E45: 0x6BBA, + 0x8E46: 0x85A9, + 0x8E47: 0x96D1, + 0x8E48: 0x7690, + 0x8E49: 0x9BD6, + 0x8E4A: 0x634C, + 0x8E4B: 0x9306, + 0x8E4C: 0x9BAB, + 0x8E4D: 0x76BF, + 0x8E4E: 0x6652, + 0x8E4F: 0x4E09, + 0x8E50: 0x5098, + 0x8E51: 0x53C2, + 0x8E52: 0x5C71, + 0x8E53: 0x60E8, + 0x8E54: 0x6492, + 0x8E55: 0x6563, + 0x8E56: 0x685F, + 0x8E57: 0x71E6, + 0x8E58: 0x73CA, + 0x8E59: 0x7523, + 0x8E5A: 0x7B97, + 0x8E5B: 0x7E82, + 0x8E5C: 0x8695, + 0x8E5D: 0x8B83, + 0x8E5E: 0x8CDB, + 0x8E5F: 0x9178, + 0x8E60: 0x9910, + 0x8E61: 0x65AC, + 0x8E62: 0x66AB, + 0x8E63: 0x6B8B, + 0x8E64: 0x4ED5, + 0x8E65: 0x4ED4, + 0x8E66: 0x4F3A, + 0x8E67: 0x4F7F, + 0x8E68: 0x523A, + 0x8E69: 0x53F8, + 0x8E6A: 0x53F2, + 0x8E6B: 0x55E3, + 0x8E6C: 0x56DB, + 0x8E6D: 0x58EB, + 0x8E6E: 0x59CB, + 0x8E6F: 0x59C9, + 0x8E70: 0x59FF, + 0x8E71: 0x5B50, + 0x8E72: 0x5C4D, + 0x8E73: 0x5E02, + 0x8E74: 0x5E2B, + 0x8E75: 0x5FD7, + 0x8E76: 0x601D, + 0x8E77: 0x6307, + 0x8E78: 0x652F, + 0x8E79: 0x5B5C, + 0x8E7A: 0x65AF, + 0x8E7B: 0x65BD, + 0x8E7C: 0x65E8, + 0x8E7D: 0x679D, + 0x8E7E: 0x6B62, + 0x8E80: 0x6B7B, + 0x8E81: 0x6C0F, + 0x8E82: 0x7345, + 0x8E83: 0x7949, + 0x8E84: 0x79C1, + 0x8E85: 0x7CF8, + 0x8E86: 0x7D19, + 0x8E87: 0x7D2B, + 0x8E88: 0x80A2, + 0x8E89: 0x8102, + 0x8E8A: 0x81F3, + 0x8E8B: 0x8996, + 0x8E8C: 0x8A5E, + 0x8E8D: 0x8A69, + 0x8E8E: 0x8A66, + 0x8E8F: 0x8A8C, + 0x8E90: 0x8AEE, + 0x8E91: 0x8CC7, + 0x8E92: 0x8CDC, + 0x8E93: 0x96CC, + 0x8E94: 0x98FC, + 0x8E95: 0x6B6F, + 0x8E96: 0x4E8B, + 0x8E97: 0x4F3C, + 0x8E98: 0x4F8D, + 0x8E99: 0x5150, + 0x8E9A: 0x5B57, + 0x8E9B: 0x5BFA, + 0x8E9C: 0x6148, + 0x8E9D: 0x6301, + 0x8E9E: 0x6642, + 0x8E9F: 0x6B21, + 0x8EA0: 0x6ECB, + 0x8EA1: 0x6CBB, + 0x8EA2: 0x723E, + 0x8EA3: 0x74BD, + 0x8EA4: 0x75D4, + 0x8EA5: 0x78C1, + 0x8EA6: 0x793A, + 0x8EA7: 0x800C, + 0x8EA8: 0x8033, + 0x8EA9: 0x81EA, + 0x8EAA: 0x8494, + 0x8EAB: 0x8F9E, + 0x8EAC: 0x6C50, + 0x8EAD: 0x9E7F, + 0x8EAE: 0x5F0F, + 0x8EAF: 0x8B58, + 0x8EB0: 0x9D2B, + 0x8EB1: 0x7AFA, + 0x8EB2: 0x8EF8, + 0x8EB3: 0x5B8D, + 0x8EB4: 0x96EB, + 0x8EB5: 0x4E03, + 0x8EB6: 0x53F1, + 0x8EB7: 0x57F7, + 0x8EB8: 0x5931, + 0x8EB9: 0x5AC9, + 0x8EBA: 0x5BA4, + 0x8EBB: 0x6089, + 0x8EBC: 0x6E7F, + 0x8EBD: 0x6F06, + 0x8EBE: 0x75BE, + 0x8EBF: 0x8CEA, + 0x8EC0: 0x5B9F, + 0x8EC1: 0x8500, + 0x8EC2: 0x7BE0, + 0x8EC3: 0x5072, + 0x8EC4: 0x67F4, + 0x8EC5: 0x829D, + 0x8EC6: 0x5C61, + 0x8EC7: 0x854A, + 0x8EC8: 0x7E1E, + 0x8EC9: 0x820E, + 0x8ECA: 0x5199, + 0x8ECB: 0x5C04, + 0x8ECC: 0x6368, + 0x8ECD: 0x8D66, + 0x8ECE: 0x659C, + 0x8ECF: 0x716E, + 0x8ED0: 0x793E, + 0x8ED1: 0x7D17, + 0x8ED2: 0x8005, + 0x8ED3: 0x8B1D, + 0x8ED4: 0x8ECA, + 0x8ED5: 0x906E, + 0x8ED6: 0x86C7, + 0x8ED7: 0x90AA, + 0x8ED8: 0x501F, + 0x8ED9: 0x52FA, + 0x8EDA: 0x5C3A, + 0x8EDB: 0x6753, + 0x8EDC: 0x707C, + 0x8EDD: 0x7235, + 0x8EDE: 0x914C, + 0x8EDF: 0x91C8, + 0x8EE0: 0x932B, + 0x8EE1: 0x82E5, + 0x8EE2: 0x5BC2, + 0x8EE3: 0x5F31, + 0x8EE4: 0x60F9, + 0x8EE5: 0x4E3B, + 0x8EE6: 0x53D6, + 0x8EE7: 0x5B88, + 0x8EE8: 0x624B, + 0x8EE9: 0x6731, + 0x8EEA: 0x6B8A, + 0x8EEB: 0x72E9, + 0x8EEC: 0x73E0, + 0x8EED: 0x7A2E, + 0x8EEE: 0x816B, + 0x8EEF: 0x8DA3, + 0x8EF0: 0x9152, + 0x8EF1: 0x9996, + 0x8EF2: 0x5112, + 0x8EF3: 0x53D7, + 0x8EF4: 0x546A, + 0x8EF5: 0x5BFF, + 0x8EF6: 0x6388, + 0x8EF7: 0x6A39, + 0x8EF8: 0x7DAC, + 0x8EF9: 0x9700, + 0x8EFA: 0x56DA, + 0x8EFB: 0x53CE, + 0x8EFC: 0x5468, + 0x8F40: 0x5B97, + 0x8F41: 0x5C31, + 0x8F42: 0x5DDE, + 0x8F43: 0x4FEE, + 0x8F44: 0x6101, + 0x8F45: 0x62FE, + 0x8F46: 0x6D32, + 0x8F47: 0x79C0, + 0x8F48: 0x79CB, + 0x8F49: 0x7D42, + 0x8F4A: 0x7E4D, + 0x8F4B: 0x7FD2, + 0x8F4C: 0x81ED, + 0x8F4D: 0x821F, + 0x8F4E: 0x8490, + 0x8F4F: 0x8846, + 0x8F50: 0x8972, + 0x8F51: 0x8B90, + 0x8F52: 0x8E74, + 0x8F53: 0x8F2F, + 0x8F54: 0x9031, + 0x8F55: 0x914B, + 0x8F56: 0x916C, + 0x8F57: 0x96C6, + 0x8F58: 0x919C, + 0x8F59: 0x4EC0, + 0x8F5A: 0x4F4F, + 0x8F5B: 0x5145, + 0x8F5C: 0x5341, + 0x8F5D: 0x5F93, + 0x8F5E: 0x620E, + 0x8F5F: 0x67D4, + 0x8F60: 0x6C41, + 0x8F61: 0x6E0B, + 0x8F62: 0x7363, + 0x8F63: 0x7E26, + 0x8F64: 0x91CD, + 0x8F65: 0x9283, + 0x8F66: 0x53D4, + 0x8F67: 0x5919, + 0x8F68: 0x5BBF, + 0x8F69: 0x6DD1, + 0x8F6A: 0x795D, + 0x8F6B: 0x7E2E, + 0x8F6C: 0x7C9B, + 0x8F6D: 0x587E, + 0x8F6E: 0x719F, + 0x8F6F: 0x51FA, + 0x8F70: 0x8853, + 0x8F71: 0x8FF0, + 0x8F72: 0x4FCA, + 0x8F73: 0x5CFB, + 0x8F74: 0x6625, + 0x8F75: 0x77AC, + 0x8F76: 0x7AE3, + 0x8F77: 0x821C, + 0x8F78: 0x99FF, + 0x8F79: 0x51C6, + 0x8F7A: 0x5FAA, + 0x8F7B: 0x65EC, + 0x8F7C: 0x696F, + 0x8F7D: 0x6B89, + 0x8F7E: 0x6DF3, + 0x8F80: 0x6E96, + 0x8F81: 0x6F64, + 0x8F82: 0x76FE, + 0x8F83: 0x7D14, + 0x8F84: 0x5DE1, + 0x8F85: 0x9075, + 0x8F86: 0x9187, + 0x8F87: 0x9806, + 0x8F88: 0x51E6, + 0x8F89: 0x521D, + 0x8F8A: 0x6240, + 0x8F8B: 0x6691, + 0x8F8C: 0x66D9, + 0x8F8D: 0x6E1A, + 0x8F8E: 0x5EB6, + 0x8F8F: 0x7DD2, + 0x8F90: 0x7F72, + 0x8F91: 0x66F8, + 0x8F92: 0x85AF, + 0x8F93: 0x85F7, + 0x8F94: 0x8AF8, + 0x8F95: 0x52A9, + 0x8F96: 0x53D9, + 0x8F97: 0x5973, + 0x8F98: 0x5E8F, + 0x8F99: 0x5F90, + 0x8F9A: 0x6055, + 0x8F9B: 0x92E4, + 0x8F9C: 0x9664, + 0x8F9D: 0x50B7, + 0x8F9E: 0x511F, + 0x8F9F: 0x52DD, + 0x8FA0: 0x5320, + 0x8FA1: 0x5347, + 0x8FA2: 0x53EC, + 0x8FA3: 0x54E8, + 0x8FA4: 0x5546, + 0x8FA5: 0x5531, + 0x8FA6: 0x5617, + 0x8FA7: 0x5968, + 0x8FA8: 0x59BE, + 0x8FA9: 0x5A3C, + 0x8FAA: 0x5BB5, + 0x8FAB: 0x5C06, + 0x8FAC: 0x5C0F, + 0x8FAD: 0x5C11, + 0x8FAE: 0x5C1A, + 0x8FAF: 0x5E84, + 0x8FB0: 0x5E8A, + 0x8FB1: 0x5EE0, + 0x8FB2: 0x5F70, + 0x8FB3: 0x627F, + 0x8FB4: 0x6284, + 0x8FB5: 0x62DB, + 0x8FB6: 0x638C, + 0x8FB7: 0x6377, + 0x8FB8: 0x6607, + 0x8FB9: 0x660C, + 0x8FBA: 0x662D, + 0x8FBB: 0x6676, + 0x8FBC: 0x677E, + 0x8FBD: 0x68A2, + 0x8FBE: 0x6A1F, + 0x8FBF: 0x6A35, + 0x8FC0: 0x6CBC, + 0x8FC1: 0x6D88, + 0x8FC2: 0x6E09, + 0x8FC3: 0x6E58, + 0x8FC4: 0x713C, + 0x8FC5: 0x7126, + 0x8FC6: 0x7167, + 0x8FC7: 0x75C7, + 0x8FC8: 0x7701, + 0x8FC9: 0x785D, + 0x8FCA: 0x7901, + 0x8FCB: 0x7965, + 0x8FCC: 0x79F0, + 0x8FCD: 0x7AE0, + 0x8FCE: 0x7B11, + 0x8FCF: 0x7CA7, + 0x8FD0: 0x7D39, + 0x8FD1: 0x8096, + 0x8FD2: 0x83D6, + 0x8FD3: 0x848B, + 0x8FD4: 0x8549, + 0x8FD5: 0x885D, + 0x8FD6: 0x88F3, + 0x8FD7: 0x8A1F, + 0x8FD8: 0x8A3C, + 0x8FD9: 0x8A54, + 0x8FDA: 0x8A73, + 0x8FDB: 0x8C61, + 0x8FDC: 0x8CDE, + 0x8FDD: 0x91A4, + 0x8FDE: 0x9266, + 0x8FDF: 0x937E, + 0x8FE0: 0x9418, + 0x8FE1: 0x969C, + 0x8FE2: 0x9798, + 0x8FE3: 0x4E0A, + 0x8FE4: 0x4E08, + 0x8FE5: 0x4E1E, + 0x8FE6: 0x4E57, + 0x8FE7: 0x5197, + 0x8FE8: 0x5270, + 0x8FE9: 0x57CE, + 0x8FEA: 0x5834, + 0x8FEB: 0x58CC, + 0x8FEC: 0x5B22, + 0x8FED: 0x5E38, + 0x8FEE: 0x60C5, + 0x8FEF: 0x64FE, + 0x8FF0: 0x6761, + 0x8FF1: 0x6756, + 0x8FF2: 0x6D44, + 0x8FF3: 0x72B6, + 0x8FF4: 0x7573, + 0x8FF5: 0x7A63, + 0x8FF6: 0x84B8, + 0x8FF7: 0x8B72, + 0x8FF8: 0x91B8, + 0x8FF9: 0x9320, + 0x8FFA: 0x5631, + 0x8FFB: 0x57F4, + 0x8FFC: 0x98FE, + 0x9040: 0x62ED, + 0x9041: 0x690D, + 0x9042: 0x6B96, + 0x9043: 0x71ED, + 0x9044: 0x7E54, + 0x9045: 0x8077, + 0x9046: 0x8272, + 0x9047: 0x89E6, + 0x9048: 0x98DF, + 0x9049: 0x8755, + 0x904A: 0x8FB1, + 0x904B: 0x5C3B, + 0x904C: 0x4F38, + 0x904D: 0x4FE1, + 0x904E: 0x4FB5, + 0x904F: 0x5507, + 0x9050: 0x5A20, + 0x9051: 0x5BDD, + 0x9052: 0x5BE9, + 0x9053: 0x5FC3, + 0x9054: 0x614E, + 0x9055: 0x632F, + 0x9056: 0x65B0, + 0x9057: 0x664B, + 0x9058: 0x68EE, + 0x9059: 0x699B, + 0x905A: 0x6D78, + 0x905B: 0x6DF1, + 0x905C: 0x7533, + 0x905D: 0x75B9, + 0x905E: 0x771F, + 0x905F: 0x795E, + 0x9060: 0x79E6, + 0x9061: 0x7D33, + 0x9062: 0x81E3, + 0x9063: 0x82AF, + 0x9064: 0x85AA, + 0x9065: 0x89AA, + 0x9066: 0x8A3A, + 0x9067: 0x8EAB, + 0x9068: 0x8F9B, + 0x9069: 0x9032, + 0x906A: 0x91DD, + 0x906B: 0x9707, + 0x906C: 0x4EBA, + 0x906D: 0x4EC1, + 0x906E: 0x5203, + 0x906F: 0x5875, + 0x9070: 0x58EC, + 0x9071: 0x5C0B, + 0x9072: 0x751A, + 0x9073: 0x5C3D, + 0x9074: 0x814E, + 0x9075: 0x8A0A, + 0x9076: 0x8FC5, + 0x9077: 0x9663, + 0x9078: 0x976D, + 0x9079: 0x7B25, + 0x907A: 0x8ACF, + 0x907B: 0x9808, + 0x907C: 0x9162, + 0x907D: 0x56F3, + 0x907E: 0x53A8, + 0x9080: 0x9017, + 0x9081: 0x5439, + 0x9082: 0x5782, + 0x9083: 0x5E25, + 0x9084: 0x63A8, + 0x9085: 0x6C34, + 0x9086: 0x708A, + 0x9087: 0x7761, + 0x9088: 0x7C8B, + 0x9089: 0x7FE0, + 0x908A: 0x8870, + 0x908B: 0x9042, + 0x908C: 0x9154, + 0x908D: 0x9310, + 0x908E: 0x9318, + 0x908F: 0x968F, + 0x9090: 0x745E, + 0x9091: 0x9AC4, + 0x9092: 0x5D07, + 0x9093: 0x5D69, + 0x9094: 0x6570, + 0x9095: 0x67A2, + 0x9096: 0x8DA8, + 0x9097: 0x96DB, + 0x9098: 0x636E, + 0x9099: 0x6749, + 0x909A: 0x6919, + 0x909B: 0x83C5, + 0x909C: 0x9817, + 0x909D: 0x96C0, + 0x909E: 0x88FE, + 0x909F: 0x6F84, + 0x90A0: 0x647A, + 0x90A1: 0x5BF8, + 0x90A2: 0x4E16, + 0x90A3: 0x702C, + 0x90A4: 0x755D, + 0x90A5: 0x662F, + 0x90A6: 0x51C4, + 0x90A7: 0x5236, + 0x90A8: 0x52E2, + 0x90A9: 0x59D3, + 0x90AA: 0x5F81, + 0x90AB: 0x6027, + 0x90AC: 0x6210, + 0x90AD: 0x653F, + 0x90AE: 0x6574, + 0x90AF: 0x661F, + 0x90B0: 0x6674, + 0x90B1: 0x68F2, + 0x90B2: 0x6816, + 0x90B3: 0x6B63, + 0x90B4: 0x6E05, + 0x90B5: 0x7272, + 0x90B6: 0x751F, + 0x90B7: 0x76DB, + 0x90B8: 0x7CBE, + 0x90B9: 0x8056, + 0x90BA: 0x58F0, + 0x90BB: 0x88FD, + 0x90BC: 0x897F, + 0x90BD: 0x8AA0, + 0x90BE: 0x8A93, + 0x90BF: 0x8ACB, + 0x90C0: 0x901D, + 0x90C1: 0x9192, + 0x90C2: 0x9752, + 0x90C3: 0x9759, + 0x90C4: 0x6589, + 0x90C5: 0x7A0E, + 0x90C6: 0x8106, + 0x90C7: 0x96BB, + 0x90C8: 0x5E2D, + 0x90C9: 0x60DC, + 0x90CA: 0x621A, + 0x90CB: 0x65A5, + 0x90CC: 0x6614, + 0x90CD: 0x6790, + 0x90CE: 0x77F3, + 0x90CF: 0x7A4D, + 0x90D0: 0x7C4D, + 0x90D1: 0x7E3E, + 0x90D2: 0x810A, + 0x90D3: 0x8CAC, + 0x90D4: 0x8D64, + 0x90D5: 0x8DE1, + 0x90D6: 0x8E5F, + 0x90D7: 0x78A9, + 0x90D8: 0x5207, + 0x90D9: 0x62D9, + 0x90DA: 0x63A5, + 0x90DB: 0x6442, + 0x90DC: 0x6298, + 0x90DD: 0x8A2D, + 0x90DE: 0x7A83, + 0x90DF: 0x7BC0, + 0x90E0: 0x8AAC, + 0x90E1: 0x96EA, + 0x90E2: 0x7D76, + 0x90E3: 0x820C, + 0x90E4: 0x8749, + 0x90E5: 0x4ED9, + 0x90E6: 0x5148, + 0x90E7: 0x5343, + 0x90E8: 0x5360, + 0x90E9: 0x5BA3, + 0x90EA: 0x5C02, + 0x90EB: 0x5C16, + 0x90EC: 0x5DDD, + 0x90ED: 0x6226, + 0x90EE: 0x6247, + 0x90EF: 0x64B0, + 0x90F0: 0x6813, + 0x90F1: 0x6834, + 0x90F2: 0x6CC9, + 0x90F3: 0x6D45, + 0x90F4: 0x6D17, + 0x90F5: 0x67D3, + 0x90F6: 0x6F5C, + 0x90F7: 0x714E, + 0x90F8: 0x717D, + 0x90F9: 0x65CB, + 0x90FA: 0x7A7F, + 0x90FB: 0x7BAD, + 0x90FC: 0x7DDA, + 0x9140: 0x7E4A, + 0x9141: 0x7FA8, + 0x9142: 0x817A, + 0x9143: 0x821B, + 0x9144: 0x8239, + 0x9145: 0x85A6, + 0x9146: 0x8A6E, + 0x9147: 0x8CCE, + 0x9148: 0x8DF5, + 0x9149: 0x9078, + 0x914A: 0x9077, + 0x914B: 0x92AD, + 0x914C: 0x9291, + 0x914D: 0x9583, + 0x914E: 0x9BAE, + 0x914F: 0x524D, + 0x9150: 0x5584, + 0x9151: 0x6F38, + 0x9152: 0x7136, + 0x9153: 0x5168, + 0x9154: 0x7985, + 0x9155: 0x7E55, + 0x9156: 0x81B3, + 0x9157: 0x7CCE, + 0x9158: 0x564C, + 0x9159: 0x5851, + 0x915A: 0x5CA8, + 0x915B: 0x63AA, + 0x915C: 0x66FE, + 0x915D: 0x66FD, + 0x915E: 0x695A, + 0x915F: 0x72D9, + 0x9160: 0x758F, + 0x9161: 0x758E, + 0x9162: 0x790E, + 0x9163: 0x7956, + 0x9164: 0x79DF, + 0x9165: 0x7C97, + 0x9166: 0x7D20, + 0x9167: 0x7D44, + 0x9168: 0x8607, + 0x9169: 0x8A34, + 0x916A: 0x963B, + 0x916B: 0x9061, + 0x916C: 0x9F20, + 0x916D: 0x50E7, + 0x916E: 0x5275, + 0x916F: 0x53CC, + 0x9170: 0x53E2, + 0x9171: 0x5009, + 0x9172: 0x55AA, + 0x9173: 0x58EE, + 0x9174: 0x594F, + 0x9175: 0x723D, + 0x9176: 0x5B8B, + 0x9177: 0x5C64, + 0x9178: 0x531D, + 0x9179: 0x60E3, + 0x917A: 0x60F3, + 0x917B: 0x635C, + 0x917C: 0x6383, + 0x917D: 0x633F, + 0x917E: 0x63BB, + 0x9180: 0x64CD, + 0x9181: 0x65E9, + 0x9182: 0x66F9, + 0x9183: 0x5DE3, + 0x9184: 0x69CD, + 0x9185: 0x69FD, + 0x9186: 0x6F15, + 0x9187: 0x71E5, + 0x9188: 0x4E89, + 0x9189: 0x75E9, + 0x918A: 0x76F8, + 0x918B: 0x7A93, + 0x918C: 0x7CDF, + 0x918D: 0x7DCF, + 0x918E: 0x7D9C, + 0x918F: 0x8061, + 0x9190: 0x8349, + 0x9191: 0x8358, + 0x9192: 0x846C, + 0x9193: 0x84BC, + 0x9194: 0x85FB, + 0x9195: 0x88C5, + 0x9196: 0x8D70, + 0x9197: 0x9001, + 0x9198: 0x906D, + 0x9199: 0x9397, + 0x919A: 0x971C, + 0x919B: 0x9A12, + 0x919C: 0x50CF, + 0x919D: 0x5897, + 0x919E: 0x618E, + 0x919F: 0x81D3, + 0x91A0: 0x8535, + 0x91A1: 0x8D08, + 0x91A2: 0x9020, + 0x91A3: 0x4FC3, + 0x91A4: 0x5074, + 0x91A5: 0x5247, + 0x91A6: 0x5373, + 0x91A7: 0x606F, + 0x91A8: 0x6349, + 0x91A9: 0x675F, + 0x91AA: 0x6E2C, + 0x91AB: 0x8DB3, + 0x91AC: 0x901F, + 0x91AD: 0x4FD7, + 0x91AE: 0x5C5E, + 0x91AF: 0x8CCA, + 0x91B0: 0x65CF, + 0x91B1: 0x7D9A, + 0x91B2: 0x5352, + 0x91B3: 0x8896, + 0x91B4: 0x5176, + 0x91B5: 0x63C3, + 0x91B6: 0x5B58, + 0x91B7: 0x5B6B, + 0x91B8: 0x5C0A, + 0x91B9: 0x640D, + 0x91BA: 0x6751, + 0x91BB: 0x905C, + 0x91BC: 0x4ED6, + 0x91BD: 0x591A, + 0x91BE: 0x592A, + 0x91BF: 0x6C70, + 0x91C0: 0x8A51, + 0x91C1: 0x553E, + 0x91C2: 0x5815, + 0x91C3: 0x59A5, + 0x91C4: 0x60F0, + 0x91C5: 0x6253, + 0x91C6: 0x67C1, + 0x91C7: 0x8235, + 0x91C8: 0x6955, + 0x91C9: 0x9640, + 0x91CA: 0x99C4, + 0x91CB: 0x9A28, + 0x91CC: 0x4F53, + 0x91CD: 0x5806, + 0x91CE: 0x5BFE, + 0x91CF: 0x8010, + 0x91D0: 0x5CB1, + 0x91D1: 0x5E2F, + 0x91D2: 0x5F85, + 0x91D3: 0x6020, + 0x91D4: 0x614B, + 0x91D5: 0x6234, + 0x91D6: 0x66FF, + 0x91D7: 0x6CF0, + 0x91D8: 0x6EDE, + 0x91D9: 0x80CE, + 0x91DA: 0x817F, + 0x91DB: 0x82D4, + 0x91DC: 0x888B, + 0x91DD: 0x8CB8, + 0x91DE: 0x9000, + 0x91DF: 0x902E, + 0x91E0: 0x968A, + 0x91E1: 0x9EDB, + 0x91E2: 0x9BDB, + 0x91E3: 0x4EE3, + 0x91E4: 0x53F0, + 0x91E5: 0x5927, + 0x91E6: 0x7B2C, + 0x91E7: 0x918D, + 0x91E8: 0x984C, + 0x91E9: 0x9DF9, + 0x91EA: 0x6EDD, + 0x91EB: 0x7027, + 0x91EC: 0x5353, + 0x91ED: 0x5544, + 0x91EE: 0x5B85, + 0x91EF: 0x6258, + 0x91F0: 0x629E, + 0x91F1: 0x62D3, + 0x91F2: 0x6CA2, + 0x91F3: 0x6FEF, + 0x91F4: 0x7422, + 0x91F5: 0x8A17, + 0x91F6: 0x9438, + 0x91F7: 0x6FC1, + 0x91F8: 0x8AFE, + 0x91F9: 0x8338, + 0x91FA: 0x51E7, + 0x91FB: 0x86F8, + 0x91FC: 0x53EA, + 0x9240: 0x53E9, + 0x9241: 0x4F46, + 0x9242: 0x9054, + 0x9243: 0x8FB0, + 0x9244: 0x596A, + 0x9245: 0x8131, + 0x9246: 0x5DFD, + 0x9247: 0x7AEA, + 0x9248: 0x8FBF, + 0x9249: 0x68DA, + 0x924A: 0x8C37, + 0x924B: 0x72F8, + 0x924C: 0x9C48, + 0x924D: 0x6A3D, + 0x924E: 0x8AB0, + 0x924F: 0x4E39, + 0x9250: 0x5358, + 0x9251: 0x5606, + 0x9252: 0x5766, + 0x9253: 0x62C5, + 0x9254: 0x63A2, + 0x9255: 0x65E6, + 0x9256: 0x6B4E, + 0x9257: 0x6DE1, + 0x9258: 0x6E5B, + 0x9259: 0x70AD, + 0x925A: 0x77ED, + 0x925B: 0x7AEF, + 0x925C: 0x7BAA, + 0x925D: 0x7DBB, + 0x925E: 0x803D, + 0x925F: 0x80C6, + 0x9260: 0x86CB, + 0x9261: 0x8A95, + 0x9262: 0x935B, + 0x9263: 0x56E3, + 0x9264: 0x58C7, + 0x9265: 0x5F3E, + 0x9266: 0x65AD, + 0x9267: 0x6696, + 0x9268: 0x6A80, + 0x9269: 0x6BB5, + 0x926A: 0x7537, + 0x926B: 0x8AC7, + 0x926C: 0x5024, + 0x926D: 0x77E5, + 0x926E: 0x5730, + 0x926F: 0x5F1B, + 0x9270: 0x6065, + 0x9271: 0x667A, + 0x9272: 0x6C60, + 0x9273: 0x75F4, + 0x9274: 0x7A1A, + 0x9275: 0x7F6E, + 0x9276: 0x81F4, + 0x9277: 0x8718, + 0x9278: 0x9045, + 0x9279: 0x99B3, + 0x927A: 0x7BC9, + 0x927B: 0x755C, + 0x927C: 0x7AF9, + 0x927D: 0x7B51, + 0x927E: 0x84C4, + 0x9280: 0x9010, + 0x9281: 0x79E9, + 0x9282: 0x7A92, + 0x9283: 0x8336, + 0x9284: 0x5AE1, + 0x9285: 0x7740, + 0x9286: 0x4E2D, + 0x9287: 0x4EF2, + 0x9288: 0x5B99, + 0x9289: 0x5FE0, + 0x928A: 0x62BD, + 0x928B: 0x663C, + 0x928C: 0x67F1, + 0x928D: 0x6CE8, + 0x928E: 0x866B, + 0x928F: 0x8877, + 0x9290: 0x8A3B, + 0x9291: 0x914E, + 0x9292: 0x92F3, + 0x9293: 0x99D0, + 0x9294: 0x6A17, + 0x9295: 0x7026, + 0x9296: 0x732A, + 0x9297: 0x82E7, + 0x9298: 0x8457, + 0x9299: 0x8CAF, + 0x929A: 0x4E01, + 0x929B: 0x5146, + 0x929C: 0x51CB, + 0x929D: 0x558B, + 0x929E: 0x5BF5, + 0x929F: 0x5E16, + 0x92A0: 0x5E33, + 0x92A1: 0x5E81, + 0x92A2: 0x5F14, + 0x92A3: 0x5F35, + 0x92A4: 0x5F6B, + 0x92A5: 0x5FB4, + 0x92A6: 0x61F2, + 0x92A7: 0x6311, + 0x92A8: 0x66A2, + 0x92A9: 0x671D, + 0x92AA: 0x6F6E, + 0x92AB: 0x7252, + 0x92AC: 0x753A, + 0x92AD: 0x773A, + 0x92AE: 0x8074, + 0x92AF: 0x8139, + 0x92B0: 0x8178, + 0x92B1: 0x8776, + 0x92B2: 0x8ABF, + 0x92B3: 0x8ADC, + 0x92B4: 0x8D85, + 0x92B5: 0x8DF3, + 0x92B6: 0x929A, + 0x92B7: 0x9577, + 0x92B8: 0x9802, + 0x92B9: 0x9CE5, + 0x92BA: 0x52C5, + 0x92BB: 0x6357, + 0x92BC: 0x76F4, + 0x92BD: 0x6715, + 0x92BE: 0x6C88, + 0x92BF: 0x73CD, + 0x92C0: 0x8CC3, + 0x92C1: 0x93AE, + 0x92C2: 0x9673, + 0x92C3: 0x6D25, + 0x92C4: 0x589C, + 0x92C5: 0x690E, + 0x92C6: 0x69CC, + 0x92C7: 0x8FFD, + 0x92C8: 0x939A, + 0x92C9: 0x75DB, + 0x92CA: 0x901A, + 0x92CB: 0x585A, + 0x92CC: 0x6802, + 0x92CD: 0x63B4, + 0x92CE: 0x69FB, + 0x92CF: 0x4F43, + 0x92D0: 0x6F2C, + 0x92D1: 0x67D8, + 0x92D2: 0x8FBB, + 0x92D3: 0x8526, + 0x92D4: 0x7DB4, + 0x92D5: 0x9354, + 0x92D6: 0x693F, + 0x92D7: 0x6F70, + 0x92D8: 0x576A, + 0x92D9: 0x58F7, + 0x92DA: 0x5B2C, + 0x92DB: 0x7D2C, + 0x92DC: 0x722A, + 0x92DD: 0x540A, + 0x92DE: 0x91E3, + 0x92DF: 0x9DB4, + 0x92E0: 0x4EAD, + 0x92E1: 0x4F4E, + 0x92E2: 0x505C, + 0x92E3: 0x5075, + 0x92E4: 0x5243, + 0x92E5: 0x8C9E, + 0x92E6: 0x5448, + 0x92E7: 0x5824, + 0x92E8: 0x5B9A, + 0x92E9: 0x5E1D, + 0x92EA: 0x5E95, + 0x92EB: 0x5EAD, + 0x92EC: 0x5EF7, + 0x92ED: 0x5F1F, + 0x92EE: 0x608C, + 0x92EF: 0x62B5, + 0x92F0: 0x633A, + 0x92F1: 0x63D0, + 0x92F2: 0x68AF, + 0x92F3: 0x6C40, + 0x92F4: 0x7887, + 0x92F5: 0x798E, + 0x92F6: 0x7A0B, + 0x92F7: 0x7DE0, + 0x92F8: 0x8247, + 0x92F9: 0x8A02, + 0x92FA: 0x8AE6, + 0x92FB: 0x8E44, + 0x92FC: 0x9013, + 0x9340: 0x90B8, + 0x9341: 0x912D, + 0x9342: 0x91D8, + 0x9343: 0x9F0E, + 0x9344: 0x6CE5, + 0x9345: 0x6458, + 0x9346: 0x64E2, + 0x9347: 0x6575, + 0x9348: 0x6EF4, + 0x9349: 0x7684, + 0x934A: 0x7B1B, + 0x934B: 0x9069, + 0x934C: 0x93D1, + 0x934D: 0x6EBA, + 0x934E: 0x54F2, + 0x934F: 0x5FB9, + 0x9350: 0x64A4, + 0x9351: 0x8F4D, + 0x9352: 0x8FED, + 0x9353: 0x9244, + 0x9354: 0x5178, + 0x9355: 0x586B, + 0x9356: 0x5929, + 0x9357: 0x5C55, + 0x9358: 0x5E97, + 0x9359: 0x6DFB, + 0x935A: 0x7E8F, + 0x935B: 0x751C, + 0x935C: 0x8CBC, + 0x935D: 0x8EE2, + 0x935E: 0x985B, + 0x935F: 0x70B9, + 0x9360: 0x4F1D, + 0x9361: 0x6BBF, + 0x9362: 0x6FB1, + 0x9363: 0x7530, + 0x9364: 0x96FB, + 0x9365: 0x514E, + 0x9366: 0x5410, + 0x9367: 0x5835, + 0x9368: 0x5857, + 0x9369: 0x59AC, + 0x936A: 0x5C60, + 0x936B: 0x5F92, + 0x936C: 0x6597, + 0x936D: 0x675C, + 0x936E: 0x6E21, + 0x936F: 0x767B, + 0x9370: 0x83DF, + 0x9371: 0x8CED, + 0x9372: 0x9014, + 0x9373: 0x90FD, + 0x9374: 0x934D, + 0x9375: 0x7825, + 0x9376: 0x783A, + 0x9377: 0x52AA, + 0x9378: 0x5EA6, + 0x9379: 0x571F, + 0x937A: 0x5974, + 0x937B: 0x6012, + 0x937C: 0x5012, + 0x937D: 0x515A, + 0x937E: 0x51AC, + 0x9380: 0x51CD, + 0x9381: 0x5200, + 0x9382: 0x5510, + 0x9383: 0x5854, + 0x9384: 0x5858, + 0x9385: 0x5957, + 0x9386: 0x5B95, + 0x9387: 0x5CF6, + 0x9388: 0x5D8B, + 0x9389: 0x60BC, + 0x938A: 0x6295, + 0x938B: 0x642D, + 0x938C: 0x6771, + 0x938D: 0x6843, + 0x938E: 0x68BC, + 0x938F: 0x68DF, + 0x9390: 0x76D7, + 0x9391: 0x6DD8, + 0x9392: 0x6E6F, + 0x9393: 0x6D9B, + 0x9394: 0x706F, + 0x9395: 0x71C8, + 0x9396: 0x5F53, + 0x9397: 0x75D8, + 0x9398: 0x7977, + 0x9399: 0x7B49, + 0x939A: 0x7B54, + 0x939B: 0x7B52, + 0x939C: 0x7CD6, + 0x939D: 0x7D71, + 0x939E: 0x5230, + 0x939F: 0x8463, + 0x93A0: 0x8569, + 0x93A1: 0x85E4, + 0x93A2: 0x8A0E, + 0x93A3: 0x8B04, + 0x93A4: 0x8C46, + 0x93A5: 0x8E0F, + 0x93A6: 0x9003, + 0x93A7: 0x900F, + 0x93A8: 0x9419, + 0x93A9: 0x9676, + 0x93AA: 0x982D, + 0x93AB: 0x9A30, + 0x93AC: 0x95D8, + 0x93AD: 0x50CD, + 0x93AE: 0x52D5, + 0x93AF: 0x540C, + 0x93B0: 0x5802, + 0x93B1: 0x5C0E, + 0x93B2: 0x61A7, + 0x93B3: 0x649E, + 0x93B4: 0x6D1E, + 0x93B5: 0x77B3, + 0x93B6: 0x7AE5, + 0x93B7: 0x80F4, + 0x93B8: 0x8404, + 0x93B9: 0x9053, + 0x93BA: 0x9285, + 0x93BB: 0x5CE0, + 0x93BC: 0x9D07, + 0x93BD: 0x533F, + 0x93BE: 0x5F97, + 0x93BF: 0x5FB3, + 0x93C0: 0x6D9C, + 0x93C1: 0x7279, + 0x93C2: 0x7763, + 0x93C3: 0x79BF, + 0x93C4: 0x7BE4, + 0x93C5: 0x6BD2, + 0x93C6: 0x72EC, + 0x93C7: 0x8AAD, + 0x93C8: 0x6803, + 0x93C9: 0x6A61, + 0x93CA: 0x51F8, + 0x93CB: 0x7A81, + 0x93CC: 0x6934, + 0x93CD: 0x5C4A, + 0x93CE: 0x9CF6, + 0x93CF: 0x82EB, + 0x93D0: 0x5BC5, + 0x93D1: 0x9149, + 0x93D2: 0x701E, + 0x93D3: 0x5678, + 0x93D4: 0x5C6F, + 0x93D5: 0x60C7, + 0x93D6: 0x6566, + 0x93D7: 0x6C8C, + 0x93D8: 0x8C5A, + 0x93D9: 0x9041, + 0x93DA: 0x9813, + 0x93DB: 0x5451, + 0x93DC: 0x66C7, + 0x93DD: 0x920D, + 0x93DE: 0x5948, + 0x93DF: 0x90A3, + 0x93E0: 0x5185, + 0x93E1: 0x4E4D, + 0x93E2: 0x51EA, + 0x93E3: 0x8599, + 0x93E4: 0x8B0E, + 0x93E5: 0x7058, + 0x93E6: 0x637A, + 0x93E7: 0x934B, + 0x93E8: 0x6962, + 0x93E9: 0x99B4, + 0x93EA: 0x7E04, + 0x93EB: 0x7577, + 0x93EC: 0x5357, + 0x93ED: 0x6960, + 0x93EE: 0x8EDF, + 0x93EF: 0x96E3, + 0x93F0: 0x6C5D, + 0x93F1: 0x4E8C, + 0x93F2: 0x5C3C, + 0x93F3: 0x5F10, + 0x93F4: 0x8FE9, + 0x93F5: 0x5302, + 0x93F6: 0x8CD1, + 0x93F7: 0x8089, + 0x93F8: 0x8679, + 0x93F9: 0x5EFF, + 0x93FA: 0x65E5, + 0x93FB: 0x4E73, + 0x93FC: 0x5165, + 0x9440: 0x5982, + 0x9441: 0x5C3F, + 0x9442: 0x97EE, + 0x9443: 0x4EFB, + 0x9444: 0x598A, + 0x9445: 0x5FCD, + 0x9446: 0x8A8D, + 0x9447: 0x6FE1, + 0x9448: 0x79B0, + 0x9449: 0x7962, + 0x944A: 0x5BE7, + 0x944B: 0x8471, + 0x944C: 0x732B, + 0x944D: 0x71B1, + 0x944E: 0x5E74, + 0x944F: 0x5FF5, + 0x9450: 0x637B, + 0x9451: 0x649A, + 0x9452: 0x71C3, + 0x9453: 0x7C98, + 0x9454: 0x4E43, + 0x9455: 0x5EFC, + 0x9456: 0x4E4B, + 0x9457: 0x57DC, + 0x9458: 0x56A2, + 0x9459: 0x60A9, + 0x945A: 0x6FC3, + 0x945B: 0x7D0D, + 0x945C: 0x80FD, + 0x945D: 0x8133, + 0x945E: 0x81BF, + 0x945F: 0x8FB2, + 0x9460: 0x8997, + 0x9461: 0x86A4, + 0x9462: 0x5DF4, + 0x9463: 0x628A, + 0x9464: 0x64AD, + 0x9465: 0x8987, + 0x9466: 0x6777, + 0x9467: 0x6CE2, + 0x9468: 0x6D3E, + 0x9469: 0x7436, + 0x946A: 0x7834, + 0x946B: 0x5A46, + 0x946C: 0x7F75, + 0x946D: 0x82AD, + 0x946E: 0x99AC, + 0x946F: 0x4FF3, + 0x9470: 0x5EC3, + 0x9471: 0x62DD, + 0x9472: 0x6392, + 0x9473: 0x6557, + 0x9474: 0x676F, + 0x9475: 0x76C3, + 0x9476: 0x724C, + 0x9477: 0x80CC, + 0x9478: 0x80BA, + 0x9479: 0x8F29, + 0x947A: 0x914D, + 0x947B: 0x500D, + 0x947C: 0x57F9, + 0x947D: 0x5A92, + 0x947E: 0x6885, + 0x9480: 0x6973, + 0x9481: 0x7164, + 0x9482: 0x72FD, + 0x9483: 0x8CB7, + 0x9484: 0x58F2, + 0x9485: 0x8CE0, + 0x9486: 0x966A, + 0x9487: 0x9019, + 0x9488: 0x877F, + 0x9489: 0x79E4, + 0x948A: 0x77E7, + 0x948B: 0x8429, + 0x948C: 0x4F2F, + 0x948D: 0x5265, + 0x948E: 0x535A, + 0x948F: 0x62CD, + 0x9490: 0x67CF, + 0x9491: 0x6CCA, + 0x9492: 0x767D, + 0x9493: 0x7B94, + 0x9494: 0x7C95, + 0x9495: 0x8236, + 0x9496: 0x8584, + 0x9497: 0x8FEB, + 0x9498: 0x66DD, + 0x9499: 0x6F20, + 0x949A: 0x7206, + 0x949B: 0x7E1B, + 0x949C: 0x83AB, + 0x949D: 0x99C1, + 0x949E: 0x9EA6, + 0x949F: 0x51FD, + 0x94A0: 0x7BB1, + 0x94A1: 0x7872, + 0x94A2: 0x7BB8, + 0x94A3: 0x8087, + 0x94A4: 0x7B48, + 0x94A5: 0x6AE8, + 0x94A6: 0x5E61, + 0x94A7: 0x808C, + 0x94A8: 0x7551, + 0x94A9: 0x7560, + 0x94AA: 0x516B, + 0x94AB: 0x9262, + 0x94AC: 0x6E8C, + 0x94AD: 0x767A, + 0x94AE: 0x9197, + 0x94AF: 0x9AEA, + 0x94B0: 0x4F10, + 0x94B1: 0x7F70, + 0x94B2: 0x629C, + 0x94B3: 0x7B4F, + 0x94B4: 0x95A5, + 0x94B5: 0x9CE9, + 0x94B6: 0x567A, + 0x94B7: 0x5859, + 0x94B8: 0x86E4, + 0x94B9: 0x96BC, + 0x94BA: 0x4F34, + 0x94BB: 0x5224, + 0x94BC: 0x534A, + 0x94BD: 0x53CD, + 0x94BE: 0x53DB, + 0x94BF: 0x5E06, + 0x94C0: 0x642C, + 0x94C1: 0x6591, + 0x94C2: 0x677F, + 0x94C3: 0x6C3E, + 0x94C4: 0x6C4E, + 0x94C5: 0x7248, + 0x94C6: 0x72AF, + 0x94C7: 0x73ED, + 0x94C8: 0x7554, + 0x94C9: 0x7E41, + 0x94CA: 0x822C, + 0x94CB: 0x85E9, + 0x94CC: 0x8CA9, + 0x94CD: 0x7BC4, + 0x94CE: 0x91C6, + 0x94CF: 0x7169, + 0x94D0: 0x9812, + 0x94D1: 0x98EF, + 0x94D2: 0x633D, + 0x94D3: 0x6669, + 0x94D4: 0x756A, + 0x94D5: 0x76E4, + 0x94D6: 0x78D0, + 0x94D7: 0x8543, + 0x94D8: 0x86EE, + 0x94D9: 0x532A, + 0x94DA: 0x5351, + 0x94DB: 0x5426, + 0x94DC: 0x5983, + 0x94DD: 0x5E87, + 0x94DE: 0x5F7C, + 0x94DF: 0x60B2, + 0x94E0: 0x6249, + 0x94E1: 0x6279, + 0x94E2: 0x62AB, + 0x94E3: 0x6590, + 0x94E4: 0x6BD4, + 0x94E5: 0x6CCC, + 0x94E6: 0x75B2, + 0x94E7: 0x76AE, + 0x94E8: 0x7891, + 0x94E9: 0x79D8, + 0x94EA: 0x7DCB, + 0x94EB: 0x7F77, + 0x94EC: 0x80A5, + 0x94ED: 0x88AB, + 0x94EE: 0x8AB9, + 0x94EF: 0x8CBB, + 0x94F0: 0x907F, + 0x94F1: 0x975E, + 0x94F2: 0x98DB, + 0x94F3: 0x6A0B, + 0x94F4: 0x7C38, + 0x94F5: 0x5099, + 0x94F6: 0x5C3E, + 0x94F7: 0x5FAE, + 0x94F8: 0x6787, + 0x94F9: 0x6BD8, + 0x94FA: 0x7435, + 0x94FB: 0x7709, + 0x94FC: 0x7F8E, + 0x9540: 0x9F3B, + 0x9541: 0x67CA, + 0x9542: 0x7A17, + 0x9543: 0x5339, + 0x9544: 0x758B, + 0x9545: 0x9AED, + 0x9546: 0x5F66, + 0x9547: 0x819D, + 0x9548: 0x83F1, + 0x9549: 0x8098, + 0x954A: 0x5F3C, + 0x954B: 0x5FC5, + 0x954C: 0x7562, + 0x954D: 0x7B46, + 0x954E: 0x903C, + 0x954F: 0x6867, + 0x9550: 0x59EB, + 0x9551: 0x5A9B, + 0x9552: 0x7D10, + 0x9553: 0x767E, + 0x9554: 0x8B2C, + 0x9555: 0x4FF5, + 0x9556: 0x5F6A, + 0x9557: 0x6A19, + 0x9558: 0x6C37, + 0x9559: 0x6F02, + 0x955A: 0x74E2, + 0x955B: 0x7968, + 0x955C: 0x8868, + 0x955D: 0x8A55, + 0x955E: 0x8C79, + 0x955F: 0x5EDF, + 0x9560: 0x63CF, + 0x9561: 0x75C5, + 0x9562: 0x79D2, + 0x9563: 0x82D7, + 0x9564: 0x9328, + 0x9565: 0x92F2, + 0x9566: 0x849C, + 0x9567: 0x86ED, + 0x9568: 0x9C2D, + 0x9569: 0x54C1, + 0x956A: 0x5F6C, + 0x956B: 0x658C, + 0x956C: 0x6D5C, + 0x956D: 0x7015, + 0x956E: 0x8CA7, + 0x956F: 0x8CD3, + 0x9570: 0x983B, + 0x9571: 0x654F, + 0x9572: 0x74F6, + 0x9573: 0x4E0D, + 0x9574: 0x4ED8, + 0x9575: 0x57E0, + 0x9576: 0x592B, + 0x9577: 0x5A66, + 0x9578: 0x5BCC, + 0x9579: 0x51A8, + 0x957A: 0x5E03, + 0x957B: 0x5E9C, + 0x957C: 0x6016, + 0x957D: 0x6276, + 0x957E: 0x6577, + 0x9580: 0x65A7, + 0x9581: 0x666E, + 0x9582: 0x6D6E, + 0x9583: 0x7236, + 0x9584: 0x7B26, + 0x9585: 0x8150, + 0x9586: 0x819A, + 0x9587: 0x8299, + 0x9588: 0x8B5C, + 0x9589: 0x8CA0, + 0x958A: 0x8CE6, + 0x958B: 0x8D74, + 0x958C: 0x961C, + 0x958D: 0x9644, + 0x958E: 0x4FAE, + 0x958F: 0x64AB, + 0x9590: 0x6B66, + 0x9591: 0x821E, + 0x9592: 0x8461, + 0x9593: 0x856A, + 0x9594: 0x90E8, + 0x9595: 0x5C01, + 0x9596: 0x6953, + 0x9597: 0x98A8, + 0x9598: 0x847A, + 0x9599: 0x8557, + 0x959A: 0x4F0F, + 0x959B: 0x526F, + 0x959C: 0x5FA9, + 0x959D: 0x5E45, + 0x959E: 0x670D, + 0x959F: 0x798F, + 0x95A0: 0x8179, + 0x95A1: 0x8907, + 0x95A2: 0x8986, + 0x95A3: 0x6DF5, + 0x95A4: 0x5F17, + 0x95A5: 0x6255, + 0x95A6: 0x6CB8, + 0x95A7: 0x4ECF, + 0x95A8: 0x7269, + 0x95A9: 0x9B92, + 0x95AA: 0x5206, + 0x95AB: 0x543B, + 0x95AC: 0x5674, + 0x95AD: 0x58B3, + 0x95AE: 0x61A4, + 0x95AF: 0x626E, + 0x95B0: 0x711A, + 0x95B1: 0x596E, + 0x95B2: 0x7C89, + 0x95B3: 0x7CDE, + 0x95B4: 0x7D1B, + 0x95B5: 0x96F0, + 0x95B6: 0x6587, + 0x95B7: 0x805E, + 0x95B8: 0x4E19, + 0x95B9: 0x4F75, + 0x95BA: 0x5175, + 0x95BB: 0x5840, + 0x95BC: 0x5E63, + 0x95BD: 0x5E73, + 0x95BE: 0x5F0A, + 0x95BF: 0x67C4, + 0x95C0: 0x4E26, + 0x95C1: 0x853D, + 0x95C2: 0x9589, + 0x95C3: 0x965B, + 0x95C4: 0x7C73, + 0x95C5: 0x9801, + 0x95C6: 0x50FB, + 0x95C7: 0x58C1, + 0x95C8: 0x7656, + 0x95C9: 0x78A7, + 0x95CA: 0x5225, + 0x95CB: 0x77A5, + 0x95CC: 0x8511, + 0x95CD: 0x7B86, + 0x95CE: 0x504F, + 0x95CF: 0x5909, + 0x95D0: 0x7247, + 0x95D1: 0x7BC7, + 0x95D2: 0x7DE8, + 0x95D3: 0x8FBA, + 0x95D4: 0x8FD4, + 0x95D5: 0x904D, + 0x95D6: 0x4FBF, + 0x95D7: 0x52C9, + 0x95D8: 0x5A29, + 0x95D9: 0x5F01, + 0x95DA: 0x97AD, + 0x95DB: 0x4FDD, + 0x95DC: 0x8217, + 0x95DD: 0x92EA, + 0x95DE: 0x5703, + 0x95DF: 0x6355, + 0x95E0: 0x6B69, + 0x95E1: 0x752B, + 0x95E2: 0x88DC, + 0x95E3: 0x8F14, + 0x95E4: 0x7A42, + 0x95E5: 0x52DF, + 0x95E6: 0x5893, + 0x95E7: 0x6155, + 0x95E8: 0x620A, + 0x95E9: 0x66AE, + 0x95EA: 0x6BCD, + 0x95EB: 0x7C3F, + 0x95EC: 0x83E9, + 0x95ED: 0x5023, + 0x95EE: 0x4FF8, + 0x95EF: 0x5305, + 0x95F0: 0x5446, + 0x95F1: 0x5831, + 0x95F2: 0x5949, + 0x95F3: 0x5B9D, + 0x95F4: 0x5CF0, + 0x95F5: 0x5CEF, + 0x95F6: 0x5D29, + 0x95F7: 0x5E96, + 0x95F8: 0x62B1, + 0x95F9: 0x6367, + 0x95FA: 0x653E, + 0x95FB: 0x65B9, + 0x95FC: 0x670B, + 0x9640: 0x6CD5, + 0x9641: 0x6CE1, + 0x9642: 0x70F9, + 0x9643: 0x7832, + 0x9644: 0x7E2B, + 0x9645: 0x80DE, + 0x9646: 0x82B3, + 0x9647: 0x840C, + 0x9648: 0x84EC, + 0x9649: 0x8702, + 0x964A: 0x8912, + 0x964B: 0x8A2A, + 0x964C: 0x8C4A, + 0x964D: 0x90A6, + 0x964E: 0x92D2, + 0x964F: 0x98FD, + 0x9650: 0x9CF3, + 0x9651: 0x9D6C, + 0x9652: 0x4E4F, + 0x9653: 0x4EA1, + 0x9654: 0x508D, + 0x9655: 0x5256, + 0x9656: 0x574A, + 0x9657: 0x59A8, + 0x9658: 0x5E3D, + 0x9659: 0x5FD8, + 0x965A: 0x5FD9, + 0x965B: 0x623F, + 0x965C: 0x66B4, + 0x965D: 0x671B, + 0x965E: 0x67D0, + 0x965F: 0x68D2, + 0x9660: 0x5192, + 0x9661: 0x7D21, + 0x9662: 0x80AA, + 0x9663: 0x81A8, + 0x9664: 0x8B00, + 0x9665: 0x8C8C, + 0x9666: 0x8CBF, + 0x9667: 0x927E, + 0x9668: 0x9632, + 0x9669: 0x5420, + 0x966A: 0x982C, + 0x966B: 0x5317, + 0x966C: 0x50D5, + 0x966D: 0x535C, + 0x966E: 0x58A8, + 0x966F: 0x64B2, + 0x9670: 0x6734, + 0x9671: 0x7267, + 0x9672: 0x7766, + 0x9673: 0x7A46, + 0x9674: 0x91E6, + 0x9675: 0x52C3, + 0x9676: 0x6CA1, + 0x9677: 0x6B86, + 0x9678: 0x5800, + 0x9679: 0x5E4C, + 0x967A: 0x5954, + 0x967B: 0x672C, + 0x967C: 0x7FFB, + 0x967D: 0x51E1, + 0x967E: 0x76C6, + 0x9680: 0x6469, + 0x9681: 0x78E8, + 0x9682: 0x9B54, + 0x9683: 0x9EBB, + 0x9684: 0x57CB, + 0x9685: 0x59B9, + 0x9686: 0x6627, + 0x9687: 0x679A, + 0x9688: 0x6BCE, + 0x9689: 0x54E9, + 0x968A: 0x69D9, + 0x968B: 0x5E55, + 0x968C: 0x819C, + 0x968D: 0x6795, + 0x968E: 0x9BAA, + 0x968F: 0x67FE, + 0x9690: 0x9C52, + 0x9691: 0x685D, + 0x9692: 0x4EA6, + 0x9693: 0x4FE3, + 0x9694: 0x53C8, + 0x9695: 0x62B9, + 0x9696: 0x672B, + 0x9697: 0x6CAB, + 0x9698: 0x8FC4, + 0x9699: 0x4FAD, + 0x969A: 0x7E6D, + 0x969B: 0x9EBF, + 0x969C: 0x4E07, + 0x969D: 0x6162, + 0x969E: 0x6E80, + 0x969F: 0x6F2B, + 0x96A0: 0x8513, + 0x96A1: 0x5473, + 0x96A2: 0x672A, + 0x96A3: 0x9B45, + 0x96A4: 0x5DF3, + 0x96A5: 0x7B95, + 0x96A6: 0x5CAC, + 0x96A7: 0x5BC6, + 0x96A8: 0x871C, + 0x96A9: 0x6E4A, + 0x96AA: 0x84D1, + 0x96AB: 0x7A14, + 0x96AC: 0x8108, + 0x96AD: 0x5999, + 0x96AE: 0x7C8D, + 0x96AF: 0x6C11, + 0x96B0: 0x7720, + 0x96B1: 0x52D9, + 0x96B2: 0x5922, + 0x96B3: 0x7121, + 0x96B4: 0x725F, + 0x96B5: 0x77DB, + 0x96B6: 0x9727, + 0x96B7: 0x9D61, + 0x96B8: 0x690B, + 0x96B9: 0x5A7F, + 0x96BA: 0x5A18, + 0x96BB: 0x51A5, + 0x96BC: 0x540D, + 0x96BD: 0x547D, + 0x96BE: 0x660E, + 0x96BF: 0x76DF, + 0x96C0: 0x8FF7, + 0x96C1: 0x9298, + 0x96C2: 0x9CF4, + 0x96C3: 0x59EA, + 0x96C4: 0x725D, + 0x96C5: 0x6EC5, + 0x96C6: 0x514D, + 0x96C7: 0x68C9, + 0x96C8: 0x7DBF, + 0x96C9: 0x7DEC, + 0x96CA: 0x9762, + 0x96CB: 0x9EBA, + 0x96CC: 0x6478, + 0x96CD: 0x6A21, + 0x96CE: 0x8302, + 0x96CF: 0x5984, + 0x96D0: 0x5B5F, + 0x96D1: 0x6BDB, + 0x96D2: 0x731B, + 0x96D3: 0x76F2, + 0x96D4: 0x7DB2, + 0x96D5: 0x8017, + 0x96D6: 0x8499, + 0x96D7: 0x5132, + 0x96D8: 0x6728, + 0x96D9: 0x9ED9, + 0x96DA: 0x76EE, + 0x96DB: 0x6762, + 0x96DC: 0x52FF, + 0x96DD: 0x9905, + 0x96DE: 0x5C24, + 0x96DF: 0x623B, + 0x96E0: 0x7C7E, + 0x96E1: 0x8CB0, + 0x96E2: 0x554F, + 0x96E3: 0x60B6, + 0x96E4: 0x7D0B, + 0x96E5: 0x9580, + 0x96E6: 0x5301, + 0x96E7: 0x4E5F, + 0x96E8: 0x51B6, + 0x96E9: 0x591C, + 0x96EA: 0x723A, + 0x96EB: 0x8036, + 0x96EC: 0x91CE, + 0x96ED: 0x5F25, + 0x96EE: 0x77E2, + 0x96EF: 0x5384, + 0x96F0: 0x5F79, + 0x96F1: 0x7D04, + 0x96F2: 0x85AC, + 0x96F3: 0x8A33, + 0x96F4: 0x8E8D, + 0x96F5: 0x9756, + 0x96F6: 0x67F3, + 0x96F7: 0x85AE, + 0x96F8: 0x9453, + 0x96F9: 0x6109, + 0x96FA: 0x6108, + 0x96FB: 0x6CB9, + 0x96FC: 0x7652, + 0x9740: 0x8AED, + 0x9741: 0x8F38, + 0x9742: 0x552F, + 0x9743: 0x4F51, + 0x9744: 0x512A, + 0x9745: 0x52C7, + 0x9746: 0x53CB, + 0x9747: 0x5BA5, + 0x9748: 0x5E7D, + 0x9749: 0x60A0, + 0x974A: 0x6182, + 0x974B: 0x63D6, + 0x974C: 0x6709, + 0x974D: 0x67DA, + 0x974E: 0x6E67, + 0x974F: 0x6D8C, + 0x9750: 0x7336, + 0x9751: 0x7337, + 0x9752: 0x7531, + 0x9753: 0x7950, + 0x9754: 0x88D5, + 0x9755: 0x8A98, + 0x9756: 0x904A, + 0x9757: 0x9091, + 0x9758: 0x90F5, + 0x9759: 0x96C4, + 0x975A: 0x878D, + 0x975B: 0x5915, + 0x975C: 0x4E88, + 0x975D: 0x4F59, + 0x975E: 0x4E0E, + 0x975F: 0x8A89, + 0x9760: 0x8F3F, + 0x9761: 0x9810, + 0x9762: 0x50AD, + 0x9763: 0x5E7C, + 0x9764: 0x5996, + 0x9765: 0x5BB9, + 0x9766: 0x5EB8, + 0x9767: 0x63DA, + 0x9768: 0x63FA, + 0x9769: 0x64C1, + 0x976A: 0x66DC, + 0x976B: 0x694A, + 0x976C: 0x69D8, + 0x976D: 0x6D0B, + 0x976E: 0x6EB6, + 0x976F: 0x7194, + 0x9770: 0x7528, + 0x9771: 0x7AAF, + 0x9772: 0x7F8A, + 0x9773: 0x8000, + 0x9774: 0x8449, + 0x9775: 0x84C9, + 0x9776: 0x8981, + 0x9777: 0x8B21, + 0x9778: 0x8E0A, + 0x9779: 0x9065, + 0x977A: 0x967D, + 0x977B: 0x990A, + 0x977C: 0x617E, + 0x977D: 0x6291, + 0x977E: 0x6B32, + 0x9780: 0x6C83, + 0x9781: 0x6D74, + 0x9782: 0x7FCC, + 0x9783: 0x7FFC, + 0x9784: 0x6DC0, + 0x9785: 0x7F85, + 0x9786: 0x87BA, + 0x9787: 0x88F8, + 0x9788: 0x6765, + 0x9789: 0x83B1, + 0x978A: 0x983C, + 0x978B: 0x96F7, + 0x978C: 0x6D1B, + 0x978D: 0x7D61, + 0x978E: 0x843D, + 0x978F: 0x916A, + 0x9790: 0x4E71, + 0x9791: 0x5375, + 0x9792: 0x5D50, + 0x9793: 0x6B04, + 0x9794: 0x6FEB, + 0x9795: 0x85CD, + 0x9796: 0x862D, + 0x9797: 0x89A7, + 0x9798: 0x5229, + 0x9799: 0x540F, + 0x979A: 0x5C65, + 0x979B: 0x674E, + 0x979C: 0x68A8, + 0x979D: 0x7406, + 0x979E: 0x7483, + 0x979F: 0x75E2, + 0x97A0: 0x88CF, + 0x97A1: 0x88E1, + 0x97A2: 0x91CC, + 0x97A3: 0x96E2, + 0x97A4: 0x9678, + 0x97A5: 0x5F8B, + 0x97A6: 0x7387, + 0x97A7: 0x7ACB, + 0x97A8: 0x844E, + 0x97A9: 0x63A0, + 0x97AA: 0x7565, + 0x97AB: 0x5289, + 0x97AC: 0x6D41, + 0x97AD: 0x6E9C, + 0x97AE: 0x7409, + 0x97AF: 0x7559, + 0x97B0: 0x786B, + 0x97B1: 0x7C92, + 0x97B2: 0x9686, + 0x97B3: 0x7ADC, + 0x97B4: 0x9F8D, + 0x97B5: 0x4FB6, + 0x97B6: 0x616E, + 0x97B7: 0x65C5, + 0x97B8: 0x865C, + 0x97B9: 0x4E86, + 0x97BA: 0x4EAE, + 0x97BB: 0x50DA, + 0x97BC: 0x4E21, + 0x97BD: 0x51CC, + 0x97BE: 0x5BEE, + 0x97BF: 0x6599, + 0x97C0: 0x6881, + 0x97C1: 0x6DBC, + 0x97C2: 0x731F, + 0x97C3: 0x7642, + 0x97C4: 0x77AD, + 0x97C5: 0x7A1C, + 0x97C6: 0x7CE7, + 0x97C7: 0x826F, + 0x97C8: 0x8AD2, + 0x97C9: 0x907C, + 0x97CA: 0x91CF, + 0x97CB: 0x9675, + 0x97CC: 0x9818, + 0x97CD: 0x529B, + 0x97CE: 0x7DD1, + 0x97CF: 0x502B, + 0x97D0: 0x5398, + 0x97D1: 0x6797, + 0x97D2: 0x6DCB, + 0x97D3: 0x71D0, + 0x97D4: 0x7433, + 0x97D5: 0x81E8, + 0x97D6: 0x8F2A, + 0x97D7: 0x96A3, + 0x97D8: 0x9C57, + 0x97D9: 0x9E9F, + 0x97DA: 0x7460, + 0x97DB: 0x5841, + 0x97DC: 0x6D99, + 0x97DD: 0x7D2F, + 0x97DE: 0x985E, + 0x97DF: 0x4EE4, + 0x97E0: 0x4F36, + 0x97E1: 0x4F8B, + 0x97E2: 0x51B7, + 0x97E3: 0x52B1, + 0x97E4: 0x5DBA, + 0x97E5: 0x601C, + 0x97E6: 0x73B2, + 0x97E7: 0x793C, + 0x97E8: 0x82D3, + 0x97E9: 0x9234, + 0x97EA: 0x96B7, + 0x97EB: 0x96F6, + 0x97EC: 0x970A, + 0x97ED: 0x9E97, + 0x97EE: 0x9F62, + 0x97EF: 0x66A6, + 0x97F0: 0x6B74, + 0x97F1: 0x5217, + 0x97F2: 0x52A3, + 0x97F3: 0x70C8, + 0x97F4: 0x88C2, + 0x97F5: 0x5EC9, + 0x97F6: 0x604B, + 0x97F7: 0x6190, + 0x97F8: 0x6F23, + 0x97F9: 0x7149, + 0x97FA: 0x7C3E, + 0x97FB: 0x7DF4, + 0x97FC: 0x806F, + 0x9840: 0x84EE, + 0x9841: 0x9023, + 0x9842: 0x932C, + 0x9843: 0x5442, + 0x9844: 0x9B6F, + 0x9845: 0x6AD3, + 0x9846: 0x7089, + 0x9847: 0x8CC2, + 0x9848: 0x8DEF, + 0x9849: 0x9732, + 0x984A: 0x52B4, + 0x984B: 0x5A41, + 0x984C: 0x5ECA, + 0x984D: 0x5F04, + 0x984E: 0x6717, + 0x984F: 0x697C, + 0x9850: 0x6994, + 0x9851: 0x6D6A, + 0x9852: 0x6F0F, + 0x9853: 0x7262, + 0x9854: 0x72FC, + 0x9855: 0x7BED, + 0x9856: 0x8001, + 0x9857: 0x807E, + 0x9858: 0x874B, + 0x9859: 0x90CE, + 0x985A: 0x516D, + 0x985B: 0x9E93, + 0x985C: 0x7984, + 0x985D: 0x808B, + 0x985E: 0x9332, + 0x985F: 0x8AD6, + 0x9860: 0x502D, + 0x9861: 0x548C, + 0x9862: 0x8A71, + 0x9863: 0x6B6A, + 0x9864: 0x8CC4, + 0x9865: 0x8107, + 0x9866: 0x60D1, + 0x9867: 0x67A0, + 0x9868: 0x9DF2, + 0x9869: 0x4E99, + 0x986A: 0x4E98, + 0x986B: 0x9C10, + 0x986C: 0x8A6B, + 0x986D: 0x85C1, + 0x986E: 0x8568, + 0x986F: 0x6900, + 0x9870: 0x6E7E, + 0x9871: 0x7897, + 0x9872: 0x8155, + 0x989F: 0x5F0C, + 0x98A0: 0x4E10, + 0x98A1: 0x4E15, + 0x98A2: 0x4E2A, + 0x98A3: 0x4E31, + 0x98A4: 0x4E36, + 0x98A5: 0x4E3C, + 0x98A6: 0x4E3F, + 0x98A7: 0x4E42, + 0x98A8: 0x4E56, + 0x98A9: 0x4E58, + 0x98AA: 0x4E82, + 0x98AB: 0x4E85, + 0x98AC: 0x8C6B, + 0x98AD: 0x4E8A, + 0x98AE: 0x8212, + 0x98AF: 0x5F0D, + 0x98B0: 0x4E8E, + 0x98B1: 0x4E9E, + 0x98B2: 0x4E9F, + 0x98B3: 0x4EA0, + 0x98B4: 0x4EA2, + 0x98B5: 0x4EB0, + 0x98B6: 0x4EB3, + 0x98B7: 0x4EB6, + 0x98B8: 0x4ECE, + 0x98B9: 0x4ECD, + 0x98BA: 0x4EC4, + 0x98BB: 0x4EC6, + 0x98BC: 0x4EC2, + 0x98BD: 0x4ED7, + 0x98BE: 0x4EDE, + 0x98BF: 0x4EED, + 0x98C0: 0x4EDF, + 0x98C1: 0x4EF7, + 0x98C2: 0x4F09, + 0x98C3: 0x4F5A, + 0x98C4: 0x4F30, + 0x98C5: 0x4F5B, + 0x98C6: 0x4F5D, + 0x98C7: 0x4F57, + 0x98C8: 0x4F47, + 0x98C9: 0x4F76, + 0x98CA: 0x4F88, + 0x98CB: 0x4F8F, + 0x98CC: 0x4F98, + 0x98CD: 0x4F7B, + 0x98CE: 0x4F69, + 0x98CF: 0x4F70, + 0x98D0: 0x4F91, + 0x98D1: 0x4F6F, + 0x98D2: 0x4F86, + 0x98D3: 0x4F96, + 0x98D4: 0x5118, + 0x98D5: 0x4FD4, + 0x98D6: 0x4FDF, + 0x98D7: 0x4FCE, + 0x98D8: 0x4FD8, + 0x98D9: 0x4FDB, + 0x98DA: 0x4FD1, + 0x98DB: 0x4FDA, + 0x98DC: 0x4FD0, + 0x98DD: 0x4FE4, + 0x98DE: 0x4FE5, + 0x98DF: 0x501A, + 0x98E0: 0x5028, + 0x98E1: 0x5014, + 0x98E2: 0x502A, + 0x98E3: 0x5025, + 0x98E4: 0x5005, + 0x98E5: 0x4F1C, + 0x98E6: 0x4FF6, + 0x98E7: 0x5021, + 0x98E8: 0x5029, + 0x98E9: 0x502C, + 0x98EA: 0x4FFE, + 0x98EB: 0x4FEF, + 0x98EC: 0x5011, + 0x98ED: 0x5006, + 0x98EE: 0x5043, + 0x98EF: 0x5047, + 0x98F0: 0x6703, + 0x98F1: 0x5055, + 0x98F2: 0x5050, + 0x98F3: 0x5048, + 0x98F4: 0x505A, + 0x98F5: 0x5056, + 0x98F6: 0x506C, + 0x98F7: 0x5078, + 0x98F8: 0x5080, + 0x98F9: 0x509A, + 0x98FA: 0x5085, + 0x98FB: 0x50B4, + 0x98FC: 0x50B2, + 0x9940: 0x50C9, + 0x9941: 0x50CA, + 0x9942: 0x50B3, + 0x9943: 0x50C2, + 0x9944: 0x50D6, + 0x9945: 0x50DE, + 0x9946: 0x50E5, + 0x9947: 0x50ED, + 0x9948: 0x50E3, + 0x9949: 0x50EE, + 0x994A: 0x50F9, + 0x994B: 0x50F5, + 0x994C: 0x5109, + 0x994D: 0x5101, + 0x994E: 0x5102, + 0x994F: 0x5116, + 0x9950: 0x5115, + 0x9951: 0x5114, + 0x9952: 0x511A, + 0x9953: 0x5121, + 0x9954: 0x513A, + 0x9955: 0x5137, + 0x9956: 0x513C, + 0x9957: 0x513B, + 0x9958: 0x513F, + 0x9959: 0x5140, + 0x995A: 0x5152, + 0x995B: 0x514C, + 0x995C: 0x5154, + 0x995D: 0x5162, + 0x995E: 0x7AF8, + 0x995F: 0x5169, + 0x9960: 0x516A, + 0x9961: 0x516E, + 0x9962: 0x5180, + 0x9963: 0x5182, + 0x9964: 0x56D8, + 0x9965: 0x518C, + 0x9966: 0x5189, + 0x9967: 0x518F, + 0x9968: 0x5191, + 0x9969: 0x5193, + 0x996A: 0x5195, + 0x996B: 0x5196, + 0x996C: 0x51A4, + 0x996D: 0x51A6, + 0x996E: 0x51A2, + 0x996F: 0x51A9, + 0x9970: 0x51AA, + 0x9971: 0x51AB, + 0x9972: 0x51B3, + 0x9973: 0x51B1, + 0x9974: 0x51B2, + 0x9975: 0x51B0, + 0x9976: 0x51B5, + 0x9977: 0x51BD, + 0x9978: 0x51C5, + 0x9979: 0x51C9, + 0x997A: 0x51DB, + 0x997B: 0x51E0, + 0x997C: 0x8655, + 0x997D: 0x51E9, + 0x997E: 0x51ED, + 0x9980: 0x51F0, + 0x9981: 0x51F5, + 0x9982: 0x51FE, + 0x9983: 0x5204, + 0x9984: 0x520B, + 0x9985: 0x5214, + 0x9986: 0x520E, + 0x9987: 0x5227, + 0x9988: 0x522A, + 0x9989: 0x522E, + 0x998A: 0x5233, + 0x998B: 0x5239, + 0x998C: 0x524F, + 0x998D: 0x5244, + 0x998E: 0x524B, + 0x998F: 0x524C, + 0x9990: 0x525E, + 0x9991: 0x5254, + 0x9992: 0x526A, + 0x9993: 0x5274, + 0x9994: 0x5269, + 0x9995: 0x5273, + 0x9996: 0x527F, + 0x9997: 0x527D, + 0x9998: 0x528D, + 0x9999: 0x5294, + 0x999A: 0x5292, + 0x999B: 0x5271, + 0x999C: 0x5288, + 0x999D: 0x5291, + 0x999E: 0x8FA8, + 0x999F: 0x8FA7, + 0x99A0: 0x52AC, + 0x99A1: 0x52AD, + 0x99A2: 0x52BC, + 0x99A3: 0x52B5, + 0x99A4: 0x52C1, + 0x99A5: 0x52CD, + 0x99A6: 0x52D7, + 0x99A7: 0x52DE, + 0x99A8: 0x52E3, + 0x99A9: 0x52E6, + 0x99AA: 0x98ED, + 0x99AB: 0x52E0, + 0x99AC: 0x52F3, + 0x99AD: 0x52F5, + 0x99AE: 0x52F8, + 0x99AF: 0x52F9, + 0x99B0: 0x5306, + 0x99B1: 0x5308, + 0x99B2: 0x7538, + 0x99B3: 0x530D, + 0x99B4: 0x5310, + 0x99B5: 0x530F, + 0x99B6: 0x5315, + 0x99B7: 0x531A, + 0x99B8: 0x5323, + 0x99B9: 0x532F, + 0x99BA: 0x5331, + 0x99BB: 0x5333, + 0x99BC: 0x5338, + 0x99BD: 0x5340, + 0x99BE: 0x5346, + 0x99BF: 0x5345, + 0x99C0: 0x4E17, + 0x99C1: 0x5349, + 0x99C2: 0x534D, + 0x99C3: 0x51D6, + 0x99C4: 0x535E, + 0x99C5: 0x5369, + 0x99C6: 0x536E, + 0x99C7: 0x5918, + 0x99C8: 0x537B, + 0x99C9: 0x5377, + 0x99CA: 0x5382, + 0x99CB: 0x5396, + 0x99CC: 0x53A0, + 0x99CD: 0x53A6, + 0x99CE: 0x53A5, + 0x99CF: 0x53AE, + 0x99D0: 0x53B0, + 0x99D1: 0x53B6, + 0x99D2: 0x53C3, + 0x99D3: 0x7C12, + 0x99D4: 0x96D9, + 0x99D5: 0x53DF, + 0x99D6: 0x66FC, + 0x99D7: 0x71EE, + 0x99D8: 0x53EE, + 0x99D9: 0x53E8, + 0x99DA: 0x53ED, + 0x99DB: 0x53FA, + 0x99DC: 0x5401, + 0x99DD: 0x543D, + 0x99DE: 0x5440, + 0x99DF: 0x542C, + 0x99E0: 0x542D, + 0x99E1: 0x543C, + 0x99E2: 0x542E, + 0x99E3: 0x5436, + 0x99E4: 0x5429, + 0x99E5: 0x541D, + 0x99E6: 0x544E, + 0x99E7: 0x548F, + 0x99E8: 0x5475, + 0x99E9: 0x548E, + 0x99EA: 0x545F, + 0x99EB: 0x5471, + 0x99EC: 0x5477, + 0x99ED: 0x5470, + 0x99EE: 0x5492, + 0x99EF: 0x547B, + 0x99F0: 0x5480, + 0x99F1: 0x5476, + 0x99F2: 0x5484, + 0x99F3: 0x5490, + 0x99F4: 0x5486, + 0x99F5: 0x54C7, + 0x99F6: 0x54A2, + 0x99F7: 0x54B8, + 0x99F8: 0x54A5, + 0x99F9: 0x54AC, + 0x99FA: 0x54C4, + 0x99FB: 0x54C8, + 0x99FC: 0x54A8, + 0x9A40: 0x54AB, + 0x9A41: 0x54C2, + 0x9A42: 0x54A4, + 0x9A43: 0x54BE, + 0x9A44: 0x54BC, + 0x9A45: 0x54D8, + 0x9A46: 0x54E5, + 0x9A47: 0x54E6, + 0x9A48: 0x550F, + 0x9A49: 0x5514, + 0x9A4A: 0x54FD, + 0x9A4B: 0x54EE, + 0x9A4C: 0x54ED, + 0x9A4D: 0x54FA, + 0x9A4E: 0x54E2, + 0x9A4F: 0x5539, + 0x9A50: 0x5540, + 0x9A51: 0x5563, + 0x9A52: 0x554C, + 0x9A53: 0x552E, + 0x9A54: 0x555C, + 0x9A55: 0x5545, + 0x9A56: 0x5556, + 0x9A57: 0x5557, + 0x9A58: 0x5538, + 0x9A59: 0x5533, + 0x9A5A: 0x555D, + 0x9A5B: 0x5599, + 0x9A5C: 0x5580, + 0x9A5D: 0x54AF, + 0x9A5E: 0x558A, + 0x9A5F: 0x559F, + 0x9A60: 0x557B, + 0x9A61: 0x557E, + 0x9A62: 0x5598, + 0x9A63: 0x559E, + 0x9A64: 0x55AE, + 0x9A65: 0x557C, + 0x9A66: 0x5583, + 0x9A67: 0x55A9, + 0x9A68: 0x5587, + 0x9A69: 0x55A8, + 0x9A6A: 0x55DA, + 0x9A6B: 0x55C5, + 0x9A6C: 0x55DF, + 0x9A6D: 0x55C4, + 0x9A6E: 0x55DC, + 0x9A6F: 0x55E4, + 0x9A70: 0x55D4, + 0x9A71: 0x5614, + 0x9A72: 0x55F7, + 0x9A73: 0x5616, + 0x9A74: 0x55FE, + 0x9A75: 0x55FD, + 0x9A76: 0x561B, + 0x9A77: 0x55F9, + 0x9A78: 0x564E, + 0x9A79: 0x5650, + 0x9A7A: 0x71DF, + 0x9A7B: 0x5634, + 0x9A7C: 0x5636, + 0x9A7D: 0x5632, + 0x9A7E: 0x5638, + 0x9A80: 0x566B, + 0x9A81: 0x5664, + 0x9A82: 0x562F, + 0x9A83: 0x566C, + 0x9A84: 0x566A, + 0x9A85: 0x5686, + 0x9A86: 0x5680, + 0x9A87: 0x568A, + 0x9A88: 0x56A0, + 0x9A89: 0x5694, + 0x9A8A: 0x568F, + 0x9A8B: 0x56A5, + 0x9A8C: 0x56AE, + 0x9A8D: 0x56B6, + 0x9A8E: 0x56B4, + 0x9A8F: 0x56C2, + 0x9A90: 0x56BC, + 0x9A91: 0x56C1, + 0x9A92: 0x56C3, + 0x9A93: 0x56C0, + 0x9A94: 0x56C8, + 0x9A95: 0x56CE, + 0x9A96: 0x56D1, + 0x9A97: 0x56D3, + 0x9A98: 0x56D7, + 0x9A99: 0x56EE, + 0x9A9A: 0x56F9, + 0x9A9B: 0x5700, + 0x9A9C: 0x56FF, + 0x9A9D: 0x5704, + 0x9A9E: 0x5709, + 0x9A9F: 0x5708, + 0x9AA0: 0x570B, + 0x9AA1: 0x570D, + 0x9AA2: 0x5713, + 0x9AA3: 0x5718, + 0x9AA4: 0x5716, + 0x9AA5: 0x55C7, + 0x9AA6: 0x571C, + 0x9AA7: 0x5726, + 0x9AA8: 0x5737, + 0x9AA9: 0x5738, + 0x9AAA: 0x574E, + 0x9AAB: 0x573B, + 0x9AAC: 0x5740, + 0x9AAD: 0x574F, + 0x9AAE: 0x5769, + 0x9AAF: 0x57C0, + 0x9AB0: 0x5788, + 0x9AB1: 0x5761, + 0x9AB2: 0x577F, + 0x9AB3: 0x5789, + 0x9AB4: 0x5793, + 0x9AB5: 0x57A0, + 0x9AB6: 0x57B3, + 0x9AB7: 0x57A4, + 0x9AB8: 0x57AA, + 0x9AB9: 0x57B0, + 0x9ABA: 0x57C3, + 0x9ABB: 0x57C6, + 0x9ABC: 0x57D4, + 0x9ABD: 0x57D2, + 0x9ABE: 0x57D3, + 0x9ABF: 0x580A, + 0x9AC0: 0x57D6, + 0x9AC1: 0x57E3, + 0x9AC2: 0x580B, + 0x9AC3: 0x5819, + 0x9AC4: 0x581D, + 0x9AC5: 0x5872, + 0x9AC6: 0x5821, + 0x9AC7: 0x5862, + 0x9AC8: 0x584B, + 0x9AC9: 0x5870, + 0x9ACA: 0x6BC0, + 0x9ACB: 0x5852, + 0x9ACC: 0x583D, + 0x9ACD: 0x5879, + 0x9ACE: 0x5885, + 0x9ACF: 0x58B9, + 0x9AD0: 0x589F, + 0x9AD1: 0x58AB, + 0x9AD2: 0x58BA, + 0x9AD3: 0x58DE, + 0x9AD4: 0x58BB, + 0x9AD5: 0x58B8, + 0x9AD6: 0x58AE, + 0x9AD7: 0x58C5, + 0x9AD8: 0x58D3, + 0x9AD9: 0x58D1, + 0x9ADA: 0x58D7, + 0x9ADB: 0x58D9, + 0x9ADC: 0x58D8, + 0x9ADD: 0x58E5, + 0x9ADE: 0x58DC, + 0x9ADF: 0x58E4, + 0x9AE0: 0x58DF, + 0x9AE1: 0x58EF, + 0x9AE2: 0x58FA, + 0x9AE3: 0x58F9, + 0x9AE4: 0x58FB, + 0x9AE5: 0x58FC, + 0x9AE6: 0x58FD, + 0x9AE7: 0x5902, + 0x9AE8: 0x590A, + 0x9AE9: 0x5910, + 0x9AEA: 0x591B, + 0x9AEB: 0x68A6, + 0x9AEC: 0x5925, + 0x9AED: 0x592C, + 0x9AEE: 0x592D, + 0x9AEF: 0x5932, + 0x9AF0: 0x5938, + 0x9AF1: 0x593E, + 0x9AF2: 0x7AD2, + 0x9AF3: 0x5955, + 0x9AF4: 0x5950, + 0x9AF5: 0x594E, + 0x9AF6: 0x595A, + 0x9AF7: 0x5958, + 0x9AF8: 0x5962, + 0x9AF9: 0x5960, + 0x9AFA: 0x5967, + 0x9AFB: 0x596C, + 0x9AFC: 0x5969, + 0x9B40: 0x5978, + 0x9B41: 0x5981, + 0x9B42: 0x599D, + 0x9B43: 0x4F5E, + 0x9B44: 0x4FAB, + 0x9B45: 0x59A3, + 0x9B46: 0x59B2, + 0x9B47: 0x59C6, + 0x9B48: 0x59E8, + 0x9B49: 0x59DC, + 0x9B4A: 0x598D, + 0x9B4B: 0x59D9, + 0x9B4C: 0x59DA, + 0x9B4D: 0x5A25, + 0x9B4E: 0x5A1F, + 0x9B4F: 0x5A11, + 0x9B50: 0x5A1C, + 0x9B51: 0x5A09, + 0x9B52: 0x5A1A, + 0x9B53: 0x5A40, + 0x9B54: 0x5A6C, + 0x9B55: 0x5A49, + 0x9B56: 0x5A35, + 0x9B57: 0x5A36, + 0x9B58: 0x5A62, + 0x9B59: 0x5A6A, + 0x9B5A: 0x5A9A, + 0x9B5B: 0x5ABC, + 0x9B5C: 0x5ABE, + 0x9B5D: 0x5ACB, + 0x9B5E: 0x5AC2, + 0x9B5F: 0x5ABD, + 0x9B60: 0x5AE3, + 0x9B61: 0x5AD7, + 0x9B62: 0x5AE6, + 0x9B63: 0x5AE9, + 0x9B64: 0x5AD6, + 0x9B65: 0x5AFA, + 0x9B66: 0x5AFB, + 0x9B67: 0x5B0C, + 0x9B68: 0x5B0B, + 0x9B69: 0x5B16, + 0x9B6A: 0x5B32, + 0x9B6B: 0x5AD0, + 0x9B6C: 0x5B2A, + 0x9B6D: 0x5B36, + 0x9B6E: 0x5B3E, + 0x9B6F: 0x5B43, + 0x9B70: 0x5B45, + 0x9B71: 0x5B40, + 0x9B72: 0x5B51, + 0x9B73: 0x5B55, + 0x9B74: 0x5B5A, + 0x9B75: 0x5B5B, + 0x9B76: 0x5B65, + 0x9B77: 0x5B69, + 0x9B78: 0x5B70, + 0x9B79: 0x5B73, + 0x9B7A: 0x5B75, + 0x9B7B: 0x5B78, + 0x9B7C: 0x6588, + 0x9B7D: 0x5B7A, + 0x9B7E: 0x5B80, + 0x9B80: 0x5B83, + 0x9B81: 0x5BA6, + 0x9B82: 0x5BB8, + 0x9B83: 0x5BC3, + 0x9B84: 0x5BC7, + 0x9B85: 0x5BC9, + 0x9B86: 0x5BD4, + 0x9B87: 0x5BD0, + 0x9B88: 0x5BE4, + 0x9B89: 0x5BE6, + 0x9B8A: 0x5BE2, + 0x9B8B: 0x5BDE, + 0x9B8C: 0x5BE5, + 0x9B8D: 0x5BEB, + 0x9B8E: 0x5BF0, + 0x9B8F: 0x5BF6, + 0x9B90: 0x5BF3, + 0x9B91: 0x5C05, + 0x9B92: 0x5C07, + 0x9B93: 0x5C08, + 0x9B94: 0x5C0D, + 0x9B95: 0x5C13, + 0x9B96: 0x5C20, + 0x9B97: 0x5C22, + 0x9B98: 0x5C28, + 0x9B99: 0x5C38, + 0x9B9A: 0x5C39, + 0x9B9B: 0x5C41, + 0x9B9C: 0x5C46, + 0x9B9D: 0x5C4E, + 0x9B9E: 0x5C53, + 0x9B9F: 0x5C50, + 0x9BA0: 0x5C4F, + 0x9BA1: 0x5B71, + 0x9BA2: 0x5C6C, + 0x9BA3: 0x5C6E, + 0x9BA4: 0x4E62, + 0x9BA5: 0x5C76, + 0x9BA6: 0x5C79, + 0x9BA7: 0x5C8C, + 0x9BA8: 0x5C91, + 0x9BA9: 0x5C94, + 0x9BAA: 0x599B, + 0x9BAB: 0x5CAB, + 0x9BAC: 0x5CBB, + 0x9BAD: 0x5CB6, + 0x9BAE: 0x5CBC, + 0x9BAF: 0x5CB7, + 0x9BB0: 0x5CC5, + 0x9BB1: 0x5CBE, + 0x9BB2: 0x5CC7, + 0x9BB3: 0x5CD9, + 0x9BB4: 0x5CE9, + 0x9BB5: 0x5CFD, + 0x9BB6: 0x5CFA, + 0x9BB7: 0x5CED, + 0x9BB8: 0x5D8C, + 0x9BB9: 0x5CEA, + 0x9BBA: 0x5D0B, + 0x9BBB: 0x5D15, + 0x9BBC: 0x5D17, + 0x9BBD: 0x5D5C, + 0x9BBE: 0x5D1F, + 0x9BBF: 0x5D1B, + 0x9BC0: 0x5D11, + 0x9BC1: 0x5D14, + 0x9BC2: 0x5D22, + 0x9BC3: 0x5D1A, + 0x9BC4: 0x5D19, + 0x9BC5: 0x5D18, + 0x9BC6: 0x5D4C, + 0x9BC7: 0x5D52, + 0x9BC8: 0x5D4E, + 0x9BC9: 0x5D4B, + 0x9BCA: 0x5D6C, + 0x9BCB: 0x5D73, + 0x9BCC: 0x5D76, + 0x9BCD: 0x5D87, + 0x9BCE: 0x5D84, + 0x9BCF: 0x5D82, + 0x9BD0: 0x5DA2, + 0x9BD1: 0x5D9D, + 0x9BD2: 0x5DAC, + 0x9BD3: 0x5DAE, + 0x9BD4: 0x5DBD, + 0x9BD5: 0x5D90, + 0x9BD6: 0x5DB7, + 0x9BD7: 0x5DBC, + 0x9BD8: 0x5DC9, + 0x9BD9: 0x5DCD, + 0x9BDA: 0x5DD3, + 0x9BDB: 0x5DD2, + 0x9BDC: 0x5DD6, + 0x9BDD: 0x5DDB, + 0x9BDE: 0x5DEB, + 0x9BDF: 0x5DF2, + 0x9BE0: 0x5DF5, + 0x9BE1: 0x5E0B, + 0x9BE2: 0x5E1A, + 0x9BE3: 0x5E19, + 0x9BE4: 0x5E11, + 0x9BE5: 0x5E1B, + 0x9BE6: 0x5E36, + 0x9BE7: 0x5E37, + 0x9BE8: 0x5E44, + 0x9BE9: 0x5E43, + 0x9BEA: 0x5E40, + 0x9BEB: 0x5E4E, + 0x9BEC: 0x5E57, + 0x9BED: 0x5E54, + 0x9BEE: 0x5E5F, + 0x9BEF: 0x5E62, + 0x9BF0: 0x5E64, + 0x9BF1: 0x5E47, + 0x9BF2: 0x5E75, + 0x9BF3: 0x5E76, + 0x9BF4: 0x5E7A, + 0x9BF5: 0x9EBC, + 0x9BF6: 0x5E7F, + 0x9BF7: 0x5EA0, + 0x9BF8: 0x5EC1, + 0x9BF9: 0x5EC2, + 0x9BFA: 0x5EC8, + 0x9BFB: 0x5ED0, + 0x9BFC: 0x5ECF, + 0x9C40: 0x5ED6, + 0x9C41: 0x5EE3, + 0x9C42: 0x5EDD, + 0x9C43: 0x5EDA, + 0x9C44: 0x5EDB, + 0x9C45: 0x5EE2, + 0x9C46: 0x5EE1, + 0x9C47: 0x5EE8, + 0x9C48: 0x5EE9, + 0x9C49: 0x5EEC, + 0x9C4A: 0x5EF1, + 0x9C4B: 0x5EF3, + 0x9C4C: 0x5EF0, + 0x9C4D: 0x5EF4, + 0x9C4E: 0x5EF8, + 0x9C4F: 0x5EFE, + 0x9C50: 0x5F03, + 0x9C51: 0x5F09, + 0x9C52: 0x5F5D, + 0x9C53: 0x5F5C, + 0x9C54: 0x5F0B, + 0x9C55: 0x5F11, + 0x9C56: 0x5F16, + 0x9C57: 0x5F29, + 0x9C58: 0x5F2D, + 0x9C59: 0x5F38, + 0x9C5A: 0x5F41, + 0x9C5B: 0x5F48, + 0x9C5C: 0x5F4C, + 0x9C5D: 0x5F4E, + 0x9C5E: 0x5F2F, + 0x9C5F: 0x5F51, + 0x9C60: 0x5F56, + 0x9C61: 0x5F57, + 0x9C62: 0x5F59, + 0x9C63: 0x5F61, + 0x9C64: 0x5F6D, + 0x9C65: 0x5F73, + 0x9C66: 0x5F77, + 0x9C67: 0x5F83, + 0x9C68: 0x5F82, + 0x9C69: 0x5F7F, + 0x9C6A: 0x5F8A, + 0x9C6B: 0x5F88, + 0x9C6C: 0x5F91, + 0x9C6D: 0x5F87, + 0x9C6E: 0x5F9E, + 0x9C6F: 0x5F99, + 0x9C70: 0x5F98, + 0x9C71: 0x5FA0, + 0x9C72: 0x5FA8, + 0x9C73: 0x5FAD, + 0x9C74: 0x5FBC, + 0x9C75: 0x5FD6, + 0x9C76: 0x5FFB, + 0x9C77: 0x5FE4, + 0x9C78: 0x5FF8, + 0x9C79: 0x5FF1, + 0x9C7A: 0x5FDD, + 0x9C7B: 0x60B3, + 0x9C7C: 0x5FFF, + 0x9C7D: 0x6021, + 0x9C7E: 0x6060, + 0x9C80: 0x6019, + 0x9C81: 0x6010, + 0x9C82: 0x6029, + 0x9C83: 0x600E, + 0x9C84: 0x6031, + 0x9C85: 0x601B, + 0x9C86: 0x6015, + 0x9C87: 0x602B, + 0x9C88: 0x6026, + 0x9C89: 0x600F, + 0x9C8A: 0x603A, + 0x9C8B: 0x605A, + 0x9C8C: 0x6041, + 0x9C8D: 0x606A, + 0x9C8E: 0x6077, + 0x9C8F: 0x605F, + 0x9C90: 0x604A, + 0x9C91: 0x6046, + 0x9C92: 0x604D, + 0x9C93: 0x6063, + 0x9C94: 0x6043, + 0x9C95: 0x6064, + 0x9C96: 0x6042, + 0x9C97: 0x606C, + 0x9C98: 0x606B, + 0x9C99: 0x6059, + 0x9C9A: 0x6081, + 0x9C9B: 0x608D, + 0x9C9C: 0x60E7, + 0x9C9D: 0x6083, + 0x9C9E: 0x609A, + 0x9C9F: 0x6084, + 0x9CA0: 0x609B, + 0x9CA1: 0x6096, + 0x9CA2: 0x6097, + 0x9CA3: 0x6092, + 0x9CA4: 0x60A7, + 0x9CA5: 0x608B, + 0x9CA6: 0x60E1, + 0x9CA7: 0x60B8, + 0x9CA8: 0x60E0, + 0x9CA9: 0x60D3, + 0x9CAA: 0x60B4, + 0x9CAB: 0x5FF0, + 0x9CAC: 0x60BD, + 0x9CAD: 0x60C6, + 0x9CAE: 0x60B5, + 0x9CAF: 0x60D8, + 0x9CB0: 0x614D, + 0x9CB1: 0x6115, + 0x9CB2: 0x6106, + 0x9CB3: 0x60F6, + 0x9CB4: 0x60F7, + 0x9CB5: 0x6100, + 0x9CB6: 0x60F4, + 0x9CB7: 0x60FA, + 0x9CB8: 0x6103, + 0x9CB9: 0x6121, + 0x9CBA: 0x60FB, + 0x9CBB: 0x60F1, + 0x9CBC: 0x610D, + 0x9CBD: 0x610E, + 0x9CBE: 0x6147, + 0x9CBF: 0x613E, + 0x9CC0: 0x6128, + 0x9CC1: 0x6127, + 0x9CC2: 0x614A, + 0x9CC3: 0x613F, + 0x9CC4: 0x613C, + 0x9CC5: 0x612C, + 0x9CC6: 0x6134, + 0x9CC7: 0x613D, + 0x9CC8: 0x6142, + 0x9CC9: 0x6144, + 0x9CCA: 0x6173, + 0x9CCB: 0x6177, + 0x9CCC: 0x6158, + 0x9CCD: 0x6159, + 0x9CCE: 0x615A, + 0x9CCF: 0x616B, + 0x9CD0: 0x6174, + 0x9CD1: 0x616F, + 0x9CD2: 0x6165, + 0x9CD3: 0x6171, + 0x9CD4: 0x615F, + 0x9CD5: 0x615D, + 0x9CD6: 0x6153, + 0x9CD7: 0x6175, + 0x9CD8: 0x6199, + 0x9CD9: 0x6196, + 0x9CDA: 0x6187, + 0x9CDB: 0x61AC, + 0x9CDC: 0x6194, + 0x9CDD: 0x619A, + 0x9CDE: 0x618A, + 0x9CDF: 0x6191, + 0x9CE0: 0x61AB, + 0x9CE1: 0x61AE, + 0x9CE2: 0x61CC, + 0x9CE3: 0x61CA, + 0x9CE4: 0x61C9, + 0x9CE5: 0x61F7, + 0x9CE6: 0x61C8, + 0x9CE7: 0x61C3, + 0x9CE8: 0x61C6, + 0x9CE9: 0x61BA, + 0x9CEA: 0x61CB, + 0x9CEB: 0x7F79, + 0x9CEC: 0x61CD, + 0x9CED: 0x61E6, + 0x9CEE: 0x61E3, + 0x9CEF: 0x61F6, + 0x9CF0: 0x61FA, + 0x9CF1: 0x61F4, + 0x9CF2: 0x61FF, + 0x9CF3: 0x61FD, + 0x9CF4: 0x61FC, + 0x9CF5: 0x61FE, + 0x9CF6: 0x6200, + 0x9CF7: 0x6208, + 0x9CF8: 0x6209, + 0x9CF9: 0x620D, + 0x9CFA: 0x620C, + 0x9CFB: 0x6214, + 0x9CFC: 0x621B, + 0x9D40: 0x621E, + 0x9D41: 0x6221, + 0x9D42: 0x622A, + 0x9D43: 0x622E, + 0x9D44: 0x6230, + 0x9D45: 0x6232, + 0x9D46: 0x6233, + 0x9D47: 0x6241, + 0x9D48: 0x624E, + 0x9D49: 0x625E, + 0x9D4A: 0x6263, + 0x9D4B: 0x625B, + 0x9D4C: 0x6260, + 0x9D4D: 0x6268, + 0x9D4E: 0x627C, + 0x9D4F: 0x6282, + 0x9D50: 0x6289, + 0x9D51: 0x627E, + 0x9D52: 0x6292, + 0x9D53: 0x6293, + 0x9D54: 0x6296, + 0x9D55: 0x62D4, + 0x9D56: 0x6283, + 0x9D57: 0x6294, + 0x9D58: 0x62D7, + 0x9D59: 0x62D1, + 0x9D5A: 0x62BB, + 0x9D5B: 0x62CF, + 0x9D5C: 0x62FF, + 0x9D5D: 0x62C6, + 0x9D5E: 0x64D4, + 0x9D5F: 0x62C8, + 0x9D60: 0x62DC, + 0x9D61: 0x62CC, + 0x9D62: 0x62CA, + 0x9D63: 0x62C2, + 0x9D64: 0x62C7, + 0x9D65: 0x629B, + 0x9D66: 0x62C9, + 0x9D67: 0x630C, + 0x9D68: 0x62EE, + 0x9D69: 0x62F1, + 0x9D6A: 0x6327, + 0x9D6B: 0x6302, + 0x9D6C: 0x6308, + 0x9D6D: 0x62EF, + 0x9D6E: 0x62F5, + 0x9D6F: 0x6350, + 0x9D70: 0x633E, + 0x9D71: 0x634D, + 0x9D72: 0x641C, + 0x9D73: 0x634F, + 0x9D74: 0x6396, + 0x9D75: 0x638E, + 0x9D76: 0x6380, + 0x9D77: 0x63AB, + 0x9D78: 0x6376, + 0x9D79: 0x63A3, + 0x9D7A: 0x638F, + 0x9D7B: 0x6389, + 0x9D7C: 0x639F, + 0x9D7D: 0x63B5, + 0x9D7E: 0x636B, + 0x9D80: 0x6369, + 0x9D81: 0x63BE, + 0x9D82: 0x63E9, + 0x9D83: 0x63C0, + 0x9D84: 0x63C6, + 0x9D85: 0x63E3, + 0x9D86: 0x63C9, + 0x9D87: 0x63D2, + 0x9D88: 0x63F6, + 0x9D89: 0x63C4, + 0x9D8A: 0x6416, + 0x9D8B: 0x6434, + 0x9D8C: 0x6406, + 0x9D8D: 0x6413, + 0x9D8E: 0x6426, + 0x9D8F: 0x6436, + 0x9D90: 0x651D, + 0x9D91: 0x6417, + 0x9D92: 0x6428, + 0x9D93: 0x640F, + 0x9D94: 0x6467, + 0x9D95: 0x646F, + 0x9D96: 0x6476, + 0x9D97: 0x644E, + 0x9D98: 0x652A, + 0x9D99: 0x6495, + 0x9D9A: 0x6493, + 0x9D9B: 0x64A5, + 0x9D9C: 0x64A9, + 0x9D9D: 0x6488, + 0x9D9E: 0x64BC, + 0x9D9F: 0x64DA, + 0x9DA0: 0x64D2, + 0x9DA1: 0x64C5, + 0x9DA2: 0x64C7, + 0x9DA3: 0x64BB, + 0x9DA4: 0x64D8, + 0x9DA5: 0x64C2, + 0x9DA6: 0x64F1, + 0x9DA7: 0x64E7, + 0x9DA8: 0x8209, + 0x9DA9: 0x64E0, + 0x9DAA: 0x64E1, + 0x9DAB: 0x62AC, + 0x9DAC: 0x64E3, + 0x9DAD: 0x64EF, + 0x9DAE: 0x652C, + 0x9DAF: 0x64F6, + 0x9DB0: 0x64F4, + 0x9DB1: 0x64F2, + 0x9DB2: 0x64FA, + 0x9DB3: 0x6500, + 0x9DB4: 0x64FD, + 0x9DB5: 0x6518, + 0x9DB6: 0x651C, + 0x9DB7: 0x6505, + 0x9DB8: 0x6524, + 0x9DB9: 0x6523, + 0x9DBA: 0x652B, + 0x9DBB: 0x6534, + 0x9DBC: 0x6535, + 0x9DBD: 0x6537, + 0x9DBE: 0x6536, + 0x9DBF: 0x6538, + 0x9DC0: 0x754B, + 0x9DC1: 0x6548, + 0x9DC2: 0x6556, + 0x9DC3: 0x6555, + 0x9DC4: 0x654D, + 0x9DC5: 0x6558, + 0x9DC6: 0x655E, + 0x9DC7: 0x655D, + 0x9DC8: 0x6572, + 0x9DC9: 0x6578, + 0x9DCA: 0x6582, + 0x9DCB: 0x6583, + 0x9DCC: 0x8B8A, + 0x9DCD: 0x659B, + 0x9DCE: 0x659F, + 0x9DCF: 0x65AB, + 0x9DD0: 0x65B7, + 0x9DD1: 0x65C3, + 0x9DD2: 0x65C6, + 0x9DD3: 0x65C1, + 0x9DD4: 0x65C4, + 0x9DD5: 0x65CC, + 0x9DD6: 0x65D2, + 0x9DD7: 0x65DB, + 0x9DD8: 0x65D9, + 0x9DD9: 0x65E0, + 0x9DDA: 0x65E1, + 0x9DDB: 0x65F1, + 0x9DDC: 0x6772, + 0x9DDD: 0x660A, + 0x9DDE: 0x6603, + 0x9DDF: 0x65FB, + 0x9DE0: 0x6773, + 0x9DE1: 0x6635, + 0x9DE2: 0x6636, + 0x9DE3: 0x6634, + 0x9DE4: 0x661C, + 0x9DE5: 0x664F, + 0x9DE6: 0x6644, + 0x9DE7: 0x6649, + 0x9DE8: 0x6641, + 0x9DE9: 0x665E, + 0x9DEA: 0x665D, + 0x9DEB: 0x6664, + 0x9DEC: 0x6667, + 0x9DED: 0x6668, + 0x9DEE: 0x665F, + 0x9DEF: 0x6662, + 0x9DF0: 0x6670, + 0x9DF1: 0x6683, + 0x9DF2: 0x6688, + 0x9DF3: 0x668E, + 0x9DF4: 0x6689, + 0x9DF5: 0x6684, + 0x9DF6: 0x6698, + 0x9DF7: 0x669D, + 0x9DF8: 0x66C1, + 0x9DF9: 0x66B9, + 0x9DFA: 0x66C9, + 0x9DFB: 0x66BE, + 0x9DFC: 0x66BC, + 0x9E40: 0x66C4, + 0x9E41: 0x66B8, + 0x9E42: 0x66D6, + 0x9E43: 0x66DA, + 0x9E44: 0x66E0, + 0x9E45: 0x663F, + 0x9E46: 0x66E6, + 0x9E47: 0x66E9, + 0x9E48: 0x66F0, + 0x9E49: 0x66F5, + 0x9E4A: 0x66F7, + 0x9E4B: 0x670F, + 0x9E4C: 0x6716, + 0x9E4D: 0x671E, + 0x9E4E: 0x6726, + 0x9E4F: 0x6727, + 0x9E50: 0x9738, + 0x9E51: 0x672E, + 0x9E52: 0x673F, + 0x9E53: 0x6736, + 0x9E54: 0x6741, + 0x9E55: 0x6738, + 0x9E56: 0x6737, + 0x9E57: 0x6746, + 0x9E58: 0x675E, + 0x9E59: 0x6760, + 0x9E5A: 0x6759, + 0x9E5B: 0x6763, + 0x9E5C: 0x6764, + 0x9E5D: 0x6789, + 0x9E5E: 0x6770, + 0x9E5F: 0x67A9, + 0x9E60: 0x677C, + 0x9E61: 0x676A, + 0x9E62: 0x678C, + 0x9E63: 0x678B, + 0x9E64: 0x67A6, + 0x9E65: 0x67A1, + 0x9E66: 0x6785, + 0x9E67: 0x67B7, + 0x9E68: 0x67EF, + 0x9E69: 0x67B4, + 0x9E6A: 0x67EC, + 0x9E6B: 0x67B3, + 0x9E6C: 0x67E9, + 0x9E6D: 0x67B8, + 0x9E6E: 0x67E4, + 0x9E6F: 0x67DE, + 0x9E70: 0x67DD, + 0x9E71: 0x67E2, + 0x9E72: 0x67EE, + 0x9E73: 0x67B9, + 0x9E74: 0x67CE, + 0x9E75: 0x67C6, + 0x9E76: 0x67E7, + 0x9E77: 0x6A9C, + 0x9E78: 0x681E, + 0x9E79: 0x6846, + 0x9E7A: 0x6829, + 0x9E7B: 0x6840, + 0x9E7C: 0x684D, + 0x9E7D: 0x6832, + 0x9E7E: 0x684E, + 0x9E80: 0x68B3, + 0x9E81: 0x682B, + 0x9E82: 0x6859, + 0x9E83: 0x6863, + 0x9E84: 0x6877, + 0x9E85: 0x687F, + 0x9E86: 0x689F, + 0x9E87: 0x688F, + 0x9E88: 0x68AD, + 0x9E89: 0x6894, + 0x9E8A: 0x689D, + 0x9E8B: 0x689B, + 0x9E8C: 0x6883, + 0x9E8D: 0x6AAE, + 0x9E8E: 0x68B9, + 0x9E8F: 0x6874, + 0x9E90: 0x68B5, + 0x9E91: 0x68A0, + 0x9E92: 0x68BA, + 0x9E93: 0x690F, + 0x9E94: 0x688D, + 0x9E95: 0x687E, + 0x9E96: 0x6901, + 0x9E97: 0x68CA, + 0x9E98: 0x6908, + 0x9E99: 0x68D8, + 0x9E9A: 0x6922, + 0x9E9B: 0x6926, + 0x9E9C: 0x68E1, + 0x9E9D: 0x690C, + 0x9E9E: 0x68CD, + 0x9E9F: 0x68D4, + 0x9EA0: 0x68E7, + 0x9EA1: 0x68D5, + 0x9EA2: 0x6936, + 0x9EA3: 0x6912, + 0x9EA4: 0x6904, + 0x9EA5: 0x68D7, + 0x9EA6: 0x68E3, + 0x9EA7: 0x6925, + 0x9EA8: 0x68F9, + 0x9EA9: 0x68E0, + 0x9EAA: 0x68EF, + 0x9EAB: 0x6928, + 0x9EAC: 0x692A, + 0x9EAD: 0x691A, + 0x9EAE: 0x6923, + 0x9EAF: 0x6921, + 0x9EB0: 0x68C6, + 0x9EB1: 0x6979, + 0x9EB2: 0x6977, + 0x9EB3: 0x695C, + 0x9EB4: 0x6978, + 0x9EB5: 0x696B, + 0x9EB6: 0x6954, + 0x9EB7: 0x697E, + 0x9EB8: 0x696E, + 0x9EB9: 0x6939, + 0x9EBA: 0x6974, + 0x9EBB: 0x693D, + 0x9EBC: 0x6959, + 0x9EBD: 0x6930, + 0x9EBE: 0x6961, + 0x9EBF: 0x695E, + 0x9EC0: 0x695D, + 0x9EC1: 0x6981, + 0x9EC2: 0x696A, + 0x9EC3: 0x69B2, + 0x9EC4: 0x69AE, + 0x9EC5: 0x69D0, + 0x9EC6: 0x69BF, + 0x9EC7: 0x69C1, + 0x9EC8: 0x69D3, + 0x9EC9: 0x69BE, + 0x9ECA: 0x69CE, + 0x9ECB: 0x5BE8, + 0x9ECC: 0x69CA, + 0x9ECD: 0x69DD, + 0x9ECE: 0x69BB, + 0x9ECF: 0x69C3, + 0x9ED0: 0x69A7, + 0x9ED1: 0x6A2E, + 0x9ED2: 0x6991, + 0x9ED3: 0x69A0, + 0x9ED4: 0x699C, + 0x9ED5: 0x6995, + 0x9ED6: 0x69B4, + 0x9ED7: 0x69DE, + 0x9ED8: 0x69E8, + 0x9ED9: 0x6A02, + 0x9EDA: 0x6A1B, + 0x9EDB: 0x69FF, + 0x9EDC: 0x6B0A, + 0x9EDD: 0x69F9, + 0x9EDE: 0x69F2, + 0x9EDF: 0x69E7, + 0x9EE0: 0x6A05, + 0x9EE1: 0x69B1, + 0x9EE2: 0x6A1E, + 0x9EE3: 0x69ED, + 0x9EE4: 0x6A14, + 0x9EE5: 0x69EB, + 0x9EE6: 0x6A0A, + 0x9EE7: 0x6A12, + 0x9EE8: 0x6AC1, + 0x9EE9: 0x6A23, + 0x9EEA: 0x6A13, + 0x9EEB: 0x6A44, + 0x9EEC: 0x6A0C, + 0x9EED: 0x6A72, + 0x9EEE: 0x6A36, + 0x9EEF: 0x6A78, + 0x9EF0: 0x6A47, + 0x9EF1: 0x6A62, + 0x9EF2: 0x6A59, + 0x9EF3: 0x6A66, + 0x9EF4: 0x6A48, + 0x9EF5: 0x6A38, + 0x9EF6: 0x6A22, + 0x9EF7: 0x6A90, + 0x9EF8: 0x6A8D, + 0x9EF9: 0x6AA0, + 0x9EFA: 0x6A84, + 0x9EFB: 0x6AA2, + 0x9EFC: 0x6AA3, + 0x9F40: 0x6A97, + 0x9F41: 0x8617, + 0x9F42: 0x6ABB, + 0x9F43: 0x6AC3, + 0x9F44: 0x6AC2, + 0x9F45: 0x6AB8, + 0x9F46: 0x6AB3, + 0x9F47: 0x6AAC, + 0x9F48: 0x6ADE, + 0x9F49: 0x6AD1, + 0x9F4A: 0x6ADF, + 0x9F4B: 0x6AAA, + 0x9F4C: 0x6ADA, + 0x9F4D: 0x6AEA, + 0x9F4E: 0x6AFB, + 0x9F4F: 0x6B05, + 0x9F50: 0x8616, + 0x9F51: 0x6AFA, + 0x9F52: 0x6B12, + 0x9F53: 0x6B16, + 0x9F54: 0x9B31, + 0x9F55: 0x6B1F, + 0x9F56: 0x6B38, + 0x9F57: 0x6B37, + 0x9F58: 0x76DC, + 0x9F59: 0x6B39, + 0x9F5A: 0x98EE, + 0x9F5B: 0x6B47, + 0x9F5C: 0x6B43, + 0x9F5D: 0x6B49, + 0x9F5E: 0x6B50, + 0x9F5F: 0x6B59, + 0x9F60: 0x6B54, + 0x9F61: 0x6B5B, + 0x9F62: 0x6B5F, + 0x9F63: 0x6B61, + 0x9F64: 0x6B78, + 0x9F65: 0x6B79, + 0x9F66: 0x6B7F, + 0x9F67: 0x6B80, + 0x9F68: 0x6B84, + 0x9F69: 0x6B83, + 0x9F6A: 0x6B8D, + 0x9F6B: 0x6B98, + 0x9F6C: 0x6B95, + 0x9F6D: 0x6B9E, + 0x9F6E: 0x6BA4, + 0x9F6F: 0x6BAA, + 0x9F70: 0x6BAB, + 0x9F71: 0x6BAF, + 0x9F72: 0x6BB2, + 0x9F73: 0x6BB1, + 0x9F74: 0x6BB3, + 0x9F75: 0x6BB7, + 0x9F76: 0x6BBC, + 0x9F77: 0x6BC6, + 0x9F78: 0x6BCB, + 0x9F79: 0x6BD3, + 0x9F7A: 0x6BDF, + 0x9F7B: 0x6BEC, + 0x9F7C: 0x6BEB, + 0x9F7D: 0x6BF3, + 0x9F7E: 0x6BEF, + 0x9F80: 0x9EBE, + 0x9F81: 0x6C08, + 0x9F82: 0x6C13, + 0x9F83: 0x6C14, + 0x9F84: 0x6C1B, + 0x9F85: 0x6C24, + 0x9F86: 0x6C23, + 0x9F87: 0x6C5E, + 0x9F88: 0x6C55, + 0x9F89: 0x6C62, + 0x9F8A: 0x6C6A, + 0x9F8B: 0x6C82, + 0x9F8C: 0x6C8D, + 0x9F8D: 0x6C9A, + 0x9F8E: 0x6C81, + 0x9F8F: 0x6C9B, + 0x9F90: 0x6C7E, + 0x9F91: 0x6C68, + 0x9F92: 0x6C73, + 0x9F93: 0x6C92, + 0x9F94: 0x6C90, + 0x9F95: 0x6CC4, + 0x9F96: 0x6CF1, + 0x9F97: 0x6CD3, + 0x9F98: 0x6CBD, + 0x9F99: 0x6CD7, + 0x9F9A: 0x6CC5, + 0x9F9B: 0x6CDD, + 0x9F9C: 0x6CAE, + 0x9F9D: 0x6CB1, + 0x9F9E: 0x6CBE, + 0x9F9F: 0x6CBA, + 0x9FA0: 0x6CDB, + 0x9FA1: 0x6CEF, + 0x9FA2: 0x6CD9, + 0x9FA3: 0x6CEA, + 0x9FA4: 0x6D1F, + 0x9FA5: 0x884D, + 0x9FA6: 0x6D36, + 0x9FA7: 0x6D2B, + 0x9FA8: 0x6D3D, + 0x9FA9: 0x6D38, + 0x9FAA: 0x6D19, + 0x9FAB: 0x6D35, + 0x9FAC: 0x6D33, + 0x9FAD: 0x6D12, + 0x9FAE: 0x6D0C, + 0x9FAF: 0x6D63, + 0x9FB0: 0x6D93, + 0x9FB1: 0x6D64, + 0x9FB2: 0x6D5A, + 0x9FB3: 0x6D79, + 0x9FB4: 0x6D59, + 0x9FB5: 0x6D8E, + 0x9FB6: 0x6D95, + 0x9FB7: 0x6FE4, + 0x9FB8: 0x6D85, + 0x9FB9: 0x6DF9, + 0x9FBA: 0x6E15, + 0x9FBB: 0x6E0A, + 0x9FBC: 0x6DB5, + 0x9FBD: 0x6DC7, + 0x9FBE: 0x6DE6, + 0x9FBF: 0x6DB8, + 0x9FC0: 0x6DC6, + 0x9FC1: 0x6DEC, + 0x9FC2: 0x6DDE, + 0x9FC3: 0x6DCC, + 0x9FC4: 0x6DE8, + 0x9FC5: 0x6DD2, + 0x9FC6: 0x6DC5, + 0x9FC7: 0x6DFA, + 0x9FC8: 0x6DD9, + 0x9FC9: 0x6DE4, + 0x9FCA: 0x6DD5, + 0x9FCB: 0x6DEA, + 0x9FCC: 0x6DEE, + 0x9FCD: 0x6E2D, + 0x9FCE: 0x6E6E, + 0x9FCF: 0x6E2E, + 0x9FD0: 0x6E19, + 0x9FD1: 0x6E72, + 0x9FD2: 0x6E5F, + 0x9FD3: 0x6E3E, + 0x9FD4: 0x6E23, + 0x9FD5: 0x6E6B, + 0x9FD6: 0x6E2B, + 0x9FD7: 0x6E76, + 0x9FD8: 0x6E4D, + 0x9FD9: 0x6E1F, + 0x9FDA: 0x6E43, + 0x9FDB: 0x6E3A, + 0x9FDC: 0x6E4E, + 0x9FDD: 0x6E24, + 0x9FDE: 0x6EFF, + 0x9FDF: 0x6E1D, + 0x9FE0: 0x6E38, + 0x9FE1: 0x6E82, + 0x9FE2: 0x6EAA, + 0x9FE3: 0x6E98, + 0x9FE4: 0x6EC9, + 0x9FE5: 0x6EB7, + 0x9FE6: 0x6ED3, + 0x9FE7: 0x6EBD, + 0x9FE8: 0x6EAF, + 0x9FE9: 0x6EC4, + 0x9FEA: 0x6EB2, + 0x9FEB: 0x6ED4, + 0x9FEC: 0x6ED5, + 0x9FED: 0x6E8F, + 0x9FEE: 0x6EA5, + 0x9FEF: 0x6EC2, + 0x9FF0: 0x6E9F, + 0x9FF1: 0x6F41, + 0x9FF2: 0x6F11, + 0x9FF3: 0x704C, + 0x9FF4: 0x6EEC, + 0x9FF5: 0x6EF8, + 0x9FF6: 0x6EFE, + 0x9FF7: 0x6F3F, + 0x9FF8: 0x6EF2, + 0x9FF9: 0x6F31, + 0x9FFA: 0x6EEF, + 0x9FFB: 0x6F32, + 0x9FFC: 0x6ECC, + 0xA1: 0xFF61, + 0xA2: 0xFF62, + 0xA3: 0xFF63, + 0xA4: 0xFF64, + 0xA5: 0xFF65, + 0xA6: 0xFF66, + 0xA7: 0xFF67, + 0xA8: 0xFF68, + 0xA9: 0xFF69, + 0xAA: 0xFF6A, + 0xAB: 0xFF6B, + 0xAC: 0xFF6C, + 0xAD: 0xFF6D, + 0xAE: 0xFF6E, + 0xAF: 0xFF6F, + 0xB0: 0xFF70, + 0xB1: 0xFF71, + 0xB2: 0xFF72, + 0xB3: 0xFF73, + 0xB4: 0xFF74, + 0xB5: 0xFF75, + 0xB6: 0xFF76, + 0xB7: 0xFF77, + 0xB8: 0xFF78, + 0xB9: 0xFF79, + 0xBA: 0xFF7A, + 0xBB: 0xFF7B, + 0xBC: 0xFF7C, + 0xBD: 0xFF7D, + 0xBE: 0xFF7E, + 0xBF: 0xFF7F, + 0xC0: 0xFF80, + 0xC1: 0xFF81, + 0xC2: 0xFF82, + 0xC3: 0xFF83, + 0xC4: 0xFF84, + 0xC5: 0xFF85, + 0xC6: 0xFF86, + 0xC7: 0xFF87, + 0xC8: 0xFF88, + 0xC9: 0xFF89, + 0xCA: 0xFF8A, + 0xCB: 0xFF8B, + 0xCC: 0xFF8C, + 0xCD: 0xFF8D, + 0xCE: 0xFF8E, + 0xCF: 0xFF8F, + 0xD0: 0xFF90, + 0xD1: 0xFF91, + 0xD2: 0xFF92, + 0xD3: 0xFF93, + 0xD4: 0xFF94, + 0xD5: 0xFF95, + 0xD6: 0xFF96, + 0xD7: 0xFF97, + 0xD8: 0xFF98, + 0xD9: 0xFF99, + 0xDA: 0xFF9A, + 0xDB: 0xFF9B, + 0xDC: 0xFF9C, + 0xDD: 0xFF9D, + 0xDE: 0xFF9E, + 0xDF: 0xFF9F, + 0xE040: 0x6F3E, + 0xE041: 0x6F13, + 0xE042: 0x6EF7, + 0xE043: 0x6F86, + 0xE044: 0x6F7A, + 0xE045: 0x6F78, + 0xE046: 0x6F81, + 0xE047: 0x6F80, + 0xE048: 0x6F6F, + 0xE049: 0x6F5B, + 0xE04A: 0x6FF3, + 0xE04B: 0x6F6D, + 0xE04C: 0x6F82, + 0xE04D: 0x6F7C, + 0xE04E: 0x6F58, + 0xE04F: 0x6F8E, + 0xE050: 0x6F91, + 0xE051: 0x6FC2, + 0xE052: 0x6F66, + 0xE053: 0x6FB3, + 0xE054: 0x6FA3, + 0xE055: 0x6FA1, + 0xE056: 0x6FA4, + 0xE057: 0x6FB9, + 0xE058: 0x6FC6, + 0xE059: 0x6FAA, + 0xE05A: 0x6FDF, + 0xE05B: 0x6FD5, + 0xE05C: 0x6FEC, + 0xE05D: 0x6FD4, + 0xE05E: 0x6FD8, + 0xE05F: 0x6FF1, + 0xE060: 0x6FEE, + 0xE061: 0x6FDB, + 0xE062: 0x7009, + 0xE063: 0x700B, + 0xE064: 0x6FFA, + 0xE065: 0x7011, + 0xE066: 0x7001, + 0xE067: 0x700F, + 0xE068: 0x6FFE, + 0xE069: 0x701B, + 0xE06A: 0x701A, + 0xE06B: 0x6F74, + 0xE06C: 0x701D, + 0xE06D: 0x7018, + 0xE06E: 0x701F, + 0xE06F: 0x7030, + 0xE070: 0x703E, + 0xE071: 0x7032, + 0xE072: 0x7051, + 0xE073: 0x7063, + 0xE074: 0x7099, + 0xE075: 0x7092, + 0xE076: 0x70AF, + 0xE077: 0x70F1, + 0xE078: 0x70AC, + 0xE079: 0x70B8, + 0xE07A: 0x70B3, + 0xE07B: 0x70AE, + 0xE07C: 0x70DF, + 0xE07D: 0x70CB, + 0xE07E: 0x70DD, + 0xE080: 0x70D9, + 0xE081: 0x7109, + 0xE082: 0x70FD, + 0xE083: 0x711C, + 0xE084: 0x7119, + 0xE085: 0x7165, + 0xE086: 0x7155, + 0xE087: 0x7188, + 0xE088: 0x7166, + 0xE089: 0x7162, + 0xE08A: 0x714C, + 0xE08B: 0x7156, + 0xE08C: 0x716C, + 0xE08D: 0x718F, + 0xE08E: 0x71FB, + 0xE08F: 0x7184, + 0xE090: 0x7195, + 0xE091: 0x71A8, + 0xE092: 0x71AC, + 0xE093: 0x71D7, + 0xE094: 0x71B9, + 0xE095: 0x71BE, + 0xE096: 0x71D2, + 0xE097: 0x71C9, + 0xE098: 0x71D4, + 0xE099: 0x71CE, + 0xE09A: 0x71E0, + 0xE09B: 0x71EC, + 0xE09C: 0x71E7, + 0xE09D: 0x71F5, + 0xE09E: 0x71FC, + 0xE09F: 0x71F9, + 0xE0A0: 0x71FF, + 0xE0A1: 0x720D, + 0xE0A2: 0x7210, + 0xE0A3: 0x721B, + 0xE0A4: 0x7228, + 0xE0A5: 0x722D, + 0xE0A6: 0x722C, + 0xE0A7: 0x7230, + 0xE0A8: 0x7232, + 0xE0A9: 0x723B, + 0xE0AA: 0x723C, + 0xE0AB: 0x723F, + 0xE0AC: 0x7240, + 0xE0AD: 0x7246, + 0xE0AE: 0x724B, + 0xE0AF: 0x7258, + 0xE0B0: 0x7274, + 0xE0B1: 0x727E, + 0xE0B2: 0x7282, + 0xE0B3: 0x7281, + 0xE0B4: 0x7287, + 0xE0B5: 0x7292, + 0xE0B6: 0x7296, + 0xE0B7: 0x72A2, + 0xE0B8: 0x72A7, + 0xE0B9: 0x72B9, + 0xE0BA: 0x72B2, + 0xE0BB: 0x72C3, + 0xE0BC: 0x72C6, + 0xE0BD: 0x72C4, + 0xE0BE: 0x72CE, + 0xE0BF: 0x72D2, + 0xE0C0: 0x72E2, + 0xE0C1: 0x72E0, + 0xE0C2: 0x72E1, + 0xE0C3: 0x72F9, + 0xE0C4: 0x72F7, + 0xE0C5: 0x500F, + 0xE0C6: 0x7317, + 0xE0C7: 0x730A, + 0xE0C8: 0x731C, + 0xE0C9: 0x7316, + 0xE0CA: 0x731D, + 0xE0CB: 0x7334, + 0xE0CC: 0x732F, + 0xE0CD: 0x7329, + 0xE0CE: 0x7325, + 0xE0CF: 0x733E, + 0xE0D0: 0x734E, + 0xE0D1: 0x734F, + 0xE0D2: 0x9ED8, + 0xE0D3: 0x7357, + 0xE0D4: 0x736A, + 0xE0D5: 0x7368, + 0xE0D6: 0x7370, + 0xE0D7: 0x7378, + 0xE0D8: 0x7375, + 0xE0D9: 0x737B, + 0xE0DA: 0x737A, + 0xE0DB: 0x73C8, + 0xE0DC: 0x73B3, + 0xE0DD: 0x73CE, + 0xE0DE: 0x73BB, + 0xE0DF: 0x73C0, + 0xE0E0: 0x73E5, + 0xE0E1: 0x73EE, + 0xE0E2: 0x73DE, + 0xE0E3: 0x74A2, + 0xE0E4: 0x7405, + 0xE0E5: 0x746F, + 0xE0E6: 0x7425, + 0xE0E7: 0x73F8, + 0xE0E8: 0x7432, + 0xE0E9: 0x743A, + 0xE0EA: 0x7455, + 0xE0EB: 0x743F, + 0xE0EC: 0x745F, + 0xE0ED: 0x7459, + 0xE0EE: 0x7441, + 0xE0EF: 0x745C, + 0xE0F0: 0x7469, + 0xE0F1: 0x7470, + 0xE0F2: 0x7463, + 0xE0F3: 0x746A, + 0xE0F4: 0x7476, + 0xE0F5: 0x747E, + 0xE0F6: 0x748B, + 0xE0F7: 0x749E, + 0xE0F8: 0x74A7, + 0xE0F9: 0x74CA, + 0xE0FA: 0x74CF, + 0xE0FB: 0x74D4, + 0xE0FC: 0x73F1, + 0xE140: 0x74E0, + 0xE141: 0x74E3, + 0xE142: 0x74E7, + 0xE143: 0x74E9, + 0xE144: 0x74EE, + 0xE145: 0x74F2, + 0xE146: 0x74F0, + 0xE147: 0x74F1, + 0xE148: 0x74F8, + 0xE149: 0x74F7, + 0xE14A: 0x7504, + 0xE14B: 0x7503, + 0xE14C: 0x7505, + 0xE14D: 0x750C, + 0xE14E: 0x750E, + 0xE14F: 0x750D, + 0xE150: 0x7515, + 0xE151: 0x7513, + 0xE152: 0x751E, + 0xE153: 0x7526, + 0xE154: 0x752C, + 0xE155: 0x753C, + 0xE156: 0x7544, + 0xE157: 0x754D, + 0xE158: 0x754A, + 0xE159: 0x7549, + 0xE15A: 0x755B, + 0xE15B: 0x7546, + 0xE15C: 0x755A, + 0xE15D: 0x7569, + 0xE15E: 0x7564, + 0xE15F: 0x7567, + 0xE160: 0x756B, + 0xE161: 0x756D, + 0xE162: 0x7578, + 0xE163: 0x7576, + 0xE164: 0x7586, + 0xE165: 0x7587, + 0xE166: 0x7574, + 0xE167: 0x758A, + 0xE168: 0x7589, + 0xE169: 0x7582, + 0xE16A: 0x7594, + 0xE16B: 0x759A, + 0xE16C: 0x759D, + 0xE16D: 0x75A5, + 0xE16E: 0x75A3, + 0xE16F: 0x75C2, + 0xE170: 0x75B3, + 0xE171: 0x75C3, + 0xE172: 0x75B5, + 0xE173: 0x75BD, + 0xE174: 0x75B8, + 0xE175: 0x75BC, + 0xE176: 0x75B1, + 0xE177: 0x75CD, + 0xE178: 0x75CA, + 0xE179: 0x75D2, + 0xE17A: 0x75D9, + 0xE17B: 0x75E3, + 0xE17C: 0x75DE, + 0xE17D: 0x75FE, + 0xE17E: 0x75FF, + 0xE180: 0x75FC, + 0xE181: 0x7601, + 0xE182: 0x75F0, + 0xE183: 0x75FA, + 0xE184: 0x75F2, + 0xE185: 0x75F3, + 0xE186: 0x760B, + 0xE187: 0x760D, + 0xE188: 0x7609, + 0xE189: 0x761F, + 0xE18A: 0x7627, + 0xE18B: 0x7620, + 0xE18C: 0x7621, + 0xE18D: 0x7622, + 0xE18E: 0x7624, + 0xE18F: 0x7634, + 0xE190: 0x7630, + 0xE191: 0x763B, + 0xE192: 0x7647, + 0xE193: 0x7648, + 0xE194: 0x7646, + 0xE195: 0x765C, + 0xE196: 0x7658, + 0xE197: 0x7661, + 0xE198: 0x7662, + 0xE199: 0x7668, + 0xE19A: 0x7669, + 0xE19B: 0x766A, + 0xE19C: 0x7667, + 0xE19D: 0x766C, + 0xE19E: 0x7670, + 0xE19F: 0x7672, + 0xE1A0: 0x7676, + 0xE1A1: 0x7678, + 0xE1A2: 0x767C, + 0xE1A3: 0x7680, + 0xE1A4: 0x7683, + 0xE1A5: 0x7688, + 0xE1A6: 0x768B, + 0xE1A7: 0x768E, + 0xE1A8: 0x7696, + 0xE1A9: 0x7693, + 0xE1AA: 0x7699, + 0xE1AB: 0x769A, + 0xE1AC: 0x76B0, + 0xE1AD: 0x76B4, + 0xE1AE: 0x76B8, + 0xE1AF: 0x76B9, + 0xE1B0: 0x76BA, + 0xE1B1: 0x76C2, + 0xE1B2: 0x76CD, + 0xE1B3: 0x76D6, + 0xE1B4: 0x76D2, + 0xE1B5: 0x76DE, + 0xE1B6: 0x76E1, + 0xE1B7: 0x76E5, + 0xE1B8: 0x76E7, + 0xE1B9: 0x76EA, + 0xE1BA: 0x862F, + 0xE1BB: 0x76FB, + 0xE1BC: 0x7708, + 0xE1BD: 0x7707, + 0xE1BE: 0x7704, + 0xE1BF: 0x7729, + 0xE1C0: 0x7724, + 0xE1C1: 0x771E, + 0xE1C2: 0x7725, + 0xE1C3: 0x7726, + 0xE1C4: 0x771B, + 0xE1C5: 0x7737, + 0xE1C6: 0x7738, + 0xE1C7: 0x7747, + 0xE1C8: 0x775A, + 0xE1C9: 0x7768, + 0xE1CA: 0x776B, + 0xE1CB: 0x775B, + 0xE1CC: 0x7765, + 0xE1CD: 0x777F, + 0xE1CE: 0x777E, + 0xE1CF: 0x7779, + 0xE1D0: 0x778E, + 0xE1D1: 0x778B, + 0xE1D2: 0x7791, + 0xE1D3: 0x77A0, + 0xE1D4: 0x779E, + 0xE1D5: 0x77B0, + 0xE1D6: 0x77B6, + 0xE1D7: 0x77B9, + 0xE1D8: 0x77BF, + 0xE1D9: 0x77BC, + 0xE1DA: 0x77BD, + 0xE1DB: 0x77BB, + 0xE1DC: 0x77C7, + 0xE1DD: 0x77CD, + 0xE1DE: 0x77D7, + 0xE1DF: 0x77DA, + 0xE1E0: 0x77DC, + 0xE1E1: 0x77E3, + 0xE1E2: 0x77EE, + 0xE1E3: 0x77FC, + 0xE1E4: 0x780C, + 0xE1E5: 0x7812, + 0xE1E6: 0x7926, + 0xE1E7: 0x7820, + 0xE1E8: 0x792A, + 0xE1E9: 0x7845, + 0xE1EA: 0x788E, + 0xE1EB: 0x7874, + 0xE1EC: 0x7886, + 0xE1ED: 0x787C, + 0xE1EE: 0x789A, + 0xE1EF: 0x788C, + 0xE1F0: 0x78A3, + 0xE1F1: 0x78B5, + 0xE1F2: 0x78AA, + 0xE1F3: 0x78AF, + 0xE1F4: 0x78D1, + 0xE1F5: 0x78C6, + 0xE1F6: 0x78CB, + 0xE1F7: 0x78D4, + 0xE1F8: 0x78BE, + 0xE1F9: 0x78BC, + 0xE1FA: 0x78C5, + 0xE1FB: 0x78CA, + 0xE1FC: 0x78EC, + 0xE240: 0x78E7, + 0xE241: 0x78DA, + 0xE242: 0x78FD, + 0xE243: 0x78F4, + 0xE244: 0x7907, + 0xE245: 0x7912, + 0xE246: 0x7911, + 0xE247: 0x7919, + 0xE248: 0x792C, + 0xE249: 0x792B, + 0xE24A: 0x7940, + 0xE24B: 0x7960, + 0xE24C: 0x7957, + 0xE24D: 0x795F, + 0xE24E: 0x795A, + 0xE24F: 0x7955, + 0xE250: 0x7953, + 0xE251: 0x797A, + 0xE252: 0x797F, + 0xE253: 0x798A, + 0xE254: 0x799D, + 0xE255: 0x79A7, + 0xE256: 0x9F4B, + 0xE257: 0x79AA, + 0xE258: 0x79AE, + 0xE259: 0x79B3, + 0xE25A: 0x79B9, + 0xE25B: 0x79BA, + 0xE25C: 0x79C9, + 0xE25D: 0x79D5, + 0xE25E: 0x79E7, + 0xE25F: 0x79EC, + 0xE260: 0x79E1, + 0xE261: 0x79E3, + 0xE262: 0x7A08, + 0xE263: 0x7A0D, + 0xE264: 0x7A18, + 0xE265: 0x7A19, + 0xE266: 0x7A20, + 0xE267: 0x7A1F, + 0xE268: 0x7980, + 0xE269: 0x7A31, + 0xE26A: 0x7A3B, + 0xE26B: 0x7A3E, + 0xE26C: 0x7A37, + 0xE26D: 0x7A43, + 0xE26E: 0x7A57, + 0xE26F: 0x7A49, + 0xE270: 0x7A61, + 0xE271: 0x7A62, + 0xE272: 0x7A69, + 0xE273: 0x9F9D, + 0xE274: 0x7A70, + 0xE275: 0x7A79, + 0xE276: 0x7A7D, + 0xE277: 0x7A88, + 0xE278: 0x7A97, + 0xE279: 0x7A95, + 0xE27A: 0x7A98, + 0xE27B: 0x7A96, + 0xE27C: 0x7AA9, + 0xE27D: 0x7AC8, + 0xE27E: 0x7AB0, + 0xE280: 0x7AB6, + 0xE281: 0x7AC5, + 0xE282: 0x7AC4, + 0xE283: 0x7ABF, + 0xE284: 0x9083, + 0xE285: 0x7AC7, + 0xE286: 0x7ACA, + 0xE287: 0x7ACD, + 0xE288: 0x7ACF, + 0xE289: 0x7AD5, + 0xE28A: 0x7AD3, + 0xE28B: 0x7AD9, + 0xE28C: 0x7ADA, + 0xE28D: 0x7ADD, + 0xE28E: 0x7AE1, + 0xE28F: 0x7AE2, + 0xE290: 0x7AE6, + 0xE291: 0x7AED, + 0xE292: 0x7AF0, + 0xE293: 0x7B02, + 0xE294: 0x7B0F, + 0xE295: 0x7B0A, + 0xE296: 0x7B06, + 0xE297: 0x7B33, + 0xE298: 0x7B18, + 0xE299: 0x7B19, + 0xE29A: 0x7B1E, + 0xE29B: 0x7B35, + 0xE29C: 0x7B28, + 0xE29D: 0x7B36, + 0xE29E: 0x7B50, + 0xE29F: 0x7B7A, + 0xE2A0: 0x7B04, + 0xE2A1: 0x7B4D, + 0xE2A2: 0x7B0B, + 0xE2A3: 0x7B4C, + 0xE2A4: 0x7B45, + 0xE2A5: 0x7B75, + 0xE2A6: 0x7B65, + 0xE2A7: 0x7B74, + 0xE2A8: 0x7B67, + 0xE2A9: 0x7B70, + 0xE2AA: 0x7B71, + 0xE2AB: 0x7B6C, + 0xE2AC: 0x7B6E, + 0xE2AD: 0x7B9D, + 0xE2AE: 0x7B98, + 0xE2AF: 0x7B9F, + 0xE2B0: 0x7B8D, + 0xE2B1: 0x7B9C, + 0xE2B2: 0x7B9A, + 0xE2B3: 0x7B8B, + 0xE2B4: 0x7B92, + 0xE2B5: 0x7B8F, + 0xE2B6: 0x7B5D, + 0xE2B7: 0x7B99, + 0xE2B8: 0x7BCB, + 0xE2B9: 0x7BC1, + 0xE2BA: 0x7BCC, + 0xE2BB: 0x7BCF, + 0xE2BC: 0x7BB4, + 0xE2BD: 0x7BC6, + 0xE2BE: 0x7BDD, + 0xE2BF: 0x7BE9, + 0xE2C0: 0x7C11, + 0xE2C1: 0x7C14, + 0xE2C2: 0x7BE6, + 0xE2C3: 0x7BE5, + 0xE2C4: 0x7C60, + 0xE2C5: 0x7C00, + 0xE2C6: 0x7C07, + 0xE2C7: 0x7C13, + 0xE2C8: 0x7BF3, + 0xE2C9: 0x7BF7, + 0xE2CA: 0x7C17, + 0xE2CB: 0x7C0D, + 0xE2CC: 0x7BF6, + 0xE2CD: 0x7C23, + 0xE2CE: 0x7C27, + 0xE2CF: 0x7C2A, + 0xE2D0: 0x7C1F, + 0xE2D1: 0x7C37, + 0xE2D2: 0x7C2B, + 0xE2D3: 0x7C3D, + 0xE2D4: 0x7C4C, + 0xE2D5: 0x7C43, + 0xE2D6: 0x7C54, + 0xE2D7: 0x7C4F, + 0xE2D8: 0x7C40, + 0xE2D9: 0x7C50, + 0xE2DA: 0x7C58, + 0xE2DB: 0x7C5F, + 0xE2DC: 0x7C64, + 0xE2DD: 0x7C56, + 0xE2DE: 0x7C65, + 0xE2DF: 0x7C6C, + 0xE2E0: 0x7C75, + 0xE2E1: 0x7C83, + 0xE2E2: 0x7C90, + 0xE2E3: 0x7CA4, + 0xE2E4: 0x7CAD, + 0xE2E5: 0x7CA2, + 0xE2E6: 0x7CAB, + 0xE2E7: 0x7CA1, + 0xE2E8: 0x7CA8, + 0xE2E9: 0x7CB3, + 0xE2EA: 0x7CB2, + 0xE2EB: 0x7CB1, + 0xE2EC: 0x7CAE, + 0xE2ED: 0x7CB9, + 0xE2EE: 0x7CBD, + 0xE2EF: 0x7CC0, + 0xE2F0: 0x7CC5, + 0xE2F1: 0x7CC2, + 0xE2F2: 0x7CD8, + 0xE2F3: 0x7CD2, + 0xE2F4: 0x7CDC, + 0xE2F5: 0x7CE2, + 0xE2F6: 0x9B3B, + 0xE2F7: 0x7CEF, + 0xE2F8: 0x7CF2, + 0xE2F9: 0x7CF4, + 0xE2FA: 0x7CF6, + 0xE2FB: 0x7CFA, + 0xE2FC: 0x7D06, + 0xE340: 0x7D02, + 0xE341: 0x7D1C, + 0xE342: 0x7D15, + 0xE343: 0x7D0A, + 0xE344: 0x7D45, + 0xE345: 0x7D4B, + 0xE346: 0x7D2E, + 0xE347: 0x7D32, + 0xE348: 0x7D3F, + 0xE349: 0x7D35, + 0xE34A: 0x7D46, + 0xE34B: 0x7D73, + 0xE34C: 0x7D56, + 0xE34D: 0x7D4E, + 0xE34E: 0x7D72, + 0xE34F: 0x7D68, + 0xE350: 0x7D6E, + 0xE351: 0x7D4F, + 0xE352: 0x7D63, + 0xE353: 0x7D93, + 0xE354: 0x7D89, + 0xE355: 0x7D5B, + 0xE356: 0x7D8F, + 0xE357: 0x7D7D, + 0xE358: 0x7D9B, + 0xE359: 0x7DBA, + 0xE35A: 0x7DAE, + 0xE35B: 0x7DA3, + 0xE35C: 0x7DB5, + 0xE35D: 0x7DC7, + 0xE35E: 0x7DBD, + 0xE35F: 0x7DAB, + 0xE360: 0x7E3D, + 0xE361: 0x7DA2, + 0xE362: 0x7DAF, + 0xE363: 0x7DDC, + 0xE364: 0x7DB8, + 0xE365: 0x7D9F, + 0xE366: 0x7DB0, + 0xE367: 0x7DD8, + 0xE368: 0x7DDD, + 0xE369: 0x7DE4, + 0xE36A: 0x7DDE, + 0xE36B: 0x7DFB, + 0xE36C: 0x7DF2, + 0xE36D: 0x7DE1, + 0xE36E: 0x7E05, + 0xE36F: 0x7E0A, + 0xE370: 0x7E23, + 0xE371: 0x7E21, + 0xE372: 0x7E12, + 0xE373: 0x7E31, + 0xE374: 0x7E1F, + 0xE375: 0x7E09, + 0xE376: 0x7E0B, + 0xE377: 0x7E22, + 0xE378: 0x7E46, + 0xE379: 0x7E66, + 0xE37A: 0x7E3B, + 0xE37B: 0x7E35, + 0xE37C: 0x7E39, + 0xE37D: 0x7E43, + 0xE37E: 0x7E37, + 0xE380: 0x7E32, + 0xE381: 0x7E3A, + 0xE382: 0x7E67, + 0xE383: 0x7E5D, + 0xE384: 0x7E56, + 0xE385: 0x7E5E, + 0xE386: 0x7E59, + 0xE387: 0x7E5A, + 0xE388: 0x7E79, + 0xE389: 0x7E6A, + 0xE38A: 0x7E69, + 0xE38B: 0x7E7C, + 0xE38C: 0x7E7B, + 0xE38D: 0x7E83, + 0xE38E: 0x7DD5, + 0xE38F: 0x7E7D, + 0xE390: 0x8FAE, + 0xE391: 0x7E7F, + 0xE392: 0x7E88, + 0xE393: 0x7E89, + 0xE394: 0x7E8C, + 0xE395: 0x7E92, + 0xE396: 0x7E90, + 0xE397: 0x7E93, + 0xE398: 0x7E94, + 0xE399: 0x7E96, + 0xE39A: 0x7E8E, + 0xE39B: 0x7E9B, + 0xE39C: 0x7E9C, + 0xE39D: 0x7F38, + 0xE39E: 0x7F3A, + 0xE39F: 0x7F45, + 0xE3A0: 0x7F4C, + 0xE3A1: 0x7F4D, + 0xE3A2: 0x7F4E, + 0xE3A3: 0x7F50, + 0xE3A4: 0x7F51, + 0xE3A5: 0x7F55, + 0xE3A6: 0x7F54, + 0xE3A7: 0x7F58, + 0xE3A8: 0x7F5F, + 0xE3A9: 0x7F60, + 0xE3AA: 0x7F68, + 0xE3AB: 0x7F69, + 0xE3AC: 0x7F67, + 0xE3AD: 0x7F78, + 0xE3AE: 0x7F82, + 0xE3AF: 0x7F86, + 0xE3B0: 0x7F83, + 0xE3B1: 0x7F88, + 0xE3B2: 0x7F87, + 0xE3B3: 0x7F8C, + 0xE3B4: 0x7F94, + 0xE3B5: 0x7F9E, + 0xE3B6: 0x7F9D, + 0xE3B7: 0x7F9A, + 0xE3B8: 0x7FA3, + 0xE3B9: 0x7FAF, + 0xE3BA: 0x7FB2, + 0xE3BB: 0x7FB9, + 0xE3BC: 0x7FAE, + 0xE3BD: 0x7FB6, + 0xE3BE: 0x7FB8, + 0xE3BF: 0x8B71, + 0xE3C0: 0x7FC5, + 0xE3C1: 0x7FC6, + 0xE3C2: 0x7FCA, + 0xE3C3: 0x7FD5, + 0xE3C4: 0x7FD4, + 0xE3C5: 0x7FE1, + 0xE3C6: 0x7FE6, + 0xE3C7: 0x7FE9, + 0xE3C8: 0x7FF3, + 0xE3C9: 0x7FF9, + 0xE3CA: 0x98DC, + 0xE3CB: 0x8006, + 0xE3CC: 0x8004, + 0xE3CD: 0x800B, + 0xE3CE: 0x8012, + 0xE3CF: 0x8018, + 0xE3D0: 0x8019, + 0xE3D1: 0x801C, + 0xE3D2: 0x8021, + 0xE3D3: 0x8028, + 0xE3D4: 0x803F, + 0xE3D5: 0x803B, + 0xE3D6: 0x804A, + 0xE3D7: 0x8046, + 0xE3D8: 0x8052, + 0xE3D9: 0x8058, + 0xE3DA: 0x805A, + 0xE3DB: 0x805F, + 0xE3DC: 0x8062, + 0xE3DD: 0x8068, + 0xE3DE: 0x8073, + 0xE3DF: 0x8072, + 0xE3E0: 0x8070, + 0xE3E1: 0x8076, + 0xE3E2: 0x8079, + 0xE3E3: 0x807D, + 0xE3E4: 0x807F, + 0xE3E5: 0x8084, + 0xE3E6: 0x8086, + 0xE3E7: 0x8085, + 0xE3E8: 0x809B, + 0xE3E9: 0x8093, + 0xE3EA: 0x809A, + 0xE3EB: 0x80AD, + 0xE3EC: 0x5190, + 0xE3ED: 0x80AC, + 0xE3EE: 0x80DB, + 0xE3EF: 0x80E5, + 0xE3F0: 0x80D9, + 0xE3F1: 0x80DD, + 0xE3F2: 0x80C4, + 0xE3F3: 0x80DA, + 0xE3F4: 0x80D6, + 0xE3F5: 0x8109, + 0xE3F6: 0x80EF, + 0xE3F7: 0x80F1, + 0xE3F8: 0x811B, + 0xE3F9: 0x8129, + 0xE3FA: 0x8123, + 0xE3FB: 0x812F, + 0xE3FC: 0x814B, + 0xE440: 0x968B, + 0xE441: 0x8146, + 0xE442: 0x813E, + 0xE443: 0x8153, + 0xE444: 0x8151, + 0xE445: 0x80FC, + 0xE446: 0x8171, + 0xE447: 0x816E, + 0xE448: 0x8165, + 0xE449: 0x8166, + 0xE44A: 0x8174, + 0xE44B: 0x8183, + 0xE44C: 0x8188, + 0xE44D: 0x818A, + 0xE44E: 0x8180, + 0xE44F: 0x8182, + 0xE450: 0x81A0, + 0xE451: 0x8195, + 0xE452: 0x81A4, + 0xE453: 0x81A3, + 0xE454: 0x815F, + 0xE455: 0x8193, + 0xE456: 0x81A9, + 0xE457: 0x81B0, + 0xE458: 0x81B5, + 0xE459: 0x81BE, + 0xE45A: 0x81B8, + 0xE45B: 0x81BD, + 0xE45C: 0x81C0, + 0xE45D: 0x81C2, + 0xE45E: 0x81BA, + 0xE45F: 0x81C9, + 0xE460: 0x81CD, + 0xE461: 0x81D1, + 0xE462: 0x81D9, + 0xE463: 0x81D8, + 0xE464: 0x81C8, + 0xE465: 0x81DA, + 0xE466: 0x81DF, + 0xE467: 0x81E0, + 0xE468: 0x81E7, + 0xE469: 0x81FA, + 0xE46A: 0x81FB, + 0xE46B: 0x81FE, + 0xE46C: 0x8201, + 0xE46D: 0x8202, + 0xE46E: 0x8205, + 0xE46F: 0x8207, + 0xE470: 0x820A, + 0xE471: 0x820D, + 0xE472: 0x8210, + 0xE473: 0x8216, + 0xE474: 0x8229, + 0xE475: 0x822B, + 0xE476: 0x8238, + 0xE477: 0x8233, + 0xE478: 0x8240, + 0xE479: 0x8259, + 0xE47A: 0x8258, + 0xE47B: 0x825D, + 0xE47C: 0x825A, + 0xE47D: 0x825F, + 0xE47E: 0x8264, + 0xE480: 0x8262, + 0xE481: 0x8268, + 0xE482: 0x826A, + 0xE483: 0x826B, + 0xE484: 0x822E, + 0xE485: 0x8271, + 0xE486: 0x8277, + 0xE487: 0x8278, + 0xE488: 0x827E, + 0xE489: 0x828D, + 0xE48A: 0x8292, + 0xE48B: 0x82AB, + 0xE48C: 0x829F, + 0xE48D: 0x82BB, + 0xE48E: 0x82AC, + 0xE48F: 0x82E1, + 0xE490: 0x82E3, + 0xE491: 0x82DF, + 0xE492: 0x82D2, + 0xE493: 0x82F4, + 0xE494: 0x82F3, + 0xE495: 0x82FA, + 0xE496: 0x8393, + 0xE497: 0x8303, + 0xE498: 0x82FB, + 0xE499: 0x82F9, + 0xE49A: 0x82DE, + 0xE49B: 0x8306, + 0xE49C: 0x82DC, + 0xE49D: 0x8309, + 0xE49E: 0x82D9, + 0xE49F: 0x8335, + 0xE4A0: 0x8334, + 0xE4A1: 0x8316, + 0xE4A2: 0x8332, + 0xE4A3: 0x8331, + 0xE4A4: 0x8340, + 0xE4A5: 0x8339, + 0xE4A6: 0x8350, + 0xE4A7: 0x8345, + 0xE4A8: 0x832F, + 0xE4A9: 0x832B, + 0xE4AA: 0x8317, + 0xE4AB: 0x8318, + 0xE4AC: 0x8385, + 0xE4AD: 0x839A, + 0xE4AE: 0x83AA, + 0xE4AF: 0x839F, + 0xE4B0: 0x83A2, + 0xE4B1: 0x8396, + 0xE4B2: 0x8323, + 0xE4B3: 0x838E, + 0xE4B4: 0x8387, + 0xE4B5: 0x838A, + 0xE4B6: 0x837C, + 0xE4B7: 0x83B5, + 0xE4B8: 0x8373, + 0xE4B9: 0x8375, + 0xE4BA: 0x83A0, + 0xE4BB: 0x8389, + 0xE4BC: 0x83A8, + 0xE4BD: 0x83F4, + 0xE4BE: 0x8413, + 0xE4BF: 0x83EB, + 0xE4C0: 0x83CE, + 0xE4C1: 0x83FD, + 0xE4C2: 0x8403, + 0xE4C3: 0x83D8, + 0xE4C4: 0x840B, + 0xE4C5: 0x83C1, + 0xE4C6: 0x83F7, + 0xE4C7: 0x8407, + 0xE4C8: 0x83E0, + 0xE4C9: 0x83F2, + 0xE4CA: 0x840D, + 0xE4CB: 0x8422, + 0xE4CC: 0x8420, + 0xE4CD: 0x83BD, + 0xE4CE: 0x8438, + 0xE4CF: 0x8506, + 0xE4D0: 0x83FB, + 0xE4D1: 0x846D, + 0xE4D2: 0x842A, + 0xE4D3: 0x843C, + 0xE4D4: 0x855A, + 0xE4D5: 0x8484, + 0xE4D6: 0x8477, + 0xE4D7: 0x846B, + 0xE4D8: 0x84AD, + 0xE4D9: 0x846E, + 0xE4DA: 0x8482, + 0xE4DB: 0x8469, + 0xE4DC: 0x8446, + 0xE4DD: 0x842C, + 0xE4DE: 0x846F, + 0xE4DF: 0x8479, + 0xE4E0: 0x8435, + 0xE4E1: 0x84CA, + 0xE4E2: 0x8462, + 0xE4E3: 0x84B9, + 0xE4E4: 0x84BF, + 0xE4E5: 0x849F, + 0xE4E6: 0x84D9, + 0xE4E7: 0x84CD, + 0xE4E8: 0x84BB, + 0xE4E9: 0x84DA, + 0xE4EA: 0x84D0, + 0xE4EB: 0x84C1, + 0xE4EC: 0x84C6, + 0xE4ED: 0x84D6, + 0xE4EE: 0x84A1, + 0xE4EF: 0x8521, + 0xE4F0: 0x84FF, + 0xE4F1: 0x84F4, + 0xE4F2: 0x8517, + 0xE4F3: 0x8518, + 0xE4F4: 0x852C, + 0xE4F5: 0x851F, + 0xE4F6: 0x8515, + 0xE4F7: 0x8514, + 0xE4F8: 0x84FC, + 0xE4F9: 0x8540, + 0xE4FA: 0x8563, + 0xE4FB: 0x8558, + 0xE4FC: 0x8548, + 0xE540: 0x8541, + 0xE541: 0x8602, + 0xE542: 0x854B, + 0xE543: 0x8555, + 0xE544: 0x8580, + 0xE545: 0x85A4, + 0xE546: 0x8588, + 0xE547: 0x8591, + 0xE548: 0x858A, + 0xE549: 0x85A8, + 0xE54A: 0x856D, + 0xE54B: 0x8594, + 0xE54C: 0x859B, + 0xE54D: 0x85EA, + 0xE54E: 0x8587, + 0xE54F: 0x859C, + 0xE550: 0x8577, + 0xE551: 0x857E, + 0xE552: 0x8590, + 0xE553: 0x85C9, + 0xE554: 0x85BA, + 0xE555: 0x85CF, + 0xE556: 0x85B9, + 0xE557: 0x85D0, + 0xE558: 0x85D5, + 0xE559: 0x85DD, + 0xE55A: 0x85E5, + 0xE55B: 0x85DC, + 0xE55C: 0x85F9, + 0xE55D: 0x860A, + 0xE55E: 0x8613, + 0xE55F: 0x860B, + 0xE560: 0x85FE, + 0xE561: 0x85FA, + 0xE562: 0x8606, + 0xE563: 0x8622, + 0xE564: 0x861A, + 0xE565: 0x8630, + 0xE566: 0x863F, + 0xE567: 0x864D, + 0xE568: 0x4E55, + 0xE569: 0x8654, + 0xE56A: 0x865F, + 0xE56B: 0x8667, + 0xE56C: 0x8671, + 0xE56D: 0x8693, + 0xE56E: 0x86A3, + 0xE56F: 0x86A9, + 0xE570: 0x86AA, + 0xE571: 0x868B, + 0xE572: 0x868C, + 0xE573: 0x86B6, + 0xE574: 0x86AF, + 0xE575: 0x86C4, + 0xE576: 0x86C6, + 0xE577: 0x86B0, + 0xE578: 0x86C9, + 0xE579: 0x8823, + 0xE57A: 0x86AB, + 0xE57B: 0x86D4, + 0xE57C: 0x86DE, + 0xE57D: 0x86E9, + 0xE57E: 0x86EC, + 0xE580: 0x86DF, + 0xE581: 0x86DB, + 0xE582: 0x86EF, + 0xE583: 0x8712, + 0xE584: 0x8706, + 0xE585: 0x8708, + 0xE586: 0x8700, + 0xE587: 0x8703, + 0xE588: 0x86FB, + 0xE589: 0x8711, + 0xE58A: 0x8709, + 0xE58B: 0x870D, + 0xE58C: 0x86F9, + 0xE58D: 0x870A, + 0xE58E: 0x8734, + 0xE58F: 0x873F, + 0xE590: 0x8737, + 0xE591: 0x873B, + 0xE592: 0x8725, + 0xE593: 0x8729, + 0xE594: 0x871A, + 0xE595: 0x8760, + 0xE596: 0x875F, + 0xE597: 0x8778, + 0xE598: 0x874C, + 0xE599: 0x874E, + 0xE59A: 0x8774, + 0xE59B: 0x8757, + 0xE59C: 0x8768, + 0xE59D: 0x876E, + 0xE59E: 0x8759, + 0xE59F: 0x8753, + 0xE5A0: 0x8763, + 0xE5A1: 0x876A, + 0xE5A2: 0x8805, + 0xE5A3: 0x87A2, + 0xE5A4: 0x879F, + 0xE5A5: 0x8782, + 0xE5A6: 0x87AF, + 0xE5A7: 0x87CB, + 0xE5A8: 0x87BD, + 0xE5A9: 0x87C0, + 0xE5AA: 0x87D0, + 0xE5AB: 0x96D6, + 0xE5AC: 0x87AB, + 0xE5AD: 0x87C4, + 0xE5AE: 0x87B3, + 0xE5AF: 0x87C7, + 0xE5B0: 0x87C6, + 0xE5B1: 0x87BB, + 0xE5B2: 0x87EF, + 0xE5B3: 0x87F2, + 0xE5B4: 0x87E0, + 0xE5B5: 0x880F, + 0xE5B6: 0x880D, + 0xE5B7: 0x87FE, + 0xE5B8: 0x87F6, + 0xE5B9: 0x87F7, + 0xE5BA: 0x880E, + 0xE5BB: 0x87D2, + 0xE5BC: 0x8811, + 0xE5BD: 0x8816, + 0xE5BE: 0x8815, + 0xE5BF: 0x8822, + 0xE5C0: 0x8821, + 0xE5C1: 0x8831, + 0xE5C2: 0x8836, + 0xE5C3: 0x8839, + 0xE5C4: 0x8827, + 0xE5C5: 0x883B, + 0xE5C6: 0x8844, + 0xE5C7: 0x8842, + 0xE5C8: 0x8852, + 0xE5C9: 0x8859, + 0xE5CA: 0x885E, + 0xE5CB: 0x8862, + 0xE5CC: 0x886B, + 0xE5CD: 0x8881, + 0xE5CE: 0x887E, + 0xE5CF: 0x889E, + 0xE5D0: 0x8875, + 0xE5D1: 0x887D, + 0xE5D2: 0x88B5, + 0xE5D3: 0x8872, + 0xE5D4: 0x8882, + 0xE5D5: 0x8897, + 0xE5D6: 0x8892, + 0xE5D7: 0x88AE, + 0xE5D8: 0x8899, + 0xE5D9: 0x88A2, + 0xE5DA: 0x888D, + 0xE5DB: 0x88A4, + 0xE5DC: 0x88B0, + 0xE5DD: 0x88BF, + 0xE5DE: 0x88B1, + 0xE5DF: 0x88C3, + 0xE5E0: 0x88C4, + 0xE5E1: 0x88D4, + 0xE5E2: 0x88D8, + 0xE5E3: 0x88D9, + 0xE5E4: 0x88DD, + 0xE5E5: 0x88F9, + 0xE5E6: 0x8902, + 0xE5E7: 0x88FC, + 0xE5E8: 0x88F4, + 0xE5E9: 0x88E8, + 0xE5EA: 0x88F2, + 0xE5EB: 0x8904, + 0xE5EC: 0x890C, + 0xE5ED: 0x890A, + 0xE5EE: 0x8913, + 0xE5EF: 0x8943, + 0xE5F0: 0x891E, + 0xE5F1: 0x8925, + 0xE5F2: 0x892A, + 0xE5F3: 0x892B, + 0xE5F4: 0x8941, + 0xE5F5: 0x8944, + 0xE5F6: 0x893B, + 0xE5F7: 0x8936, + 0xE5F8: 0x8938, + 0xE5F9: 0x894C, + 0xE5FA: 0x891D, + 0xE5FB: 0x8960, + 0xE5FC: 0x895E, + 0xE640: 0x8966, + 0xE641: 0x8964, + 0xE642: 0x896D, + 0xE643: 0x896A, + 0xE644: 0x896F, + 0xE645: 0x8974, + 0xE646: 0x8977, + 0xE647: 0x897E, + 0xE648: 0x8983, + 0xE649: 0x8988, + 0xE64A: 0x898A, + 0xE64B: 0x8993, + 0xE64C: 0x8998, + 0xE64D: 0x89A1, + 0xE64E: 0x89A9, + 0xE64F: 0x89A6, + 0xE650: 0x89AC, + 0xE651: 0x89AF, + 0xE652: 0x89B2, + 0xE653: 0x89BA, + 0xE654: 0x89BD, + 0xE655: 0x89BF, + 0xE656: 0x89C0, + 0xE657: 0x89DA, + 0xE658: 0x89DC, + 0xE659: 0x89DD, + 0xE65A: 0x89E7, + 0xE65B: 0x89F4, + 0xE65C: 0x89F8, + 0xE65D: 0x8A03, + 0xE65E: 0x8A16, + 0xE65F: 0x8A10, + 0xE660: 0x8A0C, + 0xE661: 0x8A1B, + 0xE662: 0x8A1D, + 0xE663: 0x8A25, + 0xE664: 0x8A36, + 0xE665: 0x8A41, + 0xE666: 0x8A5B, + 0xE667: 0x8A52, + 0xE668: 0x8A46, + 0xE669: 0x8A48, + 0xE66A: 0x8A7C, + 0xE66B: 0x8A6D, + 0xE66C: 0x8A6C, + 0xE66D: 0x8A62, + 0xE66E: 0x8A85, + 0xE66F: 0x8A82, + 0xE670: 0x8A84, + 0xE671: 0x8AA8, + 0xE672: 0x8AA1, + 0xE673: 0x8A91, + 0xE674: 0x8AA5, + 0xE675: 0x8AA6, + 0xE676: 0x8A9A, + 0xE677: 0x8AA3, + 0xE678: 0x8AC4, + 0xE679: 0x8ACD, + 0xE67A: 0x8AC2, + 0xE67B: 0x8ADA, + 0xE67C: 0x8AEB, + 0xE67D: 0x8AF3, + 0xE67E: 0x8AE7, + 0xE680: 0x8AE4, + 0xE681: 0x8AF1, + 0xE682: 0x8B14, + 0xE683: 0x8AE0, + 0xE684: 0x8AE2, + 0xE685: 0x8AF7, + 0xE686: 0x8ADE, + 0xE687: 0x8ADB, + 0xE688: 0x8B0C, + 0xE689: 0x8B07, + 0xE68A: 0x8B1A, + 0xE68B: 0x8AE1, + 0xE68C: 0x8B16, + 0xE68D: 0x8B10, + 0xE68E: 0x8B17, + 0xE68F: 0x8B20, + 0xE690: 0x8B33, + 0xE691: 0x97AB, + 0xE692: 0x8B26, + 0xE693: 0x8B2B, + 0xE694: 0x8B3E, + 0xE695: 0x8B28, + 0xE696: 0x8B41, + 0xE697: 0x8B4C, + 0xE698: 0x8B4F, + 0xE699: 0x8B4E, + 0xE69A: 0x8B49, + 0xE69B: 0x8B56, + 0xE69C: 0x8B5B, + 0xE69D: 0x8B5A, + 0xE69E: 0x8B6B, + 0xE69F: 0x8B5F, + 0xE6A0: 0x8B6C, + 0xE6A1: 0x8B6F, + 0xE6A2: 0x8B74, + 0xE6A3: 0x8B7D, + 0xE6A4: 0x8B80, + 0xE6A5: 0x8B8C, + 0xE6A6: 0x8B8E, + 0xE6A7: 0x8B92, + 0xE6A8: 0x8B93, + 0xE6A9: 0x8B96, + 0xE6AA: 0x8B99, + 0xE6AB: 0x8B9A, + 0xE6AC: 0x8C3A, + 0xE6AD: 0x8C41, + 0xE6AE: 0x8C3F, + 0xE6AF: 0x8C48, + 0xE6B0: 0x8C4C, + 0xE6B1: 0x8C4E, + 0xE6B2: 0x8C50, + 0xE6B3: 0x8C55, + 0xE6B4: 0x8C62, + 0xE6B5: 0x8C6C, + 0xE6B6: 0x8C78, + 0xE6B7: 0x8C7A, + 0xE6B8: 0x8C82, + 0xE6B9: 0x8C89, + 0xE6BA: 0x8C85, + 0xE6BB: 0x8C8A, + 0xE6BC: 0x8C8D, + 0xE6BD: 0x8C8E, + 0xE6BE: 0x8C94, + 0xE6BF: 0x8C7C, + 0xE6C0: 0x8C98, + 0xE6C1: 0x621D, + 0xE6C2: 0x8CAD, + 0xE6C3: 0x8CAA, + 0xE6C4: 0x8CBD, + 0xE6C5: 0x8CB2, + 0xE6C6: 0x8CB3, + 0xE6C7: 0x8CAE, + 0xE6C8: 0x8CB6, + 0xE6C9: 0x8CC8, + 0xE6CA: 0x8CC1, + 0xE6CB: 0x8CE4, + 0xE6CC: 0x8CE3, + 0xE6CD: 0x8CDA, + 0xE6CE: 0x8CFD, + 0xE6CF: 0x8CFA, + 0xE6D0: 0x8CFB, + 0xE6D1: 0x8D04, + 0xE6D2: 0x8D05, + 0xE6D3: 0x8D0A, + 0xE6D4: 0x8D07, + 0xE6D5: 0x8D0F, + 0xE6D6: 0x8D0D, + 0xE6D7: 0x8D10, + 0xE6D8: 0x9F4E, + 0xE6D9: 0x8D13, + 0xE6DA: 0x8CCD, + 0xE6DB: 0x8D14, + 0xE6DC: 0x8D16, + 0xE6DD: 0x8D67, + 0xE6DE: 0x8D6D, + 0xE6DF: 0x8D71, + 0xE6E0: 0x8D73, + 0xE6E1: 0x8D81, + 0xE6E2: 0x8D99, + 0xE6E3: 0x8DC2, + 0xE6E4: 0x8DBE, + 0xE6E5: 0x8DBA, + 0xE6E6: 0x8DCF, + 0xE6E7: 0x8DDA, + 0xE6E8: 0x8DD6, + 0xE6E9: 0x8DCC, + 0xE6EA: 0x8DDB, + 0xE6EB: 0x8DCB, + 0xE6EC: 0x8DEA, + 0xE6ED: 0x8DEB, + 0xE6EE: 0x8DDF, + 0xE6EF: 0x8DE3, + 0xE6F0: 0x8DFC, + 0xE6F1: 0x8E08, + 0xE6F2: 0x8E09, + 0xE6F3: 0x8DFF, + 0xE6F4: 0x8E1D, + 0xE6F5: 0x8E1E, + 0xE6F6: 0x8E10, + 0xE6F7: 0x8E1F, + 0xE6F8: 0x8E42, + 0xE6F9: 0x8E35, + 0xE6FA: 0x8E30, + 0xE6FB: 0x8E34, + 0xE6FC: 0x8E4A, + 0xE740: 0x8E47, + 0xE741: 0x8E49, + 0xE742: 0x8E4C, + 0xE743: 0x8E50, + 0xE744: 0x8E48, + 0xE745: 0x8E59, + 0xE746: 0x8E64, + 0xE747: 0x8E60, + 0xE748: 0x8E2A, + 0xE749: 0x8E63, + 0xE74A: 0x8E55, + 0xE74B: 0x8E76, + 0xE74C: 0x8E72, + 0xE74D: 0x8E7C, + 0xE74E: 0x8E81, + 0xE74F: 0x8E87, + 0xE750: 0x8E85, + 0xE751: 0x8E84, + 0xE752: 0x8E8B, + 0xE753: 0x8E8A, + 0xE754: 0x8E93, + 0xE755: 0x8E91, + 0xE756: 0x8E94, + 0xE757: 0x8E99, + 0xE758: 0x8EAA, + 0xE759: 0x8EA1, + 0xE75A: 0x8EAC, + 0xE75B: 0x8EB0, + 0xE75C: 0x8EC6, + 0xE75D: 0x8EB1, + 0xE75E: 0x8EBE, + 0xE75F: 0x8EC5, + 0xE760: 0x8EC8, + 0xE761: 0x8ECB, + 0xE762: 0x8EDB, + 0xE763: 0x8EE3, + 0xE764: 0x8EFC, + 0xE765: 0x8EFB, + 0xE766: 0x8EEB, + 0xE767: 0x8EFE, + 0xE768: 0x8F0A, + 0xE769: 0x8F05, + 0xE76A: 0x8F15, + 0xE76B: 0x8F12, + 0xE76C: 0x8F19, + 0xE76D: 0x8F13, + 0xE76E: 0x8F1C, + 0xE76F: 0x8F1F, + 0xE770: 0x8F1B, + 0xE771: 0x8F0C, + 0xE772: 0x8F26, + 0xE773: 0x8F33, + 0xE774: 0x8F3B, + 0xE775: 0x8F39, + 0xE776: 0x8F45, + 0xE777: 0x8F42, + 0xE778: 0x8F3E, + 0xE779: 0x8F4C, + 0xE77A: 0x8F49, + 0xE77B: 0x8F46, + 0xE77C: 0x8F4E, + 0xE77D: 0x8F57, + 0xE77E: 0x8F5C, + 0xE780: 0x8F62, + 0xE781: 0x8F63, + 0xE782: 0x8F64, + 0xE783: 0x8F9C, + 0xE784: 0x8F9F, + 0xE785: 0x8FA3, + 0xE786: 0x8FAD, + 0xE787: 0x8FAF, + 0xE788: 0x8FB7, + 0xE789: 0x8FDA, + 0xE78A: 0x8FE5, + 0xE78B: 0x8FE2, + 0xE78C: 0x8FEA, + 0xE78D: 0x8FEF, + 0xE78E: 0x9087, + 0xE78F: 0x8FF4, + 0xE790: 0x9005, + 0xE791: 0x8FF9, + 0xE792: 0x8FFA, + 0xE793: 0x9011, + 0xE794: 0x9015, + 0xE795: 0x9021, + 0xE796: 0x900D, + 0xE797: 0x901E, + 0xE798: 0x9016, + 0xE799: 0x900B, + 0xE79A: 0x9027, + 0xE79B: 0x9036, + 0xE79C: 0x9035, + 0xE79D: 0x9039, + 0xE79E: 0x8FF8, + 0xE79F: 0x904F, + 0xE7A0: 0x9050, + 0xE7A1: 0x9051, + 0xE7A2: 0x9052, + 0xE7A3: 0x900E, + 0xE7A4: 0x9049, + 0xE7A5: 0x903E, + 0xE7A6: 0x9056, + 0xE7A7: 0x9058, + 0xE7A8: 0x905E, + 0xE7A9: 0x9068, + 0xE7AA: 0x906F, + 0xE7AB: 0x9076, + 0xE7AC: 0x96A8, + 0xE7AD: 0x9072, + 0xE7AE: 0x9082, + 0xE7AF: 0x907D, + 0xE7B0: 0x9081, + 0xE7B1: 0x9080, + 0xE7B2: 0x908A, + 0xE7B3: 0x9089, + 0xE7B4: 0x908F, + 0xE7B5: 0x90A8, + 0xE7B6: 0x90AF, + 0xE7B7: 0x90B1, + 0xE7B8: 0x90B5, + 0xE7B9: 0x90E2, + 0xE7BA: 0x90E4, + 0xE7BB: 0x6248, + 0xE7BC: 0x90DB, + 0xE7BD: 0x9102, + 0xE7BE: 0x9112, + 0xE7BF: 0x9119, + 0xE7C0: 0x9132, + 0xE7C1: 0x9130, + 0xE7C2: 0x914A, + 0xE7C3: 0x9156, + 0xE7C4: 0x9158, + 0xE7C5: 0x9163, + 0xE7C6: 0x9165, + 0xE7C7: 0x9169, + 0xE7C8: 0x9173, + 0xE7C9: 0x9172, + 0xE7CA: 0x918B, + 0xE7CB: 0x9189, + 0xE7CC: 0x9182, + 0xE7CD: 0x91A2, + 0xE7CE: 0x91AB, + 0xE7CF: 0x91AF, + 0xE7D0: 0x91AA, + 0xE7D1: 0x91B5, + 0xE7D2: 0x91B4, + 0xE7D3: 0x91BA, + 0xE7D4: 0x91C0, + 0xE7D5: 0x91C1, + 0xE7D6: 0x91C9, + 0xE7D7: 0x91CB, + 0xE7D8: 0x91D0, + 0xE7D9: 0x91D6, + 0xE7DA: 0x91DF, + 0xE7DB: 0x91E1, + 0xE7DC: 0x91DB, + 0xE7DD: 0x91FC, + 0xE7DE: 0x91F5, + 0xE7DF: 0x91F6, + 0xE7E0: 0x921E, + 0xE7E1: 0x91FF, + 0xE7E2: 0x9214, + 0xE7E3: 0x922C, + 0xE7E4: 0x9215, + 0xE7E5: 0x9211, + 0xE7E6: 0x925E, + 0xE7E7: 0x9257, + 0xE7E8: 0x9245, + 0xE7E9: 0x9249, + 0xE7EA: 0x9264, + 0xE7EB: 0x9248, + 0xE7EC: 0x9295, + 0xE7ED: 0x923F, + 0xE7EE: 0x924B, + 0xE7EF: 0x9250, + 0xE7F0: 0x929C, + 0xE7F1: 0x9296, + 0xE7F2: 0x9293, + 0xE7F3: 0x929B, + 0xE7F4: 0x925A, + 0xE7F5: 0x92CF, + 0xE7F6: 0x92B9, + 0xE7F7: 0x92B7, + 0xE7F8: 0x92E9, + 0xE7F9: 0x930F, + 0xE7FA: 0x92FA, + 0xE7FB: 0x9344, + 0xE7FC: 0x932E, + 0xE840: 0x9319, + 0xE841: 0x9322, + 0xE842: 0x931A, + 0xE843: 0x9323, + 0xE844: 0x933A, + 0xE845: 0x9335, + 0xE846: 0x933B, + 0xE847: 0x935C, + 0xE848: 0x9360, + 0xE849: 0x937C, + 0xE84A: 0x936E, + 0xE84B: 0x9356, + 0xE84C: 0x93B0, + 0xE84D: 0x93AC, + 0xE84E: 0x93AD, + 0xE84F: 0x9394, + 0xE850: 0x93B9, + 0xE851: 0x93D6, + 0xE852: 0x93D7, + 0xE853: 0x93E8, + 0xE854: 0x93E5, + 0xE855: 0x93D8, + 0xE856: 0x93C3, + 0xE857: 0x93DD, + 0xE858: 0x93D0, + 0xE859: 0x93C8, + 0xE85A: 0x93E4, + 0xE85B: 0x941A, + 0xE85C: 0x9414, + 0xE85D: 0x9413, + 0xE85E: 0x9403, + 0xE85F: 0x9407, + 0xE860: 0x9410, + 0xE861: 0x9436, + 0xE862: 0x942B, + 0xE863: 0x9435, + 0xE864: 0x9421, + 0xE865: 0x943A, + 0xE866: 0x9441, + 0xE867: 0x9452, + 0xE868: 0x9444, + 0xE869: 0x945B, + 0xE86A: 0x9460, + 0xE86B: 0x9462, + 0xE86C: 0x945E, + 0xE86D: 0x946A, + 0xE86E: 0x9229, + 0xE86F: 0x9470, + 0xE870: 0x9475, + 0xE871: 0x9477, + 0xE872: 0x947D, + 0xE873: 0x945A, + 0xE874: 0x947C, + 0xE875: 0x947E, + 0xE876: 0x9481, + 0xE877: 0x947F, + 0xE878: 0x9582, + 0xE879: 0x9587, + 0xE87A: 0x958A, + 0xE87B: 0x9594, + 0xE87C: 0x9596, + 0xE87D: 0x9598, + 0xE87E: 0x9599, + 0xE880: 0x95A0, + 0xE881: 0x95A8, + 0xE882: 0x95A7, + 0xE883: 0x95AD, + 0xE884: 0x95BC, + 0xE885: 0x95BB, + 0xE886: 0x95B9, + 0xE887: 0x95BE, + 0xE888: 0x95CA, + 0xE889: 0x6FF6, + 0xE88A: 0x95C3, + 0xE88B: 0x95CD, + 0xE88C: 0x95CC, + 0xE88D: 0x95D5, + 0xE88E: 0x95D4, + 0xE88F: 0x95D6, + 0xE890: 0x95DC, + 0xE891: 0x95E1, + 0xE892: 0x95E5, + 0xE893: 0x95E2, + 0xE894: 0x9621, + 0xE895: 0x9628, + 0xE896: 0x962E, + 0xE897: 0x962F, + 0xE898: 0x9642, + 0xE899: 0x964C, + 0xE89A: 0x964F, + 0xE89B: 0x964B, + 0xE89C: 0x9677, + 0xE89D: 0x965C, + 0xE89E: 0x965E, + 0xE89F: 0x965D, + 0xE8A0: 0x965F, + 0xE8A1: 0x9666, + 0xE8A2: 0x9672, + 0xE8A3: 0x966C, + 0xE8A4: 0x968D, + 0xE8A5: 0x9698, + 0xE8A6: 0x9695, + 0xE8A7: 0x9697, + 0xE8A8: 0x96AA, + 0xE8A9: 0x96A7, + 0xE8AA: 0x96B1, + 0xE8AB: 0x96B2, + 0xE8AC: 0x96B0, + 0xE8AD: 0x96B4, + 0xE8AE: 0x96B6, + 0xE8AF: 0x96B8, + 0xE8B0: 0x96B9, + 0xE8B1: 0x96CE, + 0xE8B2: 0x96CB, + 0xE8B3: 0x96C9, + 0xE8B4: 0x96CD, + 0xE8B5: 0x894D, + 0xE8B6: 0x96DC, + 0xE8B7: 0x970D, + 0xE8B8: 0x96D5, + 0xE8B9: 0x96F9, + 0xE8BA: 0x9704, + 0xE8BB: 0x9706, + 0xE8BC: 0x9708, + 0xE8BD: 0x9713, + 0xE8BE: 0x970E, + 0xE8BF: 0x9711, + 0xE8C0: 0x970F, + 0xE8C1: 0x9716, + 0xE8C2: 0x9719, + 0xE8C3: 0x9724, + 0xE8C4: 0x972A, + 0xE8C5: 0x9730, + 0xE8C6: 0x9739, + 0xE8C7: 0x973D, + 0xE8C8: 0x973E, + 0xE8C9: 0x9744, + 0xE8CA: 0x9746, + 0xE8CB: 0x9748, + 0xE8CC: 0x9742, + 0xE8CD: 0x9749, + 0xE8CE: 0x975C, + 0xE8CF: 0x9760, + 0xE8D0: 0x9764, + 0xE8D1: 0x9766, + 0xE8D2: 0x9768, + 0xE8D3: 0x52D2, + 0xE8D4: 0x976B, + 0xE8D5: 0x9771, + 0xE8D6: 0x9779, + 0xE8D7: 0x9785, + 0xE8D8: 0x977C, + 0xE8D9: 0x9781, + 0xE8DA: 0x977A, + 0xE8DB: 0x9786, + 0xE8DC: 0x978B, + 0xE8DD: 0x978F, + 0xE8DE: 0x9790, + 0xE8DF: 0x979C, + 0xE8E0: 0x97A8, + 0xE8E1: 0x97A6, + 0xE8E2: 0x97A3, + 0xE8E3: 0x97B3, + 0xE8E4: 0x97B4, + 0xE8E5: 0x97C3, + 0xE8E6: 0x97C6, + 0xE8E7: 0x97C8, + 0xE8E8: 0x97CB, + 0xE8E9: 0x97DC, + 0xE8EA: 0x97ED, + 0xE8EB: 0x9F4F, + 0xE8EC: 0x97F2, + 0xE8ED: 0x7ADF, + 0xE8EE: 0x97F6, + 0xE8EF: 0x97F5, + 0xE8F0: 0x980F, + 0xE8F1: 0x980C, + 0xE8F2: 0x9838, + 0xE8F3: 0x9824, + 0xE8F4: 0x9821, + 0xE8F5: 0x9837, + 0xE8F6: 0x983D, + 0xE8F7: 0x9846, + 0xE8F8: 0x984F, + 0xE8F9: 0x984B, + 0xE8FA: 0x986B, + 0xE8FB: 0x986F, + 0xE8FC: 0x9870, + 0xE940: 0x9871, + 0xE941: 0x9874, + 0xE942: 0x9873, + 0xE943: 0x98AA, + 0xE944: 0x98AF, + 0xE945: 0x98B1, + 0xE946: 0x98B6, + 0xE947: 0x98C4, + 0xE948: 0x98C3, + 0xE949: 0x98C6, + 0xE94A: 0x98E9, + 0xE94B: 0x98EB, + 0xE94C: 0x9903, + 0xE94D: 0x9909, + 0xE94E: 0x9912, + 0xE94F: 0x9914, + 0xE950: 0x9918, + 0xE951: 0x9921, + 0xE952: 0x991D, + 0xE953: 0x991E, + 0xE954: 0x9924, + 0xE955: 0x9920, + 0xE956: 0x992C, + 0xE957: 0x992E, + 0xE958: 0x993D, + 0xE959: 0x993E, + 0xE95A: 0x9942, + 0xE95B: 0x9949, + 0xE95C: 0x9945, + 0xE95D: 0x9950, + 0xE95E: 0x994B, + 0xE95F: 0x9951, + 0xE960: 0x9952, + 0xE961: 0x994C, + 0xE962: 0x9955, + 0xE963: 0x9997, + 0xE964: 0x9998, + 0xE965: 0x99A5, + 0xE966: 0x99AD, + 0xE967: 0x99AE, + 0xE968: 0x99BC, + 0xE969: 0x99DF, + 0xE96A: 0x99DB, + 0xE96B: 0x99DD, + 0xE96C: 0x99D8, + 0xE96D: 0x99D1, + 0xE96E: 0x99ED, + 0xE96F: 0x99EE, + 0xE970: 0x99F1, + 0xE971: 0x99F2, + 0xE972: 0x99FB, + 0xE973: 0x99F8, + 0xE974: 0x9A01, + 0xE975: 0x9A0F, + 0xE976: 0x9A05, + 0xE977: 0x99E2, + 0xE978: 0x9A19, + 0xE979: 0x9A2B, + 0xE97A: 0x9A37, + 0xE97B: 0x9A45, + 0xE97C: 0x9A42, + 0xE97D: 0x9A40, + 0xE97E: 0x9A43, + 0xE980: 0x9A3E, + 0xE981: 0x9A55, + 0xE982: 0x9A4D, + 0xE983: 0x9A5B, + 0xE984: 0x9A57, + 0xE985: 0x9A5F, + 0xE986: 0x9A62, + 0xE987: 0x9A65, + 0xE988: 0x9A64, + 0xE989: 0x9A69, + 0xE98A: 0x9A6B, + 0xE98B: 0x9A6A, + 0xE98C: 0x9AAD, + 0xE98D: 0x9AB0, + 0xE98E: 0x9ABC, + 0xE98F: 0x9AC0, + 0xE990: 0x9ACF, + 0xE991: 0x9AD1, + 0xE992: 0x9AD3, + 0xE993: 0x9AD4, + 0xE994: 0x9ADE, + 0xE995: 0x9ADF, + 0xE996: 0x9AE2, + 0xE997: 0x9AE3, + 0xE998: 0x9AE6, + 0xE999: 0x9AEF, + 0xE99A: 0x9AEB, + 0xE99B: 0x9AEE, + 0xE99C: 0x9AF4, + 0xE99D: 0x9AF1, + 0xE99E: 0x9AF7, + 0xE99F: 0x9AFB, + 0xE9A0: 0x9B06, + 0xE9A1: 0x9B18, + 0xE9A2: 0x9B1A, + 0xE9A3: 0x9B1F, + 0xE9A4: 0x9B22, + 0xE9A5: 0x9B23, + 0xE9A6: 0x9B25, + 0xE9A7: 0x9B27, + 0xE9A8: 0x9B28, + 0xE9A9: 0x9B29, + 0xE9AA: 0x9B2A, + 0xE9AB: 0x9B2E, + 0xE9AC: 0x9B2F, + 0xE9AD: 0x9B32, + 0xE9AE: 0x9B44, + 0xE9AF: 0x9B43, + 0xE9B0: 0x9B4F, + 0xE9B1: 0x9B4D, + 0xE9B2: 0x9B4E, + 0xE9B3: 0x9B51, + 0xE9B4: 0x9B58, + 0xE9B5: 0x9B74, + 0xE9B6: 0x9B93, + 0xE9B7: 0x9B83, + 0xE9B8: 0x9B91, + 0xE9B9: 0x9B96, + 0xE9BA: 0x9B97, + 0xE9BB: 0x9B9F, + 0xE9BC: 0x9BA0, + 0xE9BD: 0x9BA8, + 0xE9BE: 0x9BB4, + 0xE9BF: 0x9BC0, + 0xE9C0: 0x9BCA, + 0xE9C1: 0x9BB9, + 0xE9C2: 0x9BC6, + 0xE9C3: 0x9BCF, + 0xE9C4: 0x9BD1, + 0xE9C5: 0x9BD2, + 0xE9C6: 0x9BE3, + 0xE9C7: 0x9BE2, + 0xE9C8: 0x9BE4, + 0xE9C9: 0x9BD4, + 0xE9CA: 0x9BE1, + 0xE9CB: 0x9C3A, + 0xE9CC: 0x9BF2, + 0xE9CD: 0x9BF1, + 0xE9CE: 0x9BF0, + 0xE9CF: 0x9C15, + 0xE9D0: 0x9C14, + 0xE9D1: 0x9C09, + 0xE9D2: 0x9C13, + 0xE9D3: 0x9C0C, + 0xE9D4: 0x9C06, + 0xE9D5: 0x9C08, + 0xE9D6: 0x9C12, + 0xE9D7: 0x9C0A, + 0xE9D8: 0x9C04, + 0xE9D9: 0x9C2E, + 0xE9DA: 0x9C1B, + 0xE9DB: 0x9C25, + 0xE9DC: 0x9C24, + 0xE9DD: 0x9C21, + 0xE9DE: 0x9C30, + 0xE9DF: 0x9C47, + 0xE9E0: 0x9C32, + 0xE9E1: 0x9C46, + 0xE9E2: 0x9C3E, + 0xE9E3: 0x9C5A, + 0xE9E4: 0x9C60, + 0xE9E5: 0x9C67, + 0xE9E6: 0x9C76, + 0xE9E7: 0x9C78, + 0xE9E8: 0x9CE7, + 0xE9E9: 0x9CEC, + 0xE9EA: 0x9CF0, + 0xE9EB: 0x9D09, + 0xE9EC: 0x9D08, + 0xE9ED: 0x9CEB, + 0xE9EE: 0x9D03, + 0xE9EF: 0x9D06, + 0xE9F0: 0x9D2A, + 0xE9F1: 0x9D26, + 0xE9F2: 0x9DAF, + 0xE9F3: 0x9D23, + 0xE9F4: 0x9D1F, + 0xE9F5: 0x9D44, + 0xE9F6: 0x9D15, + 0xE9F7: 0x9D12, + 0xE9F8: 0x9D41, + 0xE9F9: 0x9D3F, + 0xE9FA: 0x9D3E, + 0xE9FB: 0x9D46, + 0xE9FC: 0x9D48, + 0xEA40: 0x9D5D, + 0xEA41: 0x9D5E, + 0xEA42: 0x9D64, + 0xEA43: 0x9D51, + 0xEA44: 0x9D50, + 0xEA45: 0x9D59, + 0xEA46: 0x9D72, + 0xEA47: 0x9D89, + 0xEA48: 0x9D87, + 0xEA49: 0x9DAB, + 0xEA4A: 0x9D6F, + 0xEA4B: 0x9D7A, + 0xEA4C: 0x9D9A, + 0xEA4D: 0x9DA4, + 0xEA4E: 0x9DA9, + 0xEA4F: 0x9DB2, + 0xEA50: 0x9DC4, + 0xEA51: 0x9DC1, + 0xEA52: 0x9DBB, + 0xEA53: 0x9DB8, + 0xEA54: 0x9DBA, + 0xEA55: 0x9DC6, + 0xEA56: 0x9DCF, + 0xEA57: 0x9DC2, + 0xEA58: 0x9DD9, + 0xEA59: 0x9DD3, + 0xEA5A: 0x9DF8, + 0xEA5B: 0x9DE6, + 0xEA5C: 0x9DED, + 0xEA5D: 0x9DEF, + 0xEA5E: 0x9DFD, + 0xEA5F: 0x9E1A, + 0xEA60: 0x9E1B, + 0xEA61: 0x9E1E, + 0xEA62: 0x9E75, + 0xEA63: 0x9E79, + 0xEA64: 0x9E7D, + 0xEA65: 0x9E81, + 0xEA66: 0x9E88, + 0xEA67: 0x9E8B, + 0xEA68: 0x9E8C, + 0xEA69: 0x9E92, + 0xEA6A: 0x9E95, + 0xEA6B: 0x9E91, + 0xEA6C: 0x9E9D, + 0xEA6D: 0x9EA5, + 0xEA6E: 0x9EA9, + 0xEA6F: 0x9EB8, + 0xEA70: 0x9EAA, + 0xEA71: 0x9EAD, + 0xEA72: 0x9761, + 0xEA73: 0x9ECC, + 0xEA74: 0x9ECE, + 0xEA75: 0x9ECF, + 0xEA76: 0x9ED0, + 0xEA77: 0x9ED4, + 0xEA78: 0x9EDC, + 0xEA79: 0x9EDE, + 0xEA7A: 0x9EDD, + 0xEA7B: 0x9EE0, + 0xEA7C: 0x9EE5, + 0xEA7D: 0x9EE8, + 0xEA7E: 0x9EEF, + 0xEA80: 0x9EF4, + 0xEA81: 0x9EF6, + 0xEA82: 0x9EF7, + 0xEA83: 0x9EF9, + 0xEA84: 0x9EFB, + 0xEA85: 0x9EFC, + 0xEA86: 0x9EFD, + 0xEA87: 0x9F07, + 0xEA88: 0x9F08, + 0xEA89: 0x76B7, + 0xEA8A: 0x9F15, + 0xEA8B: 0x9F21, + 0xEA8C: 0x9F2C, + 0xEA8D: 0x9F3E, + 0xEA8E: 0x9F4A, + 0xEA8F: 0x9F52, + 0xEA90: 0x9F54, + 0xEA91: 0x9F63, + 0xEA92: 0x9F5F, + 0xEA93: 0x9F60, + 0xEA94: 0x9F61, + 0xEA95: 0x9F66, + 0xEA96: 0x9F67, + 0xEA97: 0x9F6C, + 0xEA98: 0x9F6A, + 0xEA99: 0x9F77, + 0xEA9A: 0x9F72, + 0xEA9B: 0x9F76, + 0xEA9C: 0x9F95, + 0xEA9D: 0x9F9C, + 0xEA9E: 0x9FA0, + 0xEA9F: 0x582F, + 0xEAA0: 0x69C7, + 0xEAA1: 0x9059, + 0xEAA2: 0x7464, + 0xEAA3: 0x51DC, + 0xEAA4: 0x7199, +}; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VERSIONS = [ + { + infoBits: null, + versionNumber: 1, + alignmentPatternCenters: [], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 7, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + { + ecCodewordsPerBlock: 13, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }], + }, + { + ecCodewordsPerBlock: 17, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 2, + alignmentPatternCenters: [6, 18], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 3, + alignmentPatternCenters: [6, 22], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 15, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 4, + alignmentPatternCenters: [6, 26], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 5, + alignmentPatternCenters: [6, 30], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 11 }, + { numBlocks: 2, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: null, + versionNumber: 6, + alignmentPatternCenters: [6, 34], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }], + }, + ], + }, + { + infoBits: 0x07C94, + versionNumber: 7, + alignmentPatternCenters: [6, 22, 38], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + { numBlocks: 1, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x085BC, + versionNumber: 8, + alignmentPatternCenters: [6, 24, 42], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 38 }, + { numBlocks: 2, dataCodewordsPerBlock: 39 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 18 }, + { numBlocks: 2, dataCodewordsPerBlock: 19 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 14 }, + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x09A99, + versionNumber: 9, + alignmentPatternCenters: [6, 26, 46], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0A4D3, + versionNumber: 10, + alignmentPatternCenters: [6, 28, 50], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 68 }, + { numBlocks: 2, dataCodewordsPerBlock: 69 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 43 }, + { numBlocks: 1, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x0BBF6, + versionNumber: 11, + alignmentPatternCenters: [6, 30, 54], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 50 }, + { numBlocks: 4, dataCodewordsPerBlock: 51 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + { numBlocks: 4, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 12 }, + { numBlocks: 8, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0C762, + versionNumber: 12, + alignmentPatternCenters: [6, 32, 58], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 92 }, + { numBlocks: 2, dataCodewordsPerBlock: 93 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 20 }, + { numBlocks: 6, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x0D847, + versionNumber: 13, + alignmentPatternCenters: [6, 34, 62], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 37 }, + { numBlocks: 1, dataCodewordsPerBlock: 38 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 20 }, + { numBlocks: 4, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 11 }, + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: 0x0E60D, + versionNumber: 14, + alignmentPatternCenters: [6, 26, 46, 66], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 40 }, + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 16 }, + { numBlocks: 5, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 5, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0F928, + versionNumber: 15, + alignmentPatternCenters: [6, 26, 48, 70], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 87 }, + { numBlocks: 1, dataCodewordsPerBlock: 88 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + { numBlocks: 5, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 7, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x10B78, + versionNumber: 16, + alignmentPatternCenters: [6, 26, 50, 74], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 98 }, + { numBlocks: 1, dataCodewordsPerBlock: 99 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1145D, + versionNumber: 17, + alignmentPatternCenters: [6, 30, 54, 78], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 1, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 22 }, + { numBlocks: 15, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 17, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x12A17, + versionNumber: 18, + alignmentPatternCenters: [6, 30, 56, 82], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 120 }, + { numBlocks: 1, dataCodewordsPerBlock: 121 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 43 }, + { numBlocks: 4, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x13532, + versionNumber: 19, + alignmentPatternCenters: [6, 30, 58, 86], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 113 }, + { numBlocks: 4, dataCodewordsPerBlock: 114 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 44 }, + { numBlocks: 11, dataCodewordsPerBlock: 45 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 21 }, + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 13 }, + { numBlocks: 16, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x149A6, + versionNumber: 20, + alignmentPatternCenters: [6, 34, 62, 90], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 41 }, + { numBlocks: 13, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 5, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 15 }, + { numBlocks: 10, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x15683, + versionNumber: 21, + alignmentPatternCenters: [6, 28, 50, 72, 94], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 116 }, + { numBlocks: 4, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 16 }, + { numBlocks: 6, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x168C9, + versionNumber: 22, + alignmentPatternCenters: [6, 26, 50, 74, 98], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 111 }, + { numBlocks: 7, dataCodewordsPerBlock: 112 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: 0x177EC, + versionNumber: 23, + alignmentPatternCenters: [6, 30, 54, 74, 102], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 121 }, + { numBlocks: 5, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + { numBlocks: 14, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 16, dataCodewordsPerBlock: 15 }, + { numBlocks: 14, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x18EC4, + versionNumber: 24, + alignmentPatternCenters: [6, 28, 54, 80, 106], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 45 }, + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 30, dataCodewordsPerBlock: 16 }, + { numBlocks: 2, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x191E1, + versionNumber: 25, + alignmentPatternCenters: [6, 32, 58, 84, 110], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 106 }, + { numBlocks: 4, dataCodewordsPerBlock: 107 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 47 }, + { numBlocks: 13, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1AFAB, + versionNumber: 26, + alignmentPatternCenters: [6, 30, 58, 86, 114], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 114 }, + { numBlocks: 2, dataCodewordsPerBlock: 115 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 46 }, + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 28, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 33, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x1B08E, + versionNumber: 27, + alignmentPatternCenters: [6, 34, 62, 90, 118], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 23 }, + { numBlocks: 26, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1CC1A, + versionNumber: 28, + alignmentPatternCenters: [6, 26, 50, 74, 98, 122], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 117 }, + { numBlocks: 10, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 45 }, + { numBlocks: 23, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 24 }, + { numBlocks: 31, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 31, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1D33F, + versionNumber: 29, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 116 }, + { numBlocks: 7, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 21, dataCodewordsPerBlock: 45 }, + { numBlocks: 7, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + { numBlocks: 37, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 26, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1ED75, + versionNumber: 30, + alignmentPatternCenters: [6, 26, 52, 78, 104, 130], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 115 }, + { numBlocks: 10, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 47 }, + { numBlocks: 10, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 25, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 25, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1F250, + versionNumber: 31, + alignmentPatternCenters: [6, 30, 56, 82, 108, 134], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 3, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 46 }, + { numBlocks: 29, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 24 }, + { numBlocks: 1, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x209D5, + versionNumber: 32, + alignmentPatternCenters: [6, 34, 60, 86, 112, 138], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 24 }, + { numBlocks: 35, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 35, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x216F0, + versionNumber: 33, + alignmentPatternCenters: [6, 30, 58, 86, 114, 142], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 21, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 24 }, + { numBlocks: 19, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x228BA, + versionNumber: 34, + alignmentPatternCenters: [6, 34, 62, 90, 118, 146], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 6, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 44, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 59, dataCodewordsPerBlock: 16 }, + { numBlocks: 1, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x2379F, + versionNumber: 35, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126, 150], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 121 }, + { numBlocks: 7, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 47 }, + { numBlocks: 26, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 39, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 41, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x24B0B, + versionNumber: 36, + alignmentPatternCenters: [6, 24, 50, 76, 102, 128, 154], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 121 }, + { numBlocks: 14, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 47 }, + { numBlocks: 34, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 46, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 64, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x2542E, + versionNumber: 37, + alignmentPatternCenters: [6, 28, 54, 80, 106, 132, 158], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 46 }, + { numBlocks: 14, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 49, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 24, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x26A64, + versionNumber: 38, + alignmentPatternCenters: [6, 32, 58, 84, 110, 136, 162], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 122 }, + { numBlocks: 18, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 46 }, + { numBlocks: 32, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 48, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 15 }, + { numBlocks: 32, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x27541, + versionNumber: 39, + alignmentPatternCenters: [6, 26, 54, 82, 110, 138, 166], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 40, dataCodewordsPerBlock: 47 }, + { numBlocks: 7, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 43, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 15 }, + { numBlocks: 67, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x28C69, + versionNumber: 40, + alignmentPatternCenters: [6, 30, 58, 86, 114, 142, 170], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 118 }, + { numBlocks: 6, dataCodewordsPerBlock: 119 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 18, dataCodewordsPerBlock: 47 }, + { numBlocks: 31, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 34, dataCodewordsPerBlock: 24 }, + { numBlocks: 34, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 15 }, + { numBlocks: 61, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, +]; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BitMatrix_1 = __webpack_require__(0); +function squareToQuadrilateral(p1, p2, p3, p4) { + var dx3 = p1.x - p2.x + p3.x - p4.x; + var dy3 = p1.y - p2.y + p3.y - p4.y; + if (dx3 === 0 && dy3 === 0) { // Affine + return { + a11: p2.x - p1.x, + a12: p2.y - p1.y, + a13: 0, + a21: p3.x - p2.x, + a22: p3.y - p2.y, + a23: 0, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } + else { + var dx1 = p2.x - p3.x; + var dx2 = p4.x - p3.x; + var dy1 = p2.y - p3.y; + var dy2 = p4.y - p3.y; + var denominator = dx1 * dy2 - dx2 * dy1; + var a13 = (dx3 * dy2 - dx2 * dy3) / denominator; + var a23 = (dx1 * dy3 - dx3 * dy1) / denominator; + return { + a11: p2.x - p1.x + a13 * p2.x, + a12: p2.y - p1.y + a13 * p2.y, + a13: a13, + a21: p4.x - p1.x + a23 * p4.x, + a22: p4.y - p1.y + a23 * p4.y, + a23: a23, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } +} +function quadrilateralToSquare(p1, p2, p3, p4) { + // Here, the adjoint serves as the inverse: + var sToQ = squareToQuadrilateral(p1, p2, p3, p4); + return { + a11: sToQ.a22 * sToQ.a33 - sToQ.a23 * sToQ.a32, + a12: sToQ.a13 * sToQ.a32 - sToQ.a12 * sToQ.a33, + a13: sToQ.a12 * sToQ.a23 - sToQ.a13 * sToQ.a22, + a21: sToQ.a23 * sToQ.a31 - sToQ.a21 * sToQ.a33, + a22: sToQ.a11 * sToQ.a33 - sToQ.a13 * sToQ.a31, + a23: sToQ.a13 * sToQ.a21 - sToQ.a11 * sToQ.a23, + a31: sToQ.a21 * sToQ.a32 - sToQ.a22 * sToQ.a31, + a32: sToQ.a12 * sToQ.a31 - sToQ.a11 * sToQ.a32, + a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21, + }; +} +function times(a, b) { + return { + a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13, + a12: a.a12 * b.a11 + a.a22 * b.a12 + a.a32 * b.a13, + a13: a.a13 * b.a11 + a.a23 * b.a12 + a.a33 * b.a13, + a21: a.a11 * b.a21 + a.a21 * b.a22 + a.a31 * b.a23, + a22: a.a12 * b.a21 + a.a22 * b.a22 + a.a32 * b.a23, + a23: a.a13 * b.a21 + a.a23 * b.a22 + a.a33 * b.a23, + a31: a.a11 * b.a31 + a.a21 * b.a32 + a.a31 * b.a33, + a32: a.a12 * b.a31 + a.a22 * b.a32 + a.a32 * b.a33, + a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33, + }; +} +function extract(image, location) { + var qToS = quadrilateralToSquare({ x: 3.5, y: 3.5 }, { x: location.dimension - 3.5, y: 3.5 }, { x: location.dimension - 6.5, y: location.dimension - 6.5 }, { x: 3.5, y: location.dimension - 3.5 }); + var sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft); + var transform = times(sToQ, qToS); + var matrix = BitMatrix_1.BitMatrix.createEmpty(location.dimension, location.dimension); + var mappingFunction = function (x, y) { + var denominator = transform.a13 * x + transform.a23 * y + transform.a33; + return { + x: (transform.a11 * x + transform.a21 * y + transform.a31) / denominator, + y: (transform.a12 * x + transform.a22 * y + transform.a32) / denominator, + }; + }; + for (var y = 0; y < location.dimension; y++) { + for (var x = 0; x < location.dimension; x++) { + var xValue = x + 0.5; + var yValue = y + 0.5; + var sourcePixel = mappingFunction(xValue, yValue); + matrix.set(x, y, image.get(Math.floor(sourcePixel.x), Math.floor(sourcePixel.y))); + } + } + return { + matrix: matrix, + mappingFunction: mappingFunction, + }; +} +exports.extract = extract; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var MAX_FINDERPATTERNS_TO_SEARCH = 4; +var MIN_QUAD_RATIO = 0.5; +var MAX_QUAD_RATIO = 1.5; +var distance = function (a, b) { return Math.sqrt(Math.pow((b.x - a.x), 2) + Math.pow((b.y - a.y), 2)); }; +function sum(values) { + return values.reduce(function (a, b) { return a + b; }); +} +// Takes three finder patterns and organizes them into topLeft, topRight, etc +function reorderFinderPatterns(pattern1, pattern2, pattern3) { + var _a, _b, _c, _d; + // Find distances between pattern centers + var oneTwoDistance = distance(pattern1, pattern2); + var twoThreeDistance = distance(pattern2, pattern3); + var oneThreeDistance = distance(pattern1, pattern3); + var bottomLeft; + var topLeft; + var topRight; + // Assume one closest to other two is B; A and C will just be guesses at first + if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) { + _a = [pattern2, pattern1, pattern3], bottomLeft = _a[0], topLeft = _a[1], topRight = _a[2]; + } + else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) { + _b = [pattern1, pattern2, pattern3], bottomLeft = _b[0], topLeft = _b[1], topRight = _b[2]; + } + else { + _c = [pattern1, pattern3, pattern2], bottomLeft = _c[0], topLeft = _c[1], topRight = _c[2]; + } + // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B) + // This asks whether BC x BA has a positive z component, which is the arrangement we want. If it's negative, then + // we've got it flipped around and should swap topRight and bottomLeft. + if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) { + _d = [topRight, bottomLeft], bottomLeft = _d[0], topRight = _d[1]; + } + return { bottomLeft: bottomLeft, topLeft: topLeft, topRight: topRight }; +} +// Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns +function computeDimension(topLeft, topRight, bottomLeft, matrix) { + var moduleSize = (sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1 + sum(countBlackWhiteRun(topLeft, topRight, matrix, 5)) / 7 + + sum(countBlackWhiteRun(bottomLeft, topLeft, matrix, 5)) / 7 + + sum(countBlackWhiteRun(topRight, topLeft, matrix, 5)) / 7) / 4; + if (moduleSize < 1) { + throw new Error("Invalid module size"); + } + var topDimension = Math.round(distance(topLeft, topRight) / moduleSize); + var sideDimension = Math.round(distance(topLeft, bottomLeft) / moduleSize); + var dimension = Math.floor((topDimension + sideDimension) / 2) + 7; + switch (dimension % 4) { + case 0: + dimension++; + break; + case 2: + dimension--; + break; + } + return { dimension: dimension, moduleSize: moduleSize }; +} +// Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point. +// Returns an array of elements, representing the pixel size of the black white run. +// Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm +function countBlackWhiteRunTowardsPoint(origin, end, matrix, length) { + var switchPoints = [{ x: Math.floor(origin.x), y: Math.floor(origin.y) }]; + var steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x); + var fromX; + var fromY; + var toX; + var toY; + if (steep) { + fromX = Math.floor(origin.y); + fromY = Math.floor(origin.x); + toX = Math.floor(end.y); + toY = Math.floor(end.x); + } + else { + fromX = Math.floor(origin.x); + fromY = Math.floor(origin.y); + toX = Math.floor(end.x); + toY = Math.floor(end.y); + } + var dx = Math.abs(toX - fromX); + var dy = Math.abs(toY - fromY); + var error = Math.floor(-dx / 2); + var xStep = fromX < toX ? 1 : -1; + var yStep = fromY < toY ? 1 : -1; + var currentPixel = true; + // Loop up until x == toX, but not beyond + for (var x = fromX, y = fromY; x !== toX + xStep; x += xStep) { + // Does current pixel mean we have moved white to black or vice versa? + // Scanning black in state 0,2 and white in state 1, so if we find the wrong + // color, advance to next state or end if we are in state 2 already + var realX = steep ? y : x; + var realY = steep ? x : y; + if (matrix.get(realX, realY) !== currentPixel) { + currentPixel = !currentPixel; + switchPoints.push({ x: realX, y: realY }); + if (switchPoints.length === length + 1) { + break; + } + } + error += dy; + if (error > 0) { + if (y === toY) { + break; + } + y += yStep; + error -= dx; + } + } + var distances = []; + for (var i = 0; i < length; i++) { + if (switchPoints[i] && switchPoints[i + 1]) { + distances.push(distance(switchPoints[i], switchPoints[i + 1])); + } + else { + distances.push(0); + } + } + return distances; +} +// Takes an origin point and an end point and counts the sizes of the black white run in the origin point +// along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes +// of the black white run. Takes a length which represents the number of switches from black to white to look for. +function countBlackWhiteRun(origin, end, matrix, length) { + var _a; + var rise = end.y - origin.y; + var run = end.x - origin.x; + var towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2)); + var awayFromEnd = countBlackWhiteRunTowardsPoint(origin, { x: origin.x - run, y: origin.y - rise }, matrix, Math.ceil(length / 2)); + var middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel + return (_a = awayFromEnd.concat(middleValue)).concat.apply(_a, towardsEnd); +} +// Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the "error" - +// that is the amount the run diverges from the expected ratio +function scoreBlackWhiteRun(sequence, ratios) { + var averageSize = sum(sequence) / sum(ratios); + var error = 0; + ratios.forEach(function (ratio, i) { + error += Math.pow((sequence[i] - ratio * averageSize), 2); + }); + return { averageSize: averageSize, error: error }; +} +// Takes an X,Y point and an array of sizes and scores the point against those ratios. +// For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios +// against that. +function scorePattern(point, ratios, matrix) { + try { + var horizontalRun = countBlackWhiteRun(point, { x: -1, y: point.y }, matrix, ratios.length); + var verticalRun = countBlackWhiteRun(point, { x: point.x, y: -1 }, matrix, ratios.length); + var topLeftPoint = { + x: Math.max(0, point.x - point.y) - 1, + y: Math.max(0, point.y - point.x) - 1, + }; + var topLeftBottomRightRun = countBlackWhiteRun(point, topLeftPoint, matrix, ratios.length); + var bottomLeftPoint = { + x: Math.min(matrix.width, point.x + point.y) + 1, + y: Math.min(matrix.height, point.y + point.x) + 1, + }; + var bottomLeftTopRightRun = countBlackWhiteRun(point, bottomLeftPoint, matrix, ratios.length); + var horzError = scoreBlackWhiteRun(horizontalRun, ratios); + var vertError = scoreBlackWhiteRun(verticalRun, ratios); + var diagDownError = scoreBlackWhiteRun(topLeftBottomRightRun, ratios); + var diagUpError = scoreBlackWhiteRun(bottomLeftTopRightRun, ratios); + var ratioError = Math.sqrt(horzError.error * horzError.error + + vertError.error * vertError.error + + diagDownError.error * diagDownError.error + + diagUpError.error * diagUpError.error); + var avgSize = (horzError.averageSize + vertError.averageSize + diagDownError.averageSize + diagUpError.averageSize) / 4; + var sizeError = (Math.pow((horzError.averageSize - avgSize), 2) + + Math.pow((vertError.averageSize - avgSize), 2) + + Math.pow((diagDownError.averageSize - avgSize), 2) + + Math.pow((diagUpError.averageSize - avgSize), 2)) / avgSize; + return ratioError + sizeError; + } + catch (_a) { + return Infinity; + } +} +function recenterLocation(matrix, p) { + var leftX = Math.round(p.x); + while (matrix.get(leftX, Math.round(p.y))) { + leftX--; + } + var rightX = Math.round(p.x); + while (matrix.get(rightX, Math.round(p.y))) { + rightX++; + } + var x = (leftX + rightX) / 2; + var topY = Math.round(p.y); + while (matrix.get(Math.round(x), topY)) { + topY--; + } + var bottomY = Math.round(p.y); + while (matrix.get(Math.round(x), bottomY)) { + bottomY++; + } + var y = (topY + bottomY) / 2; + return { x: x, y: y }; +} +function locate(matrix) { + var finderPatternQuads = []; + var activeFinderPatternQuads = []; + var alignmentPatternQuads = []; + var activeAlignmentPatternQuads = []; + var _loop_1 = function (y) { + var length_1 = 0; + var lastBit = false; + var scans = [0, 0, 0, 0, 0]; + var _loop_2 = function (x) { + var v = matrix.get(x, y); + if (v === lastBit) { + length_1++; + } + else { + scans = [scans[1], scans[2], scans[3], scans[4], length_1]; + length_1 = 1; + lastBit = v; + // Do the last 5 color changes ~ match the expected ratio for a finder pattern? 1:1:3:1:1 of b:w:b:w:b + var averageFinderPatternBlocksize = sum(scans) / 7; + var validFinderPattern = Math.abs(scans[0] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[1] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[2] - 3 * averageFinderPatternBlocksize) < 3 * averageFinderPatternBlocksize && + Math.abs(scans[3] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[4] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + !v; // And make sure the current pixel is white since finder patterns are bordered in white + // Do the last 3 color changes ~ match the expected ratio for an alignment pattern? 1:1:1 of w:b:w + var averageAlignmentPatternBlocksize = sum(scans.slice(-3)) / 3; + var validAlignmentPattern = Math.abs(scans[2] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[3] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[4] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + v; // Is the current pixel black since alignment patterns are bordered in black + if (validFinderPattern) { + // Compute the start and end x values of the large center black square + var endX_1 = x - scans[3] - scans[4]; + var startX_1 = endX_1 - scans[2]; + var line = { startX: startX_1, endX: endX_1, y: y }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + var matchingQuads = activeFinderPatternQuads.filter(function (q) { + return (startX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) || + (endX_1 >= q.bottom.startX && startX_1 <= q.bottom.endX) || + (startX_1 <= q.bottom.startX && endX_1 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO)); + }); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } + else { + activeFinderPatternQuads.push({ top: line, bottom: line }); + } + } + if (validAlignmentPattern) { + // Compute the start and end x values of the center black square + var endX_2 = x - scans[4]; + var startX_2 = endX_2 - scans[3]; + var line = { startX: startX_2, y: y, endX: endX_2 }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + var matchingQuads = activeAlignmentPatternQuads.filter(function (q) { + return (startX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) || + (endX_2 >= q.bottom.startX && startX_2 <= q.bottom.endX) || + (startX_2 <= q.bottom.startX && endX_2 >= q.bottom.endX && ((scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO)); + }); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } + else { + activeAlignmentPatternQuads.push({ top: line, bottom: line }); + } + } + } + }; + for (var x = -1; x <= matrix.width; x++) { + _loop_2(x); + } + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y !== y && q.bottom.y - q.top.y >= 2; })); + activeFinderPatternQuads = activeFinderPatternQuads.filter(function (q) { return q.bottom.y === y; }); + alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y !== y; })); + activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(function (q) { return q.bottom.y === y; }); + }; + for (var y = 0; y <= matrix.height; y++) { + _loop_1(y); + } + finderPatternQuads.push.apply(finderPatternQuads, activeFinderPatternQuads.filter(function (q) { return q.bottom.y - q.top.y >= 2; })); + alignmentPatternQuads.push.apply(alignmentPatternQuads, activeAlignmentPatternQuads); + var finderPatternGroups = finderPatternQuads + .filter(function (q) { return q.bottom.y - q.top.y >= 2; }) // All quads must be at least 2px tall since the center square is larger than a block + .map(function (q) { + var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + var y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.round(x), Math.round(y))) { + return; + } + var lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, q.bottom.y - q.top.y + 1]; + var size = sum(lengths) / lengths.length; + var score = scorePattern({ x: Math.round(x), y: Math.round(y) }, [1, 1, 3, 1, 1], matrix); + return { score: score, x: x, y: y, size: size }; + }) + .filter(function (q) { return !!q; }) // Filter out any rejected quads from above + .sort(function (a, b) { return a.score - b.score; }) + // Now take the top finder pattern options and try to find 2 other options with a similar size. + .map(function (point, i, finderPatterns) { + if (i > MAX_FINDERPATTERNS_TO_SEARCH) { + return null; + } + var otherPoints = finderPatterns + .filter(function (p, ii) { return i !== ii; }) + .map(function (p) { return ({ x: p.x, y: p.y, score: p.score + (Math.pow((p.size - point.size), 2)) / point.size, size: p.size }); }) + .sort(function (a, b) { return a.score - b.score; }); + if (otherPoints.length < 2) { + return null; + } + var score = point.score + otherPoints[0].score + otherPoints[1].score; + return { points: [point].concat(otherPoints.slice(0, 2)), score: score }; + }) + .filter(function (q) { return !!q; }) // Filter out any rejected finder patterns from above + .sort(function (a, b) { return a.score - b.score; }); + if (finderPatternGroups.length === 0) { + return null; + } + var _a = reorderFinderPatterns(finderPatternGroups[0].points[0], finderPatternGroups[0].points[1], finderPatternGroups[0].points[2]), topRight = _a.topRight, topLeft = _a.topLeft, bottomLeft = _a.bottomLeft; + var alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft); + var result = []; + if (alignment) { + result.push({ + alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y }, + bottomLeft: { x: bottomLeft.x, y: bottomLeft.y }, + dimension: alignment.dimension, + topLeft: { x: topLeft.x, y: topLeft.y }, + topRight: { x: topRight.x, y: topRight.y }, + }); + } + // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account + // for a skew in the image. However, In some cases, a slight skew might not be real and instead be caused by image compression + // errors and/or low resolution. For those cases, we'd be better off centering the point exactly in the middle of the black area. We + // compute and return the location data for the naively centered points as it is little additional work and allows for multiple + // attempts at decoding harder images. + var midTopRight = recenterLocation(matrix, topRight); + var midTopLeft = recenterLocation(matrix, topLeft); + var midBottomLeft = recenterLocation(matrix, bottomLeft); + var centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft); + if (centeredAlignment) { + result.push({ + alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y }, + bottomLeft: { x: midBottomLeft.x, y: midBottomLeft.y }, + topLeft: { x: midTopLeft.x, y: midTopLeft.y }, + topRight: { x: midTopRight.x, y: midTopRight.y }, + dimension: centeredAlignment.dimension, + }); + } + if (result.length === 0) { + return null; + } + return result; +} +exports.locate = locate; +function findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft) { + var _a; + // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code. + // We'll use these to help find the alignment pattern but also later when we do the extraction. + var dimension; + var moduleSize; + try { + (_a = computeDimension(topLeft, topRight, bottomLeft, matrix), dimension = _a.dimension, moduleSize = _a.moduleSize); + } + catch (e) { + return null; + } + // Now find the alignment pattern + var bottomRightFinderPattern = { + x: topRight.x - topLeft.x + bottomLeft.x, + y: topRight.y - topLeft.y + bottomLeft.y, + }; + var modulesBetweenFinderPatterns = ((distance(topLeft, bottomLeft) + distance(topLeft, topRight)) / 2 / moduleSize); + var correctionToTopLeft = 1 - (3 / modulesBetweenFinderPatterns); + var expectedAlignmentPattern = { + x: topLeft.x + correctionToTopLeft * (bottomRightFinderPattern.x - topLeft.x), + y: topLeft.y + correctionToTopLeft * (bottomRightFinderPattern.y - topLeft.y), + }; + var alignmentPatterns = alignmentPatternQuads + .map(function (q) { + var x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + var y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.floor(x), Math.floor(y))) { + return; + } + var sizeScore = scorePattern({ x: Math.floor(x), y: Math.floor(y) }, [1, 1, 1], matrix); + var score = sizeScore + distance({ x: x, y: y }, expectedAlignmentPattern); + return { x: x, y: y, score: score }; + }) + .filter(function (v) { return !!v; }) + .sort(function (a, b) { return a.score - b.score; }); + // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern + // so we can only use our best guess. + var alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern; + return { alignmentPattern: alignmentPattern, dimension: dimension }; +} + + +/***/ }) +/******/ ])["default"]; +}); \ No newline at end of file diff --git a/jsQR/package.json b/jsQR/package.json new file mode 100644 index 0000000000000000000000000000000000000000..1724343d84f6354bbf9e6ccbea82402a79c13d80 --- /dev/null +++ b/jsQR/package.json @@ -0,0 +1,61 @@ +{ + "name": "jsqr", + "version": "1.4.0", + "description": "A pure javascript QR code reading library that takes in raw images and will locate, extract and parse any QR code found within.", + "repository": "https://github.com/cozmo/jsQR", + "main": "./dist/jsQR.js", + "types": "./dist/index.d.ts", + "contributors": [ + { + "name": "Cosmo Wolfe", + "email": "cosmo.wolfe@gmail.com" + }, + { + "name": "Jefff Nelson", + "email": "gmjefff@gmail.com" + } + ], + "license": "Apache-2.0", + "devDependencies": { + "@types/fs-extra": "^4.0.2", + "@types/jest": "^20.0.8", + "@types/node": "^8.0.27", + "awesome-typescript-loader": "^3.2.3", + "fs-extra": "^4.0.1", + "jest": "^23.1.0", + "rimraf": "^2.6.2", + "ts-jest": "^23.0.4", + "ts-node": "^3.3.0", + "tslint": "^5.7.0", + "typescript": "^2.5.2", + "upng-js": "^1.0.1", + "webpack": "^3.10.0" + }, + "scripts": { + "prebuild": "rimraf dist", + "build": "webpack", + "watch": "webpack --watch", + "test": "jest", + "lint": "tslint --project .", + "generate-test-data": "ts-node --project tests/ tests/generate-test-data.ts" + }, + "jest": { + "testRegex": ".*test.ts", + "moduleFileExtensions": [ + "ts", + "js" + ], + "transform": { + "^.+\\.ts$": "<rootDir>/node_modules/ts-jest/preprocessor.js" + }, + "globals": { + "ts-jest": { + "tsConfig": { + "noImplicitAny": false, + "lib": ["es2015"], + "types": ["jest", "node"] + } + } + } + } +} diff --git a/jsQR/src/BitMatrix.ts b/jsQR/src/BitMatrix.ts new file mode 100644 index 0000000000000000000000000000000000000000..2d3b86d18db4448a0fa968e2970592dec68718dc --- /dev/null +++ b/jsQR/src/BitMatrix.ts @@ -0,0 +1,34 @@ +export class BitMatrix { + public static createEmpty(width: number, height: number) { + return new BitMatrix(new Uint8ClampedArray(width * height), width); + } + + public width: number; + public height: number; + private data: Uint8ClampedArray; + + constructor(data: Uint8ClampedArray, width: number) { + this.width = width; + this.height = data.length / width; + this.data = data; + } + + public get(x: number, y: number): boolean { + if (x < 0 || x >= this.width || y < 0 || y >= this.height) { + return false; + } + return !!this.data[y * this.width + x]; + } + + public set(x: number, y: number, v: boolean) { + this.data[y * this.width + x] = v ? 1 : 0; + } + + public setRegion(left: number, top: number, width: number, height: number, v: boolean) { + for (let y = top; y < top + height; y++) { + for (let x = left; x < left + width; x++) { + this.set(x, y, !!v); + } + } + } +} diff --git a/jsQR/src/Point.ts b/jsQR/src/Point.ts new file mode 100644 index 0000000000000000000000000000000000000000..79d639a89f7a422234bc3a56c6c039df0e8ea681 --- /dev/null +++ b/jsQR/src/Point.ts @@ -0,0 +1,4 @@ +export interface Point { + x: number; + y: number; +} diff --git a/jsQR/src/binarizer/index.ts b/jsQR/src/binarizer/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..9f2306533629602eca96668dea3b20074d8de515 --- /dev/null +++ b/jsQR/src/binarizer/index.ts @@ -0,0 +1,123 @@ +import {BitMatrix} from "../BitMatrix"; + +const REGION_SIZE = 8; +const MIN_DYNAMIC_RANGE = 24; + +function numBetween(value: number, min: number, max: number): number { + return value < min ? min : value > max ? max : value; +} + +// Like BitMatrix but accepts arbitry Uint8 values +class Matrix { + private data: Uint8ClampedArray; + private width: number; + constructor(width: number, height: number) { + this.width = width; + this.data = new Uint8ClampedArray(width * height); + } + public get(x: number, y: number) { + return this.data[y * this.width + x]; + } + public set(x: number, y: number, value: number) { + this.data[y * this.width + x] = value; + } +} + +export function binarize(data: Uint8ClampedArray, width: number, height: number, returnInverted: boolean) { + if (data.length !== width * height * 4) { + throw new Error("Malformed data passed to binarizer."); + } + // Convert image to greyscale + const greyscalePixels = new Matrix(width, height); + for (let x = 0; x < width; x++) { + for (let y = 0; y < height; y++) { + const r = data[((y * width + x) * 4) + 0]; + const g = data[((y * width + x) * 4) + 1]; + const b = data[((y * width + x) * 4) + 2]; + greyscalePixels.set(x, y, 0.2126 * r + 0.7152 * g + 0.0722 * b); + } + } + const horizontalRegionCount = Math.ceil(width / REGION_SIZE); + const verticalRegionCount = Math.ceil(height / REGION_SIZE); + + const blackPoints = new Matrix(horizontalRegionCount, verticalRegionCount); + for (let verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (let hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + let sum = 0; + let min = Infinity; + let max = 0; + for (let y = 0; y < REGION_SIZE; y++) { + for (let x = 0; x < REGION_SIZE; x++) { + const pixelLumosity = + greyscalePixels.get(hortizontalRegion * REGION_SIZE + x, verticalRegion * REGION_SIZE + y); + sum += pixelLumosity; + min = Math.min(min, pixelLumosity); + max = Math.max(max, pixelLumosity); + } + } + + let average = sum / (REGION_SIZE ** 2); + if (max - min <= MIN_DYNAMIC_RANGE) { + // If variation within the block is low, assume this is a block with only light or only + // dark pixels. In that case we do not want to use the average, as it would divide this + // low contrast area into black and white pixels, essentially creating data out of noise. + // + // Default the blackpoint for these blocks to be half the min - effectively white them out + average = min / 2; + + if (verticalRegion > 0 && hortizontalRegion > 0) { + // Correct the "white background" assumption for blocks that have neighbors by comparing + // the pixels in this block to the previously calculated black points. This is based on + // the fact that dark barcode symbology is always surrounded by some amount of light + // background for which reasonable black point estimates were made. The bp estimated at + // the boundaries is used for the interior. + + // The (min < bp) is arbitrary but works better than other heuristics that were tried. + const averageNeighborBlackPoint = ( + blackPoints.get(hortizontalRegion, verticalRegion - 1) + + (2 * blackPoints.get(hortizontalRegion - 1, verticalRegion)) + + blackPoints.get(hortizontalRegion - 1, verticalRegion - 1) + ) / 4; + if (min < averageNeighborBlackPoint) { + average = averageNeighborBlackPoint; + } + } + } + blackPoints.set(hortizontalRegion, verticalRegion, average); + } + } + + const binarized = BitMatrix.createEmpty(width, height); + let inverted: BitMatrix = null; + if (returnInverted) { + inverted = BitMatrix.createEmpty(width, height); + } + for (let verticalRegion = 0; verticalRegion < verticalRegionCount; verticalRegion++) { + for (let hortizontalRegion = 0; hortizontalRegion < horizontalRegionCount; hortizontalRegion++) { + const left = numBetween(hortizontalRegion, 2, horizontalRegionCount - 3); + const top = numBetween(verticalRegion, 2, verticalRegionCount - 3); + let sum = 0; + for (let xRegion = -2; xRegion <= 2; xRegion++) { + for (let yRegion = -2; yRegion <= 2; yRegion++) { + sum += blackPoints.get(left + xRegion, top + yRegion); + } + } + const threshold = sum / 25; + for (let xRegion = 0; xRegion < REGION_SIZE; xRegion++) { + for (let yRegion = 0; yRegion < REGION_SIZE; yRegion++) { + const x = hortizontalRegion * REGION_SIZE + xRegion; + const y = verticalRegion * REGION_SIZE + yRegion; + const lum = greyscalePixels.get(x, y); + binarized.set(x, y, lum <= threshold); + if (returnInverted) { + inverted.set(x, y, !(lum <= threshold)); + } + } + } + } + } + if (returnInverted) { + return { binarized, inverted }; + } + return { binarized }; +} diff --git a/jsQR/src/decoder/decodeData/BitStream.ts b/jsQR/src/decoder/decodeData/BitStream.ts new file mode 100644 index 0000000000000000000000000000000000000000..dd10a1be1e711ccf48310afc7fe7e5d3b75db2a3 --- /dev/null +++ b/jsQR/src/decoder/decodeData/BitStream.ts @@ -0,0 +1,55 @@ +// tslint:disable:no-bitwise + +export class BitStream { + private bytes: Uint8ClampedArray; + private byteOffset: number = 0; + private bitOffset: number = 0; + + constructor(bytes: Uint8ClampedArray) { + this.bytes = bytes; + } + + public readBits(numBits: number): number { + if (numBits < 1 || numBits > 32 || numBits > this.available()) { + throw new Error("Cannot read " + numBits.toString() + " bits"); + } + + let result = 0; + // First, read remainder from current byte + if (this.bitOffset > 0) { + const bitsLeft = 8 - this.bitOffset; + const toRead = numBits < bitsLeft ? numBits : bitsLeft; + const bitsToNotRead = bitsLeft - toRead; + const mask = (0xFF >> (8 - toRead)) << bitsToNotRead; + result = (this.bytes[this.byteOffset] & mask) >> bitsToNotRead; + numBits -= toRead; + this.bitOffset += toRead; + if (this.bitOffset === 8) { + this.bitOffset = 0; + this.byteOffset++; + } + } + + // Next read whole bytes + if (numBits > 0) { + while (numBits >= 8) { + result = (result << 8) | (this.bytes[this.byteOffset] & 0xFF); + this.byteOffset++; + numBits -= 8; + } + + // Finally read a partial byte + if (numBits > 0) { + const bitsToNotRead = 8 - numBits; + const mask = (0xFF >> bitsToNotRead) << bitsToNotRead; + result = (result << numBits) | ((this.bytes[this.byteOffset] & mask) >> bitsToNotRead); + this.bitOffset += numBits; + } + } + return result; + } + + public available(): number { + return 8 * (this.bytes.length - this.byteOffset) - this.bitOffset; + } +} diff --git a/jsQR/src/decoder/decodeData/index.ts b/jsQR/src/decoder/decodeData/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..785057352b8826315808589b0213a566ecb97267 --- /dev/null +++ b/jsQR/src/decoder/decodeData/index.ts @@ -0,0 +1,253 @@ +// tslint:disable:no-bitwise +import { BitStream } from "./BitStream"; +import { shiftJISTable } from "./shiftJISTable"; + +export interface Chunk { + type: Mode; + text: string; +} + +export interface ByteChunk { + type: Mode.Byte | Mode.Kanji; + bytes: number[]; +} + +export interface ECIChunk { + type: Mode.ECI; + assignmentNumber: number; +} + +export type Chunks = Array<Chunk | ByteChunk | ECIChunk>; + +export interface DecodedQR { + text: string; + bytes: number[]; + chunks: Chunks; + version: number; +} + +export enum Mode { + Numeric = "numeric", + Alphanumeric = "alphanumeric", + Byte = "byte", + Kanji = "kanji", + ECI = "eci", +} + +enum ModeByte { + Terminator = 0x0, + Numeric = 0x1, + Alphanumeric = 0x2, + Byte = 0x4, + Kanji = 0x8, + ECI = 0x7, + // StructuredAppend = 0x3, + // FNC1FirstPosition = 0x5, + // FNC1SecondPosition = 0x9, +} + +function decodeNumeric(stream: BitStream, size: number) { + const bytes: number[] = []; + let text = ""; + + const characterCountSize = [10, 12, 14][size]; + let length = stream.readBits(characterCountSize); + // Read digits in groups of 3 + while (length >= 3) { + const num = stream.readBits(10); + if (num >= 1000) { + throw new Error("Invalid numeric value above 999"); + } + + const a = Math.floor(num / 100); + const b = Math.floor(num / 10) % 10; + const c = num % 10; + + bytes.push(48 + a, 48 + b, 48 + c); + text += a.toString() + b.toString() + c.toString(); + length -= 3; + } + + // If the number of digits aren't a multiple of 3, the remaining digits are special cased. + if (length === 2) { + const num = stream.readBits(7); + if (num >= 100) { + throw new Error("Invalid numeric value above 99"); + } + + const a = Math.floor(num / 10); + const b = num % 10; + + bytes.push(48 + a, 48 + b); + text += a.toString() + b.toString(); + } else if (length === 1) { + const num = stream.readBits(4); + if (num >= 10) { + throw new Error("Invalid numeric value above 9"); + } + + bytes.push(48 + num); + text += num.toString(); + } + + return { bytes, text }; +} + +const AlphanumericCharacterCodes = [ + "0", "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", + " ", "$", "%", "*", "+", "-", ".", "/", ":", +]; + +function decodeAlphanumeric(stream: BitStream, size: number) { + const bytes: number[] = []; + let text = ""; + + const characterCountSize = [9, 11, 13][size]; + let length = stream.readBits(characterCountSize); + while (length >= 2) { + const v = stream.readBits(11); + + const a = Math.floor(v / 45); + const b = v % 45; + + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0), AlphanumericCharacterCodes[b].charCodeAt(0)); + text += AlphanumericCharacterCodes[a] + AlphanumericCharacterCodes[b]; + length -= 2; + } + + if (length === 1) { + const a = stream.readBits(6); + bytes.push(AlphanumericCharacterCodes[a].charCodeAt(0)); + text += AlphanumericCharacterCodes[a]; + } + + return { bytes, text }; +} + +function decodeByte(stream: BitStream, size: number) { + const bytes: number[] = []; + let text = ""; + + const characterCountSize = [8, 16, 16][size]; + const length = stream.readBits(characterCountSize); + for (let i = 0; i < length; i++) { + const b = stream.readBits(8); + bytes.push(b); + } + try { + text += decodeURIComponent(bytes.map(b => `%${("0" + b.toString(16)).substr(-2)}`).join("")); + } catch { + // failed to decode + } + + return { bytes, text }; +} + +function decodeKanji(stream: BitStream, size: number) { + const bytes: number[] = []; + let text = ""; + + const characterCountSize = [8, 10, 12][size]; + const length = stream.readBits(characterCountSize); + for (let i = 0; i < length; i++) { + const k = stream.readBits(13); + + let c = (Math.floor(k / 0xC0) << 8) | (k % 0xC0); + if (c < 0x1F00) { + c += 0x8140; + } else { + c += 0xC140; + } + + bytes.push(c >> 8, c & 0xFF); + text += String.fromCharCode(shiftJISTable[c]); + } + + return { bytes, text }; +} + +export function decode(data: Uint8ClampedArray, version: number): DecodedQR { + const stream = new BitStream(data); + + // There are 3 'sizes' based on the version. 1-9 is small (0), 10-26 is medium (1) and 27-40 is large (2). + const size = version <= 9 ? 0 : version <= 26 ? 1 : 2; + + const result: DecodedQR = { + text: "", + bytes: [], + chunks: [], + version, + }; + + while (stream.available() >= 4) { + const mode = stream.readBits(4); + if (mode === ModeByte.Terminator) { + return result; + } else if (mode === ModeByte.ECI) { + if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(7), + }); + } else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(14), + }); + } else if (stream.readBits(1) === 0) { + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: stream.readBits(21), + }); + } else { + // ECI data seems corrupted + result.chunks.push({ + type: Mode.ECI, + assignmentNumber: -1, + }); + } + } else if (mode === ModeByte.Numeric) { + const numericResult = decodeNumeric(stream, size); + result.text += numericResult.text; + result.bytes.push(...numericResult.bytes); + result.chunks.push({ + type: Mode.Numeric, + text: numericResult.text, + }); + } else if (mode === ModeByte.Alphanumeric) { + const alphanumericResult = decodeAlphanumeric(stream, size); + result.text += alphanumericResult.text; + result.bytes.push(...alphanumericResult.bytes); + result.chunks.push({ + type: Mode.Alphanumeric, + text: alphanumericResult.text, + }); + } else if (mode === ModeByte.Byte) { + const byteResult = decodeByte(stream, size); + result.text += byteResult.text; + result.bytes.push(...byteResult.bytes); + result.chunks.push({ + type: Mode.Byte, + bytes: byteResult.bytes, + text: byteResult.text, + }); + } else if (mode === ModeByte.Kanji) { + const kanjiResult = decodeKanji(stream, size); + result.text += kanjiResult.text; + result.bytes.push(...kanjiResult.bytes); + result.chunks.push({ + type: Mode.Kanji, + bytes: kanjiResult.bytes, + text: kanjiResult.text, + }); + } + } + + // If there is no data left, or the remaining bits are all 0, then that counts as a termination marker + if (stream.available() === 0 || stream.readBits(stream.available()) === 0) { + return result; + } +} diff --git a/jsQR/src/decoder/decodeData/shiftJISTable.ts b/jsQR/src/decoder/decodeData/shiftJISTable.ts new file mode 100644 index 0000000000000000000000000000000000000000..496e1993799e45adcc72c0500ee6cf628ecb34fb --- /dev/null +++ b/jsQR/src/decoder/decodeData/shiftJISTable.ts @@ -0,0 +1,7039 @@ +export const shiftJISTable: {[key: number]: number} = { + 0x20: 0x0020, + 0x21: 0x0021, + 0x22: 0x0022, + 0x23: 0x0023, + 0x24: 0x0024, + 0x25: 0x0025, + 0x26: 0x0026, + 0x27: 0x0027, + 0x28: 0x0028, + 0x29: 0x0029, + 0x2A: 0x002A, + 0x2B: 0x002B, + 0x2C: 0x002C, + 0x2D: 0x002D, + 0x2E: 0x002E, + 0x2F: 0x002F, + 0x30: 0x0030, + 0x31: 0x0031, + 0x32: 0x0032, + 0x33: 0x0033, + 0x34: 0x0034, + 0x35: 0x0035, + 0x36: 0x0036, + 0x37: 0x0037, + 0x38: 0x0038, + 0x39: 0x0039, + 0x3A: 0x003A, + 0x3B: 0x003B, + 0x3C: 0x003C, + 0x3D: 0x003D, + 0x3E: 0x003E, + 0x3F: 0x003F, + 0x40: 0x0040, + 0x41: 0x0041, + 0x42: 0x0042, + 0x43: 0x0043, + 0x44: 0x0044, + 0x45: 0x0045, + 0x46: 0x0046, + 0x47: 0x0047, + 0x48: 0x0048, + 0x49: 0x0049, + 0x4A: 0x004A, + 0x4B: 0x004B, + 0x4C: 0x004C, + 0x4D: 0x004D, + 0x4E: 0x004E, + 0x4F: 0x004F, + 0x50: 0x0050, + 0x51: 0x0051, + 0x52: 0x0052, + 0x53: 0x0053, + 0x54: 0x0054, + 0x55: 0x0055, + 0x56: 0x0056, + 0x57: 0x0057, + 0x58: 0x0058, + 0x59: 0x0059, + 0x5A: 0x005A, + 0x5B: 0x005B, + 0x5C: 0x00A5, + 0x5D: 0x005D, + 0x5E: 0x005E, + 0x5F: 0x005F, + 0x60: 0x0060, + 0x61: 0x0061, + 0x62: 0x0062, + 0x63: 0x0063, + 0x64: 0x0064, + 0x65: 0x0065, + 0x66: 0x0066, + 0x67: 0x0067, + 0x68: 0x0068, + 0x69: 0x0069, + 0x6A: 0x006A, + 0x6B: 0x006B, + 0x6C: 0x006C, + 0x6D: 0x006D, + 0x6E: 0x006E, + 0x6F: 0x006F, + 0x70: 0x0070, + 0x71: 0x0071, + 0x72: 0x0072, + 0x73: 0x0073, + 0x74: 0x0074, + 0x75: 0x0075, + 0x76: 0x0076, + 0x77: 0x0077, + 0x78: 0x0078, + 0x79: 0x0079, + 0x7A: 0x007A, + 0x7B: 0x007B, + 0x7C: 0x007C, + 0x7D: 0x007D, + 0x7E: 0x203E, + 0x8140: 0x3000, + 0x8141: 0x3001, + 0x8142: 0x3002, + 0x8143: 0xFF0C, + 0x8144: 0xFF0E, + 0x8145: 0x30FB, + 0x8146: 0xFF1A, + 0x8147: 0xFF1B, + 0x8148: 0xFF1F, + 0x8149: 0xFF01, + 0x814A: 0x309B, + 0x814B: 0x309C, + 0x814C: 0x00B4, + 0x814D: 0xFF40, + 0x814E: 0x00A8, + 0x814F: 0xFF3E, + 0x8150: 0xFFE3, + 0x8151: 0xFF3F, + 0x8152: 0x30FD, + 0x8153: 0x30FE, + 0x8154: 0x309D, + 0x8155: 0x309E, + 0x8156: 0x3003, + 0x8157: 0x4EDD, + 0x8158: 0x3005, + 0x8159: 0x3006, + 0x815A: 0x3007, + 0x815B: 0x30FC, + 0x815C: 0x2015, + 0x815D: 0x2010, + 0x815E: 0xFF0F, + 0x815F: 0x005C, + 0x8160: 0x301C, + 0x8161: 0x2016, + 0x8162: 0xFF5C, + 0x8163: 0x2026, + 0x8164: 0x2025, + 0x8165: 0x2018, + 0x8166: 0x2019, + 0x8167: 0x201C, + 0x8168: 0x201D, + 0x8169: 0xFF08, + 0x816A: 0xFF09, + 0x816B: 0x3014, + 0x816C: 0x3015, + 0x816D: 0xFF3B, + 0x816E: 0xFF3D, + 0x816F: 0xFF5B, + 0x8170: 0xFF5D, + 0x8171: 0x3008, + 0x8172: 0x3009, + 0x8173: 0x300A, + 0x8174: 0x300B, + 0x8175: 0x300C, + 0x8176: 0x300D, + 0x8177: 0x300E, + 0x8178: 0x300F, + 0x8179: 0x3010, + 0x817A: 0x3011, + 0x817B: 0xFF0B, + 0x817C: 0x2212, + 0x817D: 0x00B1, + 0x817E: 0x00D7, + 0x8180: 0x00F7, + 0x8181: 0xFF1D, + 0x8182: 0x2260, + 0x8183: 0xFF1C, + 0x8184: 0xFF1E, + 0x8185: 0x2266, + 0x8186: 0x2267, + 0x8187: 0x221E, + 0x8188: 0x2234, + 0x8189: 0x2642, + 0x818A: 0x2640, + 0x818B: 0x00B0, + 0x818C: 0x2032, + 0x818D: 0x2033, + 0x818E: 0x2103, + 0x818F: 0xFFE5, + 0x8190: 0xFF04, + 0x8191: 0x00A2, + 0x8192: 0x00A3, + 0x8193: 0xFF05, + 0x8194: 0xFF03, + 0x8195: 0xFF06, + 0x8196: 0xFF0A, + 0x8197: 0xFF20, + 0x8198: 0x00A7, + 0x8199: 0x2606, + 0x819A: 0x2605, + 0x819B: 0x25CB, + 0x819C: 0x25CF, + 0x819D: 0x25CE, + 0x819E: 0x25C7, + 0x819F: 0x25C6, + 0x81A0: 0x25A1, + 0x81A1: 0x25A0, + 0x81A2: 0x25B3, + 0x81A3: 0x25B2, + 0x81A4: 0x25BD, + 0x81A5: 0x25BC, + 0x81A6: 0x203B, + 0x81A7: 0x3012, + 0x81A8: 0x2192, + 0x81A9: 0x2190, + 0x81AA: 0x2191, + 0x81AB: 0x2193, + 0x81AC: 0x3013, + 0x81B8: 0x2208, + 0x81B9: 0x220B, + 0x81BA: 0x2286, + 0x81BB: 0x2287, + 0x81BC: 0x2282, + 0x81BD: 0x2283, + 0x81BE: 0x222A, + 0x81BF: 0x2229, + 0x81C8: 0x2227, + 0x81C9: 0x2228, + 0x81CA: 0x00AC, + 0x81CB: 0x21D2, + 0x81CC: 0x21D4, + 0x81CD: 0x2200, + 0x81CE: 0x2203, + 0x81DA: 0x2220, + 0x81DB: 0x22A5, + 0x81DC: 0x2312, + 0x81DD: 0x2202, + 0x81DE: 0x2207, + 0x81DF: 0x2261, + 0x81E0: 0x2252, + 0x81E1: 0x226A, + 0x81E2: 0x226B, + 0x81E3: 0x221A, + 0x81E4: 0x223D, + 0x81E5: 0x221D, + 0x81E6: 0x2235, + 0x81E7: 0x222B, + 0x81E8: 0x222C, + 0x81F0: 0x212B, + 0x81F1: 0x2030, + 0x81F2: 0x266F, + 0x81F3: 0x266D, + 0x81F4: 0x266A, + 0x81F5: 0x2020, + 0x81F6: 0x2021, + 0x81F7: 0x00B6, + 0x81FC: 0x25EF, + 0x824F: 0xFF10, + 0x8250: 0xFF11, + 0x8251: 0xFF12, + 0x8252: 0xFF13, + 0x8253: 0xFF14, + 0x8254: 0xFF15, + 0x8255: 0xFF16, + 0x8256: 0xFF17, + 0x8257: 0xFF18, + 0x8258: 0xFF19, + 0x8260: 0xFF21, + 0x8261: 0xFF22, + 0x8262: 0xFF23, + 0x8263: 0xFF24, + 0x8264: 0xFF25, + 0x8265: 0xFF26, + 0x8266: 0xFF27, + 0x8267: 0xFF28, + 0x8268: 0xFF29, + 0x8269: 0xFF2A, + 0x826A: 0xFF2B, + 0x826B: 0xFF2C, + 0x826C: 0xFF2D, + 0x826D: 0xFF2E, + 0x826E: 0xFF2F, + 0x826F: 0xFF30, + 0x8270: 0xFF31, + 0x8271: 0xFF32, + 0x8272: 0xFF33, + 0x8273: 0xFF34, + 0x8274: 0xFF35, + 0x8275: 0xFF36, + 0x8276: 0xFF37, + 0x8277: 0xFF38, + 0x8278: 0xFF39, + 0x8279: 0xFF3A, + 0x8281: 0xFF41, + 0x8282: 0xFF42, + 0x8283: 0xFF43, + 0x8284: 0xFF44, + 0x8285: 0xFF45, + 0x8286: 0xFF46, + 0x8287: 0xFF47, + 0x8288: 0xFF48, + 0x8289: 0xFF49, + 0x828A: 0xFF4A, + 0x828B: 0xFF4B, + 0x828C: 0xFF4C, + 0x828D: 0xFF4D, + 0x828E: 0xFF4E, + 0x828F: 0xFF4F, + 0x8290: 0xFF50, + 0x8291: 0xFF51, + 0x8292: 0xFF52, + 0x8293: 0xFF53, + 0x8294: 0xFF54, + 0x8295: 0xFF55, + 0x8296: 0xFF56, + 0x8297: 0xFF57, + 0x8298: 0xFF58, + 0x8299: 0xFF59, + 0x829A: 0xFF5A, + 0x829F: 0x3041, + 0x82A0: 0x3042, + 0x82A1: 0x3043, + 0x82A2: 0x3044, + 0x82A3: 0x3045, + 0x82A4: 0x3046, + 0x82A5: 0x3047, + 0x82A6: 0x3048, + 0x82A7: 0x3049, + 0x82A8: 0x304A, + 0x82A9: 0x304B, + 0x82AA: 0x304C, + 0x82AB: 0x304D, + 0x82AC: 0x304E, + 0x82AD: 0x304F, + 0x82AE: 0x3050, + 0x82AF: 0x3051, + 0x82B0: 0x3052, + 0x82B1: 0x3053, + 0x82B2: 0x3054, + 0x82B3: 0x3055, + 0x82B4: 0x3056, + 0x82B5: 0x3057, + 0x82B6: 0x3058, + 0x82B7: 0x3059, + 0x82B8: 0x305A, + 0x82B9: 0x305B, + 0x82BA: 0x305C, + 0x82BB: 0x305D, + 0x82BC: 0x305E, + 0x82BD: 0x305F, + 0x82BE: 0x3060, + 0x82BF: 0x3061, + 0x82C0: 0x3062, + 0x82C1: 0x3063, + 0x82C2: 0x3064, + 0x82C3: 0x3065, + 0x82C4: 0x3066, + 0x82C5: 0x3067, + 0x82C6: 0x3068, + 0x82C7: 0x3069, + 0x82C8: 0x306A, + 0x82C9: 0x306B, + 0x82CA: 0x306C, + 0x82CB: 0x306D, + 0x82CC: 0x306E, + 0x82CD: 0x306F, + 0x82CE: 0x3070, + 0x82CF: 0x3071, + 0x82D0: 0x3072, + 0x82D1: 0x3073, + 0x82D2: 0x3074, + 0x82D3: 0x3075, + 0x82D4: 0x3076, + 0x82D5: 0x3077, + 0x82D6: 0x3078, + 0x82D7: 0x3079, + 0x82D8: 0x307A, + 0x82D9: 0x307B, + 0x82DA: 0x307C, + 0x82DB: 0x307D, + 0x82DC: 0x307E, + 0x82DD: 0x307F, + 0x82DE: 0x3080, + 0x82DF: 0x3081, + 0x82E0: 0x3082, + 0x82E1: 0x3083, + 0x82E2: 0x3084, + 0x82E3: 0x3085, + 0x82E4: 0x3086, + 0x82E5: 0x3087, + 0x82E6: 0x3088, + 0x82E7: 0x3089, + 0x82E8: 0x308A, + 0x82E9: 0x308B, + 0x82EA: 0x308C, + 0x82EB: 0x308D, + 0x82EC: 0x308E, + 0x82ED: 0x308F, + 0x82EE: 0x3090, + 0x82EF: 0x3091, + 0x82F0: 0x3092, + 0x82F1: 0x3093, + 0x8340: 0x30A1, + 0x8341: 0x30A2, + 0x8342: 0x30A3, + 0x8343: 0x30A4, + 0x8344: 0x30A5, + 0x8345: 0x30A6, + 0x8346: 0x30A7, + 0x8347: 0x30A8, + 0x8348: 0x30A9, + 0x8349: 0x30AA, + 0x834A: 0x30AB, + 0x834B: 0x30AC, + 0x834C: 0x30AD, + 0x834D: 0x30AE, + 0x834E: 0x30AF, + 0x834F: 0x30B0, + 0x8350: 0x30B1, + 0x8351: 0x30B2, + 0x8352: 0x30B3, + 0x8353: 0x30B4, + 0x8354: 0x30B5, + 0x8355: 0x30B6, + 0x8356: 0x30B7, + 0x8357: 0x30B8, + 0x8358: 0x30B9, + 0x8359: 0x30BA, + 0x835A: 0x30BB, + 0x835B: 0x30BC, + 0x835C: 0x30BD, + 0x835D: 0x30BE, + 0x835E: 0x30BF, + 0x835F: 0x30C0, + 0x8360: 0x30C1, + 0x8361: 0x30C2, + 0x8362: 0x30C3, + 0x8363: 0x30C4, + 0x8364: 0x30C5, + 0x8365: 0x30C6, + 0x8366: 0x30C7, + 0x8367: 0x30C8, + 0x8368: 0x30C9, + 0x8369: 0x30CA, + 0x836A: 0x30CB, + 0x836B: 0x30CC, + 0x836C: 0x30CD, + 0x836D: 0x30CE, + 0x836E: 0x30CF, + 0x836F: 0x30D0, + 0x8370: 0x30D1, + 0x8371: 0x30D2, + 0x8372: 0x30D3, + 0x8373: 0x30D4, + 0x8374: 0x30D5, + 0x8375: 0x30D6, + 0x8376: 0x30D7, + 0x8377: 0x30D8, + 0x8378: 0x30D9, + 0x8379: 0x30DA, + 0x837A: 0x30DB, + 0x837B: 0x30DC, + 0x837C: 0x30DD, + 0x837D: 0x30DE, + 0x837E: 0x30DF, + 0x8380: 0x30E0, + 0x8381: 0x30E1, + 0x8382: 0x30E2, + 0x8383: 0x30E3, + 0x8384: 0x30E4, + 0x8385: 0x30E5, + 0x8386: 0x30E6, + 0x8387: 0x30E7, + 0x8388: 0x30E8, + 0x8389: 0x30E9, + 0x838A: 0x30EA, + 0x838B: 0x30EB, + 0x838C: 0x30EC, + 0x838D: 0x30ED, + 0x838E: 0x30EE, + 0x838F: 0x30EF, + 0x8390: 0x30F0, + 0x8391: 0x30F1, + 0x8392: 0x30F2, + 0x8393: 0x30F3, + 0x8394: 0x30F4, + 0x8395: 0x30F5, + 0x8396: 0x30F6, + 0x839F: 0x0391, + 0x83A0: 0x0392, + 0x83A1: 0x0393, + 0x83A2: 0x0394, + 0x83A3: 0x0395, + 0x83A4: 0x0396, + 0x83A5: 0x0397, + 0x83A6: 0x0398, + 0x83A7: 0x0399, + 0x83A8: 0x039A, + 0x83A9: 0x039B, + 0x83AA: 0x039C, + 0x83AB: 0x039D, + 0x83AC: 0x039E, + 0x83AD: 0x039F, + 0x83AE: 0x03A0, + 0x83AF: 0x03A1, + 0x83B0: 0x03A3, + 0x83B1: 0x03A4, + 0x83B2: 0x03A5, + 0x83B3: 0x03A6, + 0x83B4: 0x03A7, + 0x83B5: 0x03A8, + 0x83B6: 0x03A9, + 0x83BF: 0x03B1, + 0x83C0: 0x03B2, + 0x83C1: 0x03B3, + 0x83C2: 0x03B4, + 0x83C3: 0x03B5, + 0x83C4: 0x03B6, + 0x83C5: 0x03B7, + 0x83C6: 0x03B8, + 0x83C7: 0x03B9, + 0x83C8: 0x03BA, + 0x83C9: 0x03BB, + 0x83CA: 0x03BC, + 0x83CB: 0x03BD, + 0x83CC: 0x03BE, + 0x83CD: 0x03BF, + 0x83CE: 0x03C0, + 0x83CF: 0x03C1, + 0x83D0: 0x03C3, + 0x83D1: 0x03C4, + 0x83D2: 0x03C5, + 0x83D3: 0x03C6, + 0x83D4: 0x03C7, + 0x83D5: 0x03C8, + 0x83D6: 0x03C9, + 0x8440: 0x0410, + 0x8441: 0x0411, + 0x8442: 0x0412, + 0x8443: 0x0413, + 0x8444: 0x0414, + 0x8445: 0x0415, + 0x8446: 0x0401, + 0x8447: 0x0416, + 0x8448: 0x0417, + 0x8449: 0x0418, + 0x844A: 0x0419, + 0x844B: 0x041A, + 0x844C: 0x041B, + 0x844D: 0x041C, + 0x844E: 0x041D, + 0x844F: 0x041E, + 0x8450: 0x041F, + 0x8451: 0x0420, + 0x8452: 0x0421, + 0x8453: 0x0422, + 0x8454: 0x0423, + 0x8455: 0x0424, + 0x8456: 0x0425, + 0x8457: 0x0426, + 0x8458: 0x0427, + 0x8459: 0x0428, + 0x845A: 0x0429, + 0x845B: 0x042A, + 0x845C: 0x042B, + 0x845D: 0x042C, + 0x845E: 0x042D, + 0x845F: 0x042E, + 0x8460: 0x042F, + 0x8470: 0x0430, + 0x8471: 0x0431, + 0x8472: 0x0432, + 0x8473: 0x0433, + 0x8474: 0x0434, + 0x8475: 0x0435, + 0x8476: 0x0451, + 0x8477: 0x0436, + 0x8478: 0x0437, + 0x8479: 0x0438, + 0x847A: 0x0439, + 0x847B: 0x043A, + 0x847C: 0x043B, + 0x847D: 0x043C, + 0x847E: 0x043D, + 0x8480: 0x043E, + 0x8481: 0x043F, + 0x8482: 0x0440, + 0x8483: 0x0441, + 0x8484: 0x0442, + 0x8485: 0x0443, + 0x8486: 0x0444, + 0x8487: 0x0445, + 0x8488: 0x0446, + 0x8489: 0x0447, + 0x848A: 0x0448, + 0x848B: 0x0449, + 0x848C: 0x044A, + 0x848D: 0x044B, + 0x848E: 0x044C, + 0x848F: 0x044D, + 0x8490: 0x044E, + 0x8491: 0x044F, + 0x849F: 0x2500, + 0x84A0: 0x2502, + 0x84A1: 0x250C, + 0x84A2: 0x2510, + 0x84A3: 0x2518, + 0x84A4: 0x2514, + 0x84A5: 0x251C, + 0x84A6: 0x252C, + 0x84A7: 0x2524, + 0x84A8: 0x2534, + 0x84A9: 0x253C, + 0x84AA: 0x2501, + 0x84AB: 0x2503, + 0x84AC: 0x250F, + 0x84AD: 0x2513, + 0x84AE: 0x251B, + 0x84AF: 0x2517, + 0x84B0: 0x2523, + 0x84B1: 0x2533, + 0x84B2: 0x252B, + 0x84B3: 0x253B, + 0x84B4: 0x254B, + 0x84B5: 0x2520, + 0x84B6: 0x252F, + 0x84B7: 0x2528, + 0x84B8: 0x2537, + 0x84B9: 0x253F, + 0x84BA: 0x251D, + 0x84BB: 0x2530, + 0x84BC: 0x2525, + 0x84BD: 0x2538, + 0x84BE: 0x2542, + 0x889F: 0x4E9C, + 0x88A0: 0x5516, + 0x88A1: 0x5A03, + 0x88A2: 0x963F, + 0x88A3: 0x54C0, + 0x88A4: 0x611B, + 0x88A5: 0x6328, + 0x88A6: 0x59F6, + 0x88A7: 0x9022, + 0x88A8: 0x8475, + 0x88A9: 0x831C, + 0x88AA: 0x7A50, + 0x88AB: 0x60AA, + 0x88AC: 0x63E1, + 0x88AD: 0x6E25, + 0x88AE: 0x65ED, + 0x88AF: 0x8466, + 0x88B0: 0x82A6, + 0x88B1: 0x9BF5, + 0x88B2: 0x6893, + 0x88B3: 0x5727, + 0x88B4: 0x65A1, + 0x88B5: 0x6271, + 0x88B6: 0x5B9B, + 0x88B7: 0x59D0, + 0x88B8: 0x867B, + 0x88B9: 0x98F4, + 0x88BA: 0x7D62, + 0x88BB: 0x7DBE, + 0x88BC: 0x9B8E, + 0x88BD: 0x6216, + 0x88BE: 0x7C9F, + 0x88BF: 0x88B7, + 0x88C0: 0x5B89, + 0x88C1: 0x5EB5, + 0x88C2: 0x6309, + 0x88C3: 0x6697, + 0x88C4: 0x6848, + 0x88C5: 0x95C7, + 0x88C6: 0x978D, + 0x88C7: 0x674F, + 0x88C8: 0x4EE5, + 0x88C9: 0x4F0A, + 0x88CA: 0x4F4D, + 0x88CB: 0x4F9D, + 0x88CC: 0x5049, + 0x88CD: 0x56F2, + 0x88CE: 0x5937, + 0x88CF: 0x59D4, + 0x88D0: 0x5A01, + 0x88D1: 0x5C09, + 0x88D2: 0x60DF, + 0x88D3: 0x610F, + 0x88D4: 0x6170, + 0x88D5: 0x6613, + 0x88D6: 0x6905, + 0x88D7: 0x70BA, + 0x88D8: 0x754F, + 0x88D9: 0x7570, + 0x88DA: 0x79FB, + 0x88DB: 0x7DAD, + 0x88DC: 0x7DEF, + 0x88DD: 0x80C3, + 0x88DE: 0x840E, + 0x88DF: 0x8863, + 0x88E0: 0x8B02, + 0x88E1: 0x9055, + 0x88E2: 0x907A, + 0x88E3: 0x533B, + 0x88E4: 0x4E95, + 0x88E5: 0x4EA5, + 0x88E6: 0x57DF, + 0x88E7: 0x80B2, + 0x88E8: 0x90C1, + 0x88E9: 0x78EF, + 0x88EA: 0x4E00, + 0x88EB: 0x58F1, + 0x88EC: 0x6EA2, + 0x88ED: 0x9038, + 0x88EE: 0x7A32, + 0x88EF: 0x8328, + 0x88F0: 0x828B, + 0x88F1: 0x9C2F, + 0x88F2: 0x5141, + 0x88F3: 0x5370, + 0x88F4: 0x54BD, + 0x88F5: 0x54E1, + 0x88F6: 0x56E0, + 0x88F7: 0x59FB, + 0x88F8: 0x5F15, + 0x88F9: 0x98F2, + 0x88FA: 0x6DEB, + 0x88FB: 0x80E4, + 0x88FC: 0x852D, + 0x8940: 0x9662, + 0x8941: 0x9670, + 0x8942: 0x96A0, + 0x8943: 0x97FB, + 0x8944: 0x540B, + 0x8945: 0x53F3, + 0x8946: 0x5B87, + 0x8947: 0x70CF, + 0x8948: 0x7FBD, + 0x8949: 0x8FC2, + 0x894A: 0x96E8, + 0x894B: 0x536F, + 0x894C: 0x9D5C, + 0x894D: 0x7ABA, + 0x894E: 0x4E11, + 0x894F: 0x7893, + 0x8950: 0x81FC, + 0x8951: 0x6E26, + 0x8952: 0x5618, + 0x8953: 0x5504, + 0x8954: 0x6B1D, + 0x8955: 0x851A, + 0x8956: 0x9C3B, + 0x8957: 0x59E5, + 0x8958: 0x53A9, + 0x8959: 0x6D66, + 0x895A: 0x74DC, + 0x895B: 0x958F, + 0x895C: 0x5642, + 0x895D: 0x4E91, + 0x895E: 0x904B, + 0x895F: 0x96F2, + 0x8960: 0x834F, + 0x8961: 0x990C, + 0x8962: 0x53E1, + 0x8963: 0x55B6, + 0x8964: 0x5B30, + 0x8965: 0x5F71, + 0x8966: 0x6620, + 0x8967: 0x66F3, + 0x8968: 0x6804, + 0x8969: 0x6C38, + 0x896A: 0x6CF3, + 0x896B: 0x6D29, + 0x896C: 0x745B, + 0x896D: 0x76C8, + 0x896E: 0x7A4E, + 0x896F: 0x9834, + 0x8970: 0x82F1, + 0x8971: 0x885B, + 0x8972: 0x8A60, + 0x8973: 0x92ED, + 0x8974: 0x6DB2, + 0x8975: 0x75AB, + 0x8976: 0x76CA, + 0x8977: 0x99C5, + 0x8978: 0x60A6, + 0x8979: 0x8B01, + 0x897A: 0x8D8A, + 0x897B: 0x95B2, + 0x897C: 0x698E, + 0x897D: 0x53AD, + 0x897E: 0x5186, + 0x8980: 0x5712, + 0x8981: 0x5830, + 0x8982: 0x5944, + 0x8983: 0x5BB4, + 0x8984: 0x5EF6, + 0x8985: 0x6028, + 0x8986: 0x63A9, + 0x8987: 0x63F4, + 0x8988: 0x6CBF, + 0x8989: 0x6F14, + 0x898A: 0x708E, + 0x898B: 0x7114, + 0x898C: 0x7159, + 0x898D: 0x71D5, + 0x898E: 0x733F, + 0x898F: 0x7E01, + 0x8990: 0x8276, + 0x8991: 0x82D1, + 0x8992: 0x8597, + 0x8993: 0x9060, + 0x8994: 0x925B, + 0x8995: 0x9D1B, + 0x8996: 0x5869, + 0x8997: 0x65BC, + 0x8998: 0x6C5A, + 0x8999: 0x7525, + 0x899A: 0x51F9, + 0x899B: 0x592E, + 0x899C: 0x5965, + 0x899D: 0x5F80, + 0x899E: 0x5FDC, + 0x899F: 0x62BC, + 0x89A0: 0x65FA, + 0x89A1: 0x6A2A, + 0x89A2: 0x6B27, + 0x89A3: 0x6BB4, + 0x89A4: 0x738B, + 0x89A5: 0x7FC1, + 0x89A6: 0x8956, + 0x89A7: 0x9D2C, + 0x89A8: 0x9D0E, + 0x89A9: 0x9EC4, + 0x89AA: 0x5CA1, + 0x89AB: 0x6C96, + 0x89AC: 0x837B, + 0x89AD: 0x5104, + 0x89AE: 0x5C4B, + 0x89AF: 0x61B6, + 0x89B0: 0x81C6, + 0x89B1: 0x6876, + 0x89B2: 0x7261, + 0x89B3: 0x4E59, + 0x89B4: 0x4FFA, + 0x89B5: 0x5378, + 0x89B6: 0x6069, + 0x89B7: 0x6E29, + 0x89B8: 0x7A4F, + 0x89B9: 0x97F3, + 0x89BA: 0x4E0B, + 0x89BB: 0x5316, + 0x89BC: 0x4EEE, + 0x89BD: 0x4F55, + 0x89BE: 0x4F3D, + 0x89BF: 0x4FA1, + 0x89C0: 0x4F73, + 0x89C1: 0x52A0, + 0x89C2: 0x53EF, + 0x89C3: 0x5609, + 0x89C4: 0x590F, + 0x89C5: 0x5AC1, + 0x89C6: 0x5BB6, + 0x89C7: 0x5BE1, + 0x89C8: 0x79D1, + 0x89C9: 0x6687, + 0x89CA: 0x679C, + 0x89CB: 0x67B6, + 0x89CC: 0x6B4C, + 0x89CD: 0x6CB3, + 0x89CE: 0x706B, + 0x89CF: 0x73C2, + 0x89D0: 0x798D, + 0x89D1: 0x79BE, + 0x89D2: 0x7A3C, + 0x89D3: 0x7B87, + 0x89D4: 0x82B1, + 0x89D5: 0x82DB, + 0x89D6: 0x8304, + 0x89D7: 0x8377, + 0x89D8: 0x83EF, + 0x89D9: 0x83D3, + 0x89DA: 0x8766, + 0x89DB: 0x8AB2, + 0x89DC: 0x5629, + 0x89DD: 0x8CA8, + 0x89DE: 0x8FE6, + 0x89DF: 0x904E, + 0x89E0: 0x971E, + 0x89E1: 0x868A, + 0x89E2: 0x4FC4, + 0x89E3: 0x5CE8, + 0x89E4: 0x6211, + 0x89E5: 0x7259, + 0x89E6: 0x753B, + 0x89E7: 0x81E5, + 0x89E8: 0x82BD, + 0x89E9: 0x86FE, + 0x89EA: 0x8CC0, + 0x89EB: 0x96C5, + 0x89EC: 0x9913, + 0x89ED: 0x99D5, + 0x89EE: 0x4ECB, + 0x89EF: 0x4F1A, + 0x89F0: 0x89E3, + 0x89F1: 0x56DE, + 0x89F2: 0x584A, + 0x89F3: 0x58CA, + 0x89F4: 0x5EFB, + 0x89F5: 0x5FEB, + 0x89F6: 0x602A, + 0x89F7: 0x6094, + 0x89F8: 0x6062, + 0x89F9: 0x61D0, + 0x89FA: 0x6212, + 0x89FB: 0x62D0, + 0x89FC: 0x6539, + 0x8A40: 0x9B41, + 0x8A41: 0x6666, + 0x8A42: 0x68B0, + 0x8A43: 0x6D77, + 0x8A44: 0x7070, + 0x8A45: 0x754C, + 0x8A46: 0x7686, + 0x8A47: 0x7D75, + 0x8A48: 0x82A5, + 0x8A49: 0x87F9, + 0x8A4A: 0x958B, + 0x8A4B: 0x968E, + 0x8A4C: 0x8C9D, + 0x8A4D: 0x51F1, + 0x8A4E: 0x52BE, + 0x8A4F: 0x5916, + 0x8A50: 0x54B3, + 0x8A51: 0x5BB3, + 0x8A52: 0x5D16, + 0x8A53: 0x6168, + 0x8A54: 0x6982, + 0x8A55: 0x6DAF, + 0x8A56: 0x788D, + 0x8A57: 0x84CB, + 0x8A58: 0x8857, + 0x8A59: 0x8A72, + 0x8A5A: 0x93A7, + 0x8A5B: 0x9AB8, + 0x8A5C: 0x6D6C, + 0x8A5D: 0x99A8, + 0x8A5E: 0x86D9, + 0x8A5F: 0x57A3, + 0x8A60: 0x67FF, + 0x8A61: 0x86CE, + 0x8A62: 0x920E, + 0x8A63: 0x5283, + 0x8A64: 0x5687, + 0x8A65: 0x5404, + 0x8A66: 0x5ED3, + 0x8A67: 0x62E1, + 0x8A68: 0x64B9, + 0x8A69: 0x683C, + 0x8A6A: 0x6838, + 0x8A6B: 0x6BBB, + 0x8A6C: 0x7372, + 0x8A6D: 0x78BA, + 0x8A6E: 0x7A6B, + 0x8A6F: 0x899A, + 0x8A70: 0x89D2, + 0x8A71: 0x8D6B, + 0x8A72: 0x8F03, + 0x8A73: 0x90ED, + 0x8A74: 0x95A3, + 0x8A75: 0x9694, + 0x8A76: 0x9769, + 0x8A77: 0x5B66, + 0x8A78: 0x5CB3, + 0x8A79: 0x697D, + 0x8A7A: 0x984D, + 0x8A7B: 0x984E, + 0x8A7C: 0x639B, + 0x8A7D: 0x7B20, + 0x8A7E: 0x6A2B, + 0x8A80: 0x6A7F, + 0x8A81: 0x68B6, + 0x8A82: 0x9C0D, + 0x8A83: 0x6F5F, + 0x8A84: 0x5272, + 0x8A85: 0x559D, + 0x8A86: 0x6070, + 0x8A87: 0x62EC, + 0x8A88: 0x6D3B, + 0x8A89: 0x6E07, + 0x8A8A: 0x6ED1, + 0x8A8B: 0x845B, + 0x8A8C: 0x8910, + 0x8A8D: 0x8F44, + 0x8A8E: 0x4E14, + 0x8A8F: 0x9C39, + 0x8A90: 0x53F6, + 0x8A91: 0x691B, + 0x8A92: 0x6A3A, + 0x8A93: 0x9784, + 0x8A94: 0x682A, + 0x8A95: 0x515C, + 0x8A96: 0x7AC3, + 0x8A97: 0x84B2, + 0x8A98: 0x91DC, + 0x8A99: 0x938C, + 0x8A9A: 0x565B, + 0x8A9B: 0x9D28, + 0x8A9C: 0x6822, + 0x8A9D: 0x8305, + 0x8A9E: 0x8431, + 0x8A9F: 0x7CA5, + 0x8AA0: 0x5208, + 0x8AA1: 0x82C5, + 0x8AA2: 0x74E6, + 0x8AA3: 0x4E7E, + 0x8AA4: 0x4F83, + 0x8AA5: 0x51A0, + 0x8AA6: 0x5BD2, + 0x8AA7: 0x520A, + 0x8AA8: 0x52D8, + 0x8AA9: 0x52E7, + 0x8AAA: 0x5DFB, + 0x8AAB: 0x559A, + 0x8AAC: 0x582A, + 0x8AAD: 0x59E6, + 0x8AAE: 0x5B8C, + 0x8AAF: 0x5B98, + 0x8AB0: 0x5BDB, + 0x8AB1: 0x5E72, + 0x8AB2: 0x5E79, + 0x8AB3: 0x60A3, + 0x8AB4: 0x611F, + 0x8AB5: 0x6163, + 0x8AB6: 0x61BE, + 0x8AB7: 0x63DB, + 0x8AB8: 0x6562, + 0x8AB9: 0x67D1, + 0x8ABA: 0x6853, + 0x8ABB: 0x68FA, + 0x8ABC: 0x6B3E, + 0x8ABD: 0x6B53, + 0x8ABE: 0x6C57, + 0x8ABF: 0x6F22, + 0x8AC0: 0x6F97, + 0x8AC1: 0x6F45, + 0x8AC2: 0x74B0, + 0x8AC3: 0x7518, + 0x8AC4: 0x76E3, + 0x8AC5: 0x770B, + 0x8AC6: 0x7AFF, + 0x8AC7: 0x7BA1, + 0x8AC8: 0x7C21, + 0x8AC9: 0x7DE9, + 0x8ACA: 0x7F36, + 0x8ACB: 0x7FF0, + 0x8ACC: 0x809D, + 0x8ACD: 0x8266, + 0x8ACE: 0x839E, + 0x8ACF: 0x89B3, + 0x8AD0: 0x8ACC, + 0x8AD1: 0x8CAB, + 0x8AD2: 0x9084, + 0x8AD3: 0x9451, + 0x8AD4: 0x9593, + 0x8AD5: 0x9591, + 0x8AD6: 0x95A2, + 0x8AD7: 0x9665, + 0x8AD8: 0x97D3, + 0x8AD9: 0x9928, + 0x8ADA: 0x8218, + 0x8ADB: 0x4E38, + 0x8ADC: 0x542B, + 0x8ADD: 0x5CB8, + 0x8ADE: 0x5DCC, + 0x8ADF: 0x73A9, + 0x8AE0: 0x764C, + 0x8AE1: 0x773C, + 0x8AE2: 0x5CA9, + 0x8AE3: 0x7FEB, + 0x8AE4: 0x8D0B, + 0x8AE5: 0x96C1, + 0x8AE6: 0x9811, + 0x8AE7: 0x9854, + 0x8AE8: 0x9858, + 0x8AE9: 0x4F01, + 0x8AEA: 0x4F0E, + 0x8AEB: 0x5371, + 0x8AEC: 0x559C, + 0x8AED: 0x5668, + 0x8AEE: 0x57FA, + 0x8AEF: 0x5947, + 0x8AF0: 0x5B09, + 0x8AF1: 0x5BC4, + 0x8AF2: 0x5C90, + 0x8AF3: 0x5E0C, + 0x8AF4: 0x5E7E, + 0x8AF5: 0x5FCC, + 0x8AF6: 0x63EE, + 0x8AF7: 0x673A, + 0x8AF8: 0x65D7, + 0x8AF9: 0x65E2, + 0x8AFA: 0x671F, + 0x8AFB: 0x68CB, + 0x8AFC: 0x68C4, + 0x8B40: 0x6A5F, + 0x8B41: 0x5E30, + 0x8B42: 0x6BC5, + 0x8B43: 0x6C17, + 0x8B44: 0x6C7D, + 0x8B45: 0x757F, + 0x8B46: 0x7948, + 0x8B47: 0x5B63, + 0x8B48: 0x7A00, + 0x8B49: 0x7D00, + 0x8B4A: 0x5FBD, + 0x8B4B: 0x898F, + 0x8B4C: 0x8A18, + 0x8B4D: 0x8CB4, + 0x8B4E: 0x8D77, + 0x8B4F: 0x8ECC, + 0x8B50: 0x8F1D, + 0x8B51: 0x98E2, + 0x8B52: 0x9A0E, + 0x8B53: 0x9B3C, + 0x8B54: 0x4E80, + 0x8B55: 0x507D, + 0x8B56: 0x5100, + 0x8B57: 0x5993, + 0x8B58: 0x5B9C, + 0x8B59: 0x622F, + 0x8B5A: 0x6280, + 0x8B5B: 0x64EC, + 0x8B5C: 0x6B3A, + 0x8B5D: 0x72A0, + 0x8B5E: 0x7591, + 0x8B5F: 0x7947, + 0x8B60: 0x7FA9, + 0x8B61: 0x87FB, + 0x8B62: 0x8ABC, + 0x8B63: 0x8B70, + 0x8B64: 0x63AC, + 0x8B65: 0x83CA, + 0x8B66: 0x97A0, + 0x8B67: 0x5409, + 0x8B68: 0x5403, + 0x8B69: 0x55AB, + 0x8B6A: 0x6854, + 0x8B6B: 0x6A58, + 0x8B6C: 0x8A70, + 0x8B6D: 0x7827, + 0x8B6E: 0x6775, + 0x8B6F: 0x9ECD, + 0x8B70: 0x5374, + 0x8B71: 0x5BA2, + 0x8B72: 0x811A, + 0x8B73: 0x8650, + 0x8B74: 0x9006, + 0x8B75: 0x4E18, + 0x8B76: 0x4E45, + 0x8B77: 0x4EC7, + 0x8B78: 0x4F11, + 0x8B79: 0x53CA, + 0x8B7A: 0x5438, + 0x8B7B: 0x5BAE, + 0x8B7C: 0x5F13, + 0x8B7D: 0x6025, + 0x8B7E: 0x6551, + 0x8B80: 0x673D, + 0x8B81: 0x6C42, + 0x8B82: 0x6C72, + 0x8B83: 0x6CE3, + 0x8B84: 0x7078, + 0x8B85: 0x7403, + 0x8B86: 0x7A76, + 0x8B87: 0x7AAE, + 0x8B88: 0x7B08, + 0x8B89: 0x7D1A, + 0x8B8A: 0x7CFE, + 0x8B8B: 0x7D66, + 0x8B8C: 0x65E7, + 0x8B8D: 0x725B, + 0x8B8E: 0x53BB, + 0x8B8F: 0x5C45, + 0x8B90: 0x5DE8, + 0x8B91: 0x62D2, + 0x8B92: 0x62E0, + 0x8B93: 0x6319, + 0x8B94: 0x6E20, + 0x8B95: 0x865A, + 0x8B96: 0x8A31, + 0x8B97: 0x8DDD, + 0x8B98: 0x92F8, + 0x8B99: 0x6F01, + 0x8B9A: 0x79A6, + 0x8B9B: 0x9B5A, + 0x8B9C: 0x4EA8, + 0x8B9D: 0x4EAB, + 0x8B9E: 0x4EAC, + 0x8B9F: 0x4F9B, + 0x8BA0: 0x4FA0, + 0x8BA1: 0x50D1, + 0x8BA2: 0x5147, + 0x8BA3: 0x7AF6, + 0x8BA4: 0x5171, + 0x8BA5: 0x51F6, + 0x8BA6: 0x5354, + 0x8BA7: 0x5321, + 0x8BA8: 0x537F, + 0x8BA9: 0x53EB, + 0x8BAA: 0x55AC, + 0x8BAB: 0x5883, + 0x8BAC: 0x5CE1, + 0x8BAD: 0x5F37, + 0x8BAE: 0x5F4A, + 0x8BAF: 0x602F, + 0x8BB0: 0x6050, + 0x8BB1: 0x606D, + 0x8BB2: 0x631F, + 0x8BB3: 0x6559, + 0x8BB4: 0x6A4B, + 0x8BB5: 0x6CC1, + 0x8BB6: 0x72C2, + 0x8BB7: 0x72ED, + 0x8BB8: 0x77EF, + 0x8BB9: 0x80F8, + 0x8BBA: 0x8105, + 0x8BBB: 0x8208, + 0x8BBC: 0x854E, + 0x8BBD: 0x90F7, + 0x8BBE: 0x93E1, + 0x8BBF: 0x97FF, + 0x8BC0: 0x9957, + 0x8BC1: 0x9A5A, + 0x8BC2: 0x4EF0, + 0x8BC3: 0x51DD, + 0x8BC4: 0x5C2D, + 0x8BC5: 0x6681, + 0x8BC6: 0x696D, + 0x8BC7: 0x5C40, + 0x8BC8: 0x66F2, + 0x8BC9: 0x6975, + 0x8BCA: 0x7389, + 0x8BCB: 0x6850, + 0x8BCC: 0x7C81, + 0x8BCD: 0x50C5, + 0x8BCE: 0x52E4, + 0x8BCF: 0x5747, + 0x8BD0: 0x5DFE, + 0x8BD1: 0x9326, + 0x8BD2: 0x65A4, + 0x8BD3: 0x6B23, + 0x8BD4: 0x6B3D, + 0x8BD5: 0x7434, + 0x8BD6: 0x7981, + 0x8BD7: 0x79BD, + 0x8BD8: 0x7B4B, + 0x8BD9: 0x7DCA, + 0x8BDA: 0x82B9, + 0x8BDB: 0x83CC, + 0x8BDC: 0x887F, + 0x8BDD: 0x895F, + 0x8BDE: 0x8B39, + 0x8BDF: 0x8FD1, + 0x8BE0: 0x91D1, + 0x8BE1: 0x541F, + 0x8BE2: 0x9280, + 0x8BE3: 0x4E5D, + 0x8BE4: 0x5036, + 0x8BE5: 0x53E5, + 0x8BE6: 0x533A, + 0x8BE7: 0x72D7, + 0x8BE8: 0x7396, + 0x8BE9: 0x77E9, + 0x8BEA: 0x82E6, + 0x8BEB: 0x8EAF, + 0x8BEC: 0x99C6, + 0x8BED: 0x99C8, + 0x8BEE: 0x99D2, + 0x8BEF: 0x5177, + 0x8BF0: 0x611A, + 0x8BF1: 0x865E, + 0x8BF2: 0x55B0, + 0x8BF3: 0x7A7A, + 0x8BF4: 0x5076, + 0x8BF5: 0x5BD3, + 0x8BF6: 0x9047, + 0x8BF7: 0x9685, + 0x8BF8: 0x4E32, + 0x8BF9: 0x6ADB, + 0x8BFA: 0x91E7, + 0x8BFB: 0x5C51, + 0x8BFC: 0x5C48, + 0x8C40: 0x6398, + 0x8C41: 0x7A9F, + 0x8C42: 0x6C93, + 0x8C43: 0x9774, + 0x8C44: 0x8F61, + 0x8C45: 0x7AAA, + 0x8C46: 0x718A, + 0x8C47: 0x9688, + 0x8C48: 0x7C82, + 0x8C49: 0x6817, + 0x8C4A: 0x7E70, + 0x8C4B: 0x6851, + 0x8C4C: 0x936C, + 0x8C4D: 0x52F2, + 0x8C4E: 0x541B, + 0x8C4F: 0x85AB, + 0x8C50: 0x8A13, + 0x8C51: 0x7FA4, + 0x8C52: 0x8ECD, + 0x8C53: 0x90E1, + 0x8C54: 0x5366, + 0x8C55: 0x8888, + 0x8C56: 0x7941, + 0x8C57: 0x4FC2, + 0x8C58: 0x50BE, + 0x8C59: 0x5211, + 0x8C5A: 0x5144, + 0x8C5B: 0x5553, + 0x8C5C: 0x572D, + 0x8C5D: 0x73EA, + 0x8C5E: 0x578B, + 0x8C5F: 0x5951, + 0x8C60: 0x5F62, + 0x8C61: 0x5F84, + 0x8C62: 0x6075, + 0x8C63: 0x6176, + 0x8C64: 0x6167, + 0x8C65: 0x61A9, + 0x8C66: 0x63B2, + 0x8C67: 0x643A, + 0x8C68: 0x656C, + 0x8C69: 0x666F, + 0x8C6A: 0x6842, + 0x8C6B: 0x6E13, + 0x8C6C: 0x7566, + 0x8C6D: 0x7A3D, + 0x8C6E: 0x7CFB, + 0x8C6F: 0x7D4C, + 0x8C70: 0x7D99, + 0x8C71: 0x7E4B, + 0x8C72: 0x7F6B, + 0x8C73: 0x830E, + 0x8C74: 0x834A, + 0x8C75: 0x86CD, + 0x8C76: 0x8A08, + 0x8C77: 0x8A63, + 0x8C78: 0x8B66, + 0x8C79: 0x8EFD, + 0x8C7A: 0x981A, + 0x8C7B: 0x9D8F, + 0x8C7C: 0x82B8, + 0x8C7D: 0x8FCE, + 0x8C7E: 0x9BE8, + 0x8C80: 0x5287, + 0x8C81: 0x621F, + 0x8C82: 0x6483, + 0x8C83: 0x6FC0, + 0x8C84: 0x9699, + 0x8C85: 0x6841, + 0x8C86: 0x5091, + 0x8C87: 0x6B20, + 0x8C88: 0x6C7A, + 0x8C89: 0x6F54, + 0x8C8A: 0x7A74, + 0x8C8B: 0x7D50, + 0x8C8C: 0x8840, + 0x8C8D: 0x8A23, + 0x8C8E: 0x6708, + 0x8C8F: 0x4EF6, + 0x8C90: 0x5039, + 0x8C91: 0x5026, + 0x8C92: 0x5065, + 0x8C93: 0x517C, + 0x8C94: 0x5238, + 0x8C95: 0x5263, + 0x8C96: 0x55A7, + 0x8C97: 0x570F, + 0x8C98: 0x5805, + 0x8C99: 0x5ACC, + 0x8C9A: 0x5EFA, + 0x8C9B: 0x61B2, + 0x8C9C: 0x61F8, + 0x8C9D: 0x62F3, + 0x8C9E: 0x6372, + 0x8C9F: 0x691C, + 0x8CA0: 0x6A29, + 0x8CA1: 0x727D, + 0x8CA2: 0x72AC, + 0x8CA3: 0x732E, + 0x8CA4: 0x7814, + 0x8CA5: 0x786F, + 0x8CA6: 0x7D79, + 0x8CA7: 0x770C, + 0x8CA8: 0x80A9, + 0x8CA9: 0x898B, + 0x8CAA: 0x8B19, + 0x8CAB: 0x8CE2, + 0x8CAC: 0x8ED2, + 0x8CAD: 0x9063, + 0x8CAE: 0x9375, + 0x8CAF: 0x967A, + 0x8CB0: 0x9855, + 0x8CB1: 0x9A13, + 0x8CB2: 0x9E78, + 0x8CB3: 0x5143, + 0x8CB4: 0x539F, + 0x8CB5: 0x53B3, + 0x8CB6: 0x5E7B, + 0x8CB7: 0x5F26, + 0x8CB8: 0x6E1B, + 0x8CB9: 0x6E90, + 0x8CBA: 0x7384, + 0x8CBB: 0x73FE, + 0x8CBC: 0x7D43, + 0x8CBD: 0x8237, + 0x8CBE: 0x8A00, + 0x8CBF: 0x8AFA, + 0x8CC0: 0x9650, + 0x8CC1: 0x4E4E, + 0x8CC2: 0x500B, + 0x8CC3: 0x53E4, + 0x8CC4: 0x547C, + 0x8CC5: 0x56FA, + 0x8CC6: 0x59D1, + 0x8CC7: 0x5B64, + 0x8CC8: 0x5DF1, + 0x8CC9: 0x5EAB, + 0x8CCA: 0x5F27, + 0x8CCB: 0x6238, + 0x8CCC: 0x6545, + 0x8CCD: 0x67AF, + 0x8CCE: 0x6E56, + 0x8CCF: 0x72D0, + 0x8CD0: 0x7CCA, + 0x8CD1: 0x88B4, + 0x8CD2: 0x80A1, + 0x8CD3: 0x80E1, + 0x8CD4: 0x83F0, + 0x8CD5: 0x864E, + 0x8CD6: 0x8A87, + 0x8CD7: 0x8DE8, + 0x8CD8: 0x9237, + 0x8CD9: 0x96C7, + 0x8CDA: 0x9867, + 0x8CDB: 0x9F13, + 0x8CDC: 0x4E94, + 0x8CDD: 0x4E92, + 0x8CDE: 0x4F0D, + 0x8CDF: 0x5348, + 0x8CE0: 0x5449, + 0x8CE1: 0x543E, + 0x8CE2: 0x5A2F, + 0x8CE3: 0x5F8C, + 0x8CE4: 0x5FA1, + 0x8CE5: 0x609F, + 0x8CE6: 0x68A7, + 0x8CE7: 0x6A8E, + 0x8CE8: 0x745A, + 0x8CE9: 0x7881, + 0x8CEA: 0x8A9E, + 0x8CEB: 0x8AA4, + 0x8CEC: 0x8B77, + 0x8CED: 0x9190, + 0x8CEE: 0x4E5E, + 0x8CEF: 0x9BC9, + 0x8CF0: 0x4EA4, + 0x8CF1: 0x4F7C, + 0x8CF2: 0x4FAF, + 0x8CF3: 0x5019, + 0x8CF4: 0x5016, + 0x8CF5: 0x5149, + 0x8CF6: 0x516C, + 0x8CF7: 0x529F, + 0x8CF8: 0x52B9, + 0x8CF9: 0x52FE, + 0x8CFA: 0x539A, + 0x8CFB: 0x53E3, + 0x8CFC: 0x5411, + 0x8D40: 0x540E, + 0x8D41: 0x5589, + 0x8D42: 0x5751, + 0x8D43: 0x57A2, + 0x8D44: 0x597D, + 0x8D45: 0x5B54, + 0x8D46: 0x5B5D, + 0x8D47: 0x5B8F, + 0x8D48: 0x5DE5, + 0x8D49: 0x5DE7, + 0x8D4A: 0x5DF7, + 0x8D4B: 0x5E78, + 0x8D4C: 0x5E83, + 0x8D4D: 0x5E9A, + 0x8D4E: 0x5EB7, + 0x8D4F: 0x5F18, + 0x8D50: 0x6052, + 0x8D51: 0x614C, + 0x8D52: 0x6297, + 0x8D53: 0x62D8, + 0x8D54: 0x63A7, + 0x8D55: 0x653B, + 0x8D56: 0x6602, + 0x8D57: 0x6643, + 0x8D58: 0x66F4, + 0x8D59: 0x676D, + 0x8D5A: 0x6821, + 0x8D5B: 0x6897, + 0x8D5C: 0x69CB, + 0x8D5D: 0x6C5F, + 0x8D5E: 0x6D2A, + 0x8D5F: 0x6D69, + 0x8D60: 0x6E2F, + 0x8D61: 0x6E9D, + 0x8D62: 0x7532, + 0x8D63: 0x7687, + 0x8D64: 0x786C, + 0x8D65: 0x7A3F, + 0x8D66: 0x7CE0, + 0x8D67: 0x7D05, + 0x8D68: 0x7D18, + 0x8D69: 0x7D5E, + 0x8D6A: 0x7DB1, + 0x8D6B: 0x8015, + 0x8D6C: 0x8003, + 0x8D6D: 0x80AF, + 0x8D6E: 0x80B1, + 0x8D6F: 0x8154, + 0x8D70: 0x818F, + 0x8D71: 0x822A, + 0x8D72: 0x8352, + 0x8D73: 0x884C, + 0x8D74: 0x8861, + 0x8D75: 0x8B1B, + 0x8D76: 0x8CA2, + 0x8D77: 0x8CFC, + 0x8D78: 0x90CA, + 0x8D79: 0x9175, + 0x8D7A: 0x9271, + 0x8D7B: 0x783F, + 0x8D7C: 0x92FC, + 0x8D7D: 0x95A4, + 0x8D7E: 0x964D, + 0x8D80: 0x9805, + 0x8D81: 0x9999, + 0x8D82: 0x9AD8, + 0x8D83: 0x9D3B, + 0x8D84: 0x525B, + 0x8D85: 0x52AB, + 0x8D86: 0x53F7, + 0x8D87: 0x5408, + 0x8D88: 0x58D5, + 0x8D89: 0x62F7, + 0x8D8A: 0x6FE0, + 0x8D8B: 0x8C6A, + 0x8D8C: 0x8F5F, + 0x8D8D: 0x9EB9, + 0x8D8E: 0x514B, + 0x8D8F: 0x523B, + 0x8D90: 0x544A, + 0x8D91: 0x56FD, + 0x8D92: 0x7A40, + 0x8D93: 0x9177, + 0x8D94: 0x9D60, + 0x8D95: 0x9ED2, + 0x8D96: 0x7344, + 0x8D97: 0x6F09, + 0x8D98: 0x8170, + 0x8D99: 0x7511, + 0x8D9A: 0x5FFD, + 0x8D9B: 0x60DA, + 0x8D9C: 0x9AA8, + 0x8D9D: 0x72DB, + 0x8D9E: 0x8FBC, + 0x8D9F: 0x6B64, + 0x8DA0: 0x9803, + 0x8DA1: 0x4ECA, + 0x8DA2: 0x56F0, + 0x8DA3: 0x5764, + 0x8DA4: 0x58BE, + 0x8DA5: 0x5A5A, + 0x8DA6: 0x6068, + 0x8DA7: 0x61C7, + 0x8DA8: 0x660F, + 0x8DA9: 0x6606, + 0x8DAA: 0x6839, + 0x8DAB: 0x68B1, + 0x8DAC: 0x6DF7, + 0x8DAD: 0x75D5, + 0x8DAE: 0x7D3A, + 0x8DAF: 0x826E, + 0x8DB0: 0x9B42, + 0x8DB1: 0x4E9B, + 0x8DB2: 0x4F50, + 0x8DB3: 0x53C9, + 0x8DB4: 0x5506, + 0x8DB5: 0x5D6F, + 0x8DB6: 0x5DE6, + 0x8DB7: 0x5DEE, + 0x8DB8: 0x67FB, + 0x8DB9: 0x6C99, + 0x8DBA: 0x7473, + 0x8DBB: 0x7802, + 0x8DBC: 0x8A50, + 0x8DBD: 0x9396, + 0x8DBE: 0x88DF, + 0x8DBF: 0x5750, + 0x8DC0: 0x5EA7, + 0x8DC1: 0x632B, + 0x8DC2: 0x50B5, + 0x8DC3: 0x50AC, + 0x8DC4: 0x518D, + 0x8DC5: 0x6700, + 0x8DC6: 0x54C9, + 0x8DC7: 0x585E, + 0x8DC8: 0x59BB, + 0x8DC9: 0x5BB0, + 0x8DCA: 0x5F69, + 0x8DCB: 0x624D, + 0x8DCC: 0x63A1, + 0x8DCD: 0x683D, + 0x8DCE: 0x6B73, + 0x8DCF: 0x6E08, + 0x8DD0: 0x707D, + 0x8DD1: 0x91C7, + 0x8DD2: 0x7280, + 0x8DD3: 0x7815, + 0x8DD4: 0x7826, + 0x8DD5: 0x796D, + 0x8DD6: 0x658E, + 0x8DD7: 0x7D30, + 0x8DD8: 0x83DC, + 0x8DD9: 0x88C1, + 0x8DDA: 0x8F09, + 0x8DDB: 0x969B, + 0x8DDC: 0x5264, + 0x8DDD: 0x5728, + 0x8DDE: 0x6750, + 0x8DDF: 0x7F6A, + 0x8DE0: 0x8CA1, + 0x8DE1: 0x51B4, + 0x8DE2: 0x5742, + 0x8DE3: 0x962A, + 0x8DE4: 0x583A, + 0x8DE5: 0x698A, + 0x8DE6: 0x80B4, + 0x8DE7: 0x54B2, + 0x8DE8: 0x5D0E, + 0x8DE9: 0x57FC, + 0x8DEA: 0x7895, + 0x8DEB: 0x9DFA, + 0x8DEC: 0x4F5C, + 0x8DED: 0x524A, + 0x8DEE: 0x548B, + 0x8DEF: 0x643E, + 0x8DF0: 0x6628, + 0x8DF1: 0x6714, + 0x8DF2: 0x67F5, + 0x8DF3: 0x7A84, + 0x8DF4: 0x7B56, + 0x8DF5: 0x7D22, + 0x8DF6: 0x932F, + 0x8DF7: 0x685C, + 0x8DF8: 0x9BAD, + 0x8DF9: 0x7B39, + 0x8DFA: 0x5319, + 0x8DFB: 0x518A, + 0x8DFC: 0x5237, + 0x8E40: 0x5BDF, + 0x8E41: 0x62F6, + 0x8E42: 0x64AE, + 0x8E43: 0x64E6, + 0x8E44: 0x672D, + 0x8E45: 0x6BBA, + 0x8E46: 0x85A9, + 0x8E47: 0x96D1, + 0x8E48: 0x7690, + 0x8E49: 0x9BD6, + 0x8E4A: 0x634C, + 0x8E4B: 0x9306, + 0x8E4C: 0x9BAB, + 0x8E4D: 0x76BF, + 0x8E4E: 0x6652, + 0x8E4F: 0x4E09, + 0x8E50: 0x5098, + 0x8E51: 0x53C2, + 0x8E52: 0x5C71, + 0x8E53: 0x60E8, + 0x8E54: 0x6492, + 0x8E55: 0x6563, + 0x8E56: 0x685F, + 0x8E57: 0x71E6, + 0x8E58: 0x73CA, + 0x8E59: 0x7523, + 0x8E5A: 0x7B97, + 0x8E5B: 0x7E82, + 0x8E5C: 0x8695, + 0x8E5D: 0x8B83, + 0x8E5E: 0x8CDB, + 0x8E5F: 0x9178, + 0x8E60: 0x9910, + 0x8E61: 0x65AC, + 0x8E62: 0x66AB, + 0x8E63: 0x6B8B, + 0x8E64: 0x4ED5, + 0x8E65: 0x4ED4, + 0x8E66: 0x4F3A, + 0x8E67: 0x4F7F, + 0x8E68: 0x523A, + 0x8E69: 0x53F8, + 0x8E6A: 0x53F2, + 0x8E6B: 0x55E3, + 0x8E6C: 0x56DB, + 0x8E6D: 0x58EB, + 0x8E6E: 0x59CB, + 0x8E6F: 0x59C9, + 0x8E70: 0x59FF, + 0x8E71: 0x5B50, + 0x8E72: 0x5C4D, + 0x8E73: 0x5E02, + 0x8E74: 0x5E2B, + 0x8E75: 0x5FD7, + 0x8E76: 0x601D, + 0x8E77: 0x6307, + 0x8E78: 0x652F, + 0x8E79: 0x5B5C, + 0x8E7A: 0x65AF, + 0x8E7B: 0x65BD, + 0x8E7C: 0x65E8, + 0x8E7D: 0x679D, + 0x8E7E: 0x6B62, + 0x8E80: 0x6B7B, + 0x8E81: 0x6C0F, + 0x8E82: 0x7345, + 0x8E83: 0x7949, + 0x8E84: 0x79C1, + 0x8E85: 0x7CF8, + 0x8E86: 0x7D19, + 0x8E87: 0x7D2B, + 0x8E88: 0x80A2, + 0x8E89: 0x8102, + 0x8E8A: 0x81F3, + 0x8E8B: 0x8996, + 0x8E8C: 0x8A5E, + 0x8E8D: 0x8A69, + 0x8E8E: 0x8A66, + 0x8E8F: 0x8A8C, + 0x8E90: 0x8AEE, + 0x8E91: 0x8CC7, + 0x8E92: 0x8CDC, + 0x8E93: 0x96CC, + 0x8E94: 0x98FC, + 0x8E95: 0x6B6F, + 0x8E96: 0x4E8B, + 0x8E97: 0x4F3C, + 0x8E98: 0x4F8D, + 0x8E99: 0x5150, + 0x8E9A: 0x5B57, + 0x8E9B: 0x5BFA, + 0x8E9C: 0x6148, + 0x8E9D: 0x6301, + 0x8E9E: 0x6642, + 0x8E9F: 0x6B21, + 0x8EA0: 0x6ECB, + 0x8EA1: 0x6CBB, + 0x8EA2: 0x723E, + 0x8EA3: 0x74BD, + 0x8EA4: 0x75D4, + 0x8EA5: 0x78C1, + 0x8EA6: 0x793A, + 0x8EA7: 0x800C, + 0x8EA8: 0x8033, + 0x8EA9: 0x81EA, + 0x8EAA: 0x8494, + 0x8EAB: 0x8F9E, + 0x8EAC: 0x6C50, + 0x8EAD: 0x9E7F, + 0x8EAE: 0x5F0F, + 0x8EAF: 0x8B58, + 0x8EB0: 0x9D2B, + 0x8EB1: 0x7AFA, + 0x8EB2: 0x8EF8, + 0x8EB3: 0x5B8D, + 0x8EB4: 0x96EB, + 0x8EB5: 0x4E03, + 0x8EB6: 0x53F1, + 0x8EB7: 0x57F7, + 0x8EB8: 0x5931, + 0x8EB9: 0x5AC9, + 0x8EBA: 0x5BA4, + 0x8EBB: 0x6089, + 0x8EBC: 0x6E7F, + 0x8EBD: 0x6F06, + 0x8EBE: 0x75BE, + 0x8EBF: 0x8CEA, + 0x8EC0: 0x5B9F, + 0x8EC1: 0x8500, + 0x8EC2: 0x7BE0, + 0x8EC3: 0x5072, + 0x8EC4: 0x67F4, + 0x8EC5: 0x829D, + 0x8EC6: 0x5C61, + 0x8EC7: 0x854A, + 0x8EC8: 0x7E1E, + 0x8EC9: 0x820E, + 0x8ECA: 0x5199, + 0x8ECB: 0x5C04, + 0x8ECC: 0x6368, + 0x8ECD: 0x8D66, + 0x8ECE: 0x659C, + 0x8ECF: 0x716E, + 0x8ED0: 0x793E, + 0x8ED1: 0x7D17, + 0x8ED2: 0x8005, + 0x8ED3: 0x8B1D, + 0x8ED4: 0x8ECA, + 0x8ED5: 0x906E, + 0x8ED6: 0x86C7, + 0x8ED7: 0x90AA, + 0x8ED8: 0x501F, + 0x8ED9: 0x52FA, + 0x8EDA: 0x5C3A, + 0x8EDB: 0x6753, + 0x8EDC: 0x707C, + 0x8EDD: 0x7235, + 0x8EDE: 0x914C, + 0x8EDF: 0x91C8, + 0x8EE0: 0x932B, + 0x8EE1: 0x82E5, + 0x8EE2: 0x5BC2, + 0x8EE3: 0x5F31, + 0x8EE4: 0x60F9, + 0x8EE5: 0x4E3B, + 0x8EE6: 0x53D6, + 0x8EE7: 0x5B88, + 0x8EE8: 0x624B, + 0x8EE9: 0x6731, + 0x8EEA: 0x6B8A, + 0x8EEB: 0x72E9, + 0x8EEC: 0x73E0, + 0x8EED: 0x7A2E, + 0x8EEE: 0x816B, + 0x8EEF: 0x8DA3, + 0x8EF0: 0x9152, + 0x8EF1: 0x9996, + 0x8EF2: 0x5112, + 0x8EF3: 0x53D7, + 0x8EF4: 0x546A, + 0x8EF5: 0x5BFF, + 0x8EF6: 0x6388, + 0x8EF7: 0x6A39, + 0x8EF8: 0x7DAC, + 0x8EF9: 0x9700, + 0x8EFA: 0x56DA, + 0x8EFB: 0x53CE, + 0x8EFC: 0x5468, + 0x8F40: 0x5B97, + 0x8F41: 0x5C31, + 0x8F42: 0x5DDE, + 0x8F43: 0x4FEE, + 0x8F44: 0x6101, + 0x8F45: 0x62FE, + 0x8F46: 0x6D32, + 0x8F47: 0x79C0, + 0x8F48: 0x79CB, + 0x8F49: 0x7D42, + 0x8F4A: 0x7E4D, + 0x8F4B: 0x7FD2, + 0x8F4C: 0x81ED, + 0x8F4D: 0x821F, + 0x8F4E: 0x8490, + 0x8F4F: 0x8846, + 0x8F50: 0x8972, + 0x8F51: 0x8B90, + 0x8F52: 0x8E74, + 0x8F53: 0x8F2F, + 0x8F54: 0x9031, + 0x8F55: 0x914B, + 0x8F56: 0x916C, + 0x8F57: 0x96C6, + 0x8F58: 0x919C, + 0x8F59: 0x4EC0, + 0x8F5A: 0x4F4F, + 0x8F5B: 0x5145, + 0x8F5C: 0x5341, + 0x8F5D: 0x5F93, + 0x8F5E: 0x620E, + 0x8F5F: 0x67D4, + 0x8F60: 0x6C41, + 0x8F61: 0x6E0B, + 0x8F62: 0x7363, + 0x8F63: 0x7E26, + 0x8F64: 0x91CD, + 0x8F65: 0x9283, + 0x8F66: 0x53D4, + 0x8F67: 0x5919, + 0x8F68: 0x5BBF, + 0x8F69: 0x6DD1, + 0x8F6A: 0x795D, + 0x8F6B: 0x7E2E, + 0x8F6C: 0x7C9B, + 0x8F6D: 0x587E, + 0x8F6E: 0x719F, + 0x8F6F: 0x51FA, + 0x8F70: 0x8853, + 0x8F71: 0x8FF0, + 0x8F72: 0x4FCA, + 0x8F73: 0x5CFB, + 0x8F74: 0x6625, + 0x8F75: 0x77AC, + 0x8F76: 0x7AE3, + 0x8F77: 0x821C, + 0x8F78: 0x99FF, + 0x8F79: 0x51C6, + 0x8F7A: 0x5FAA, + 0x8F7B: 0x65EC, + 0x8F7C: 0x696F, + 0x8F7D: 0x6B89, + 0x8F7E: 0x6DF3, + 0x8F80: 0x6E96, + 0x8F81: 0x6F64, + 0x8F82: 0x76FE, + 0x8F83: 0x7D14, + 0x8F84: 0x5DE1, + 0x8F85: 0x9075, + 0x8F86: 0x9187, + 0x8F87: 0x9806, + 0x8F88: 0x51E6, + 0x8F89: 0x521D, + 0x8F8A: 0x6240, + 0x8F8B: 0x6691, + 0x8F8C: 0x66D9, + 0x8F8D: 0x6E1A, + 0x8F8E: 0x5EB6, + 0x8F8F: 0x7DD2, + 0x8F90: 0x7F72, + 0x8F91: 0x66F8, + 0x8F92: 0x85AF, + 0x8F93: 0x85F7, + 0x8F94: 0x8AF8, + 0x8F95: 0x52A9, + 0x8F96: 0x53D9, + 0x8F97: 0x5973, + 0x8F98: 0x5E8F, + 0x8F99: 0x5F90, + 0x8F9A: 0x6055, + 0x8F9B: 0x92E4, + 0x8F9C: 0x9664, + 0x8F9D: 0x50B7, + 0x8F9E: 0x511F, + 0x8F9F: 0x52DD, + 0x8FA0: 0x5320, + 0x8FA1: 0x5347, + 0x8FA2: 0x53EC, + 0x8FA3: 0x54E8, + 0x8FA4: 0x5546, + 0x8FA5: 0x5531, + 0x8FA6: 0x5617, + 0x8FA7: 0x5968, + 0x8FA8: 0x59BE, + 0x8FA9: 0x5A3C, + 0x8FAA: 0x5BB5, + 0x8FAB: 0x5C06, + 0x8FAC: 0x5C0F, + 0x8FAD: 0x5C11, + 0x8FAE: 0x5C1A, + 0x8FAF: 0x5E84, + 0x8FB0: 0x5E8A, + 0x8FB1: 0x5EE0, + 0x8FB2: 0x5F70, + 0x8FB3: 0x627F, + 0x8FB4: 0x6284, + 0x8FB5: 0x62DB, + 0x8FB6: 0x638C, + 0x8FB7: 0x6377, + 0x8FB8: 0x6607, + 0x8FB9: 0x660C, + 0x8FBA: 0x662D, + 0x8FBB: 0x6676, + 0x8FBC: 0x677E, + 0x8FBD: 0x68A2, + 0x8FBE: 0x6A1F, + 0x8FBF: 0x6A35, + 0x8FC0: 0x6CBC, + 0x8FC1: 0x6D88, + 0x8FC2: 0x6E09, + 0x8FC3: 0x6E58, + 0x8FC4: 0x713C, + 0x8FC5: 0x7126, + 0x8FC6: 0x7167, + 0x8FC7: 0x75C7, + 0x8FC8: 0x7701, + 0x8FC9: 0x785D, + 0x8FCA: 0x7901, + 0x8FCB: 0x7965, + 0x8FCC: 0x79F0, + 0x8FCD: 0x7AE0, + 0x8FCE: 0x7B11, + 0x8FCF: 0x7CA7, + 0x8FD0: 0x7D39, + 0x8FD1: 0x8096, + 0x8FD2: 0x83D6, + 0x8FD3: 0x848B, + 0x8FD4: 0x8549, + 0x8FD5: 0x885D, + 0x8FD6: 0x88F3, + 0x8FD7: 0x8A1F, + 0x8FD8: 0x8A3C, + 0x8FD9: 0x8A54, + 0x8FDA: 0x8A73, + 0x8FDB: 0x8C61, + 0x8FDC: 0x8CDE, + 0x8FDD: 0x91A4, + 0x8FDE: 0x9266, + 0x8FDF: 0x937E, + 0x8FE0: 0x9418, + 0x8FE1: 0x969C, + 0x8FE2: 0x9798, + 0x8FE3: 0x4E0A, + 0x8FE4: 0x4E08, + 0x8FE5: 0x4E1E, + 0x8FE6: 0x4E57, + 0x8FE7: 0x5197, + 0x8FE8: 0x5270, + 0x8FE9: 0x57CE, + 0x8FEA: 0x5834, + 0x8FEB: 0x58CC, + 0x8FEC: 0x5B22, + 0x8FED: 0x5E38, + 0x8FEE: 0x60C5, + 0x8FEF: 0x64FE, + 0x8FF0: 0x6761, + 0x8FF1: 0x6756, + 0x8FF2: 0x6D44, + 0x8FF3: 0x72B6, + 0x8FF4: 0x7573, + 0x8FF5: 0x7A63, + 0x8FF6: 0x84B8, + 0x8FF7: 0x8B72, + 0x8FF8: 0x91B8, + 0x8FF9: 0x9320, + 0x8FFA: 0x5631, + 0x8FFB: 0x57F4, + 0x8FFC: 0x98FE, + 0x9040: 0x62ED, + 0x9041: 0x690D, + 0x9042: 0x6B96, + 0x9043: 0x71ED, + 0x9044: 0x7E54, + 0x9045: 0x8077, + 0x9046: 0x8272, + 0x9047: 0x89E6, + 0x9048: 0x98DF, + 0x9049: 0x8755, + 0x904A: 0x8FB1, + 0x904B: 0x5C3B, + 0x904C: 0x4F38, + 0x904D: 0x4FE1, + 0x904E: 0x4FB5, + 0x904F: 0x5507, + 0x9050: 0x5A20, + 0x9051: 0x5BDD, + 0x9052: 0x5BE9, + 0x9053: 0x5FC3, + 0x9054: 0x614E, + 0x9055: 0x632F, + 0x9056: 0x65B0, + 0x9057: 0x664B, + 0x9058: 0x68EE, + 0x9059: 0x699B, + 0x905A: 0x6D78, + 0x905B: 0x6DF1, + 0x905C: 0x7533, + 0x905D: 0x75B9, + 0x905E: 0x771F, + 0x905F: 0x795E, + 0x9060: 0x79E6, + 0x9061: 0x7D33, + 0x9062: 0x81E3, + 0x9063: 0x82AF, + 0x9064: 0x85AA, + 0x9065: 0x89AA, + 0x9066: 0x8A3A, + 0x9067: 0x8EAB, + 0x9068: 0x8F9B, + 0x9069: 0x9032, + 0x906A: 0x91DD, + 0x906B: 0x9707, + 0x906C: 0x4EBA, + 0x906D: 0x4EC1, + 0x906E: 0x5203, + 0x906F: 0x5875, + 0x9070: 0x58EC, + 0x9071: 0x5C0B, + 0x9072: 0x751A, + 0x9073: 0x5C3D, + 0x9074: 0x814E, + 0x9075: 0x8A0A, + 0x9076: 0x8FC5, + 0x9077: 0x9663, + 0x9078: 0x976D, + 0x9079: 0x7B25, + 0x907A: 0x8ACF, + 0x907B: 0x9808, + 0x907C: 0x9162, + 0x907D: 0x56F3, + 0x907E: 0x53A8, + 0x9080: 0x9017, + 0x9081: 0x5439, + 0x9082: 0x5782, + 0x9083: 0x5E25, + 0x9084: 0x63A8, + 0x9085: 0x6C34, + 0x9086: 0x708A, + 0x9087: 0x7761, + 0x9088: 0x7C8B, + 0x9089: 0x7FE0, + 0x908A: 0x8870, + 0x908B: 0x9042, + 0x908C: 0x9154, + 0x908D: 0x9310, + 0x908E: 0x9318, + 0x908F: 0x968F, + 0x9090: 0x745E, + 0x9091: 0x9AC4, + 0x9092: 0x5D07, + 0x9093: 0x5D69, + 0x9094: 0x6570, + 0x9095: 0x67A2, + 0x9096: 0x8DA8, + 0x9097: 0x96DB, + 0x9098: 0x636E, + 0x9099: 0x6749, + 0x909A: 0x6919, + 0x909B: 0x83C5, + 0x909C: 0x9817, + 0x909D: 0x96C0, + 0x909E: 0x88FE, + 0x909F: 0x6F84, + 0x90A0: 0x647A, + 0x90A1: 0x5BF8, + 0x90A2: 0x4E16, + 0x90A3: 0x702C, + 0x90A4: 0x755D, + 0x90A5: 0x662F, + 0x90A6: 0x51C4, + 0x90A7: 0x5236, + 0x90A8: 0x52E2, + 0x90A9: 0x59D3, + 0x90AA: 0x5F81, + 0x90AB: 0x6027, + 0x90AC: 0x6210, + 0x90AD: 0x653F, + 0x90AE: 0x6574, + 0x90AF: 0x661F, + 0x90B0: 0x6674, + 0x90B1: 0x68F2, + 0x90B2: 0x6816, + 0x90B3: 0x6B63, + 0x90B4: 0x6E05, + 0x90B5: 0x7272, + 0x90B6: 0x751F, + 0x90B7: 0x76DB, + 0x90B8: 0x7CBE, + 0x90B9: 0x8056, + 0x90BA: 0x58F0, + 0x90BB: 0x88FD, + 0x90BC: 0x897F, + 0x90BD: 0x8AA0, + 0x90BE: 0x8A93, + 0x90BF: 0x8ACB, + 0x90C0: 0x901D, + 0x90C1: 0x9192, + 0x90C2: 0x9752, + 0x90C3: 0x9759, + 0x90C4: 0x6589, + 0x90C5: 0x7A0E, + 0x90C6: 0x8106, + 0x90C7: 0x96BB, + 0x90C8: 0x5E2D, + 0x90C9: 0x60DC, + 0x90CA: 0x621A, + 0x90CB: 0x65A5, + 0x90CC: 0x6614, + 0x90CD: 0x6790, + 0x90CE: 0x77F3, + 0x90CF: 0x7A4D, + 0x90D0: 0x7C4D, + 0x90D1: 0x7E3E, + 0x90D2: 0x810A, + 0x90D3: 0x8CAC, + 0x90D4: 0x8D64, + 0x90D5: 0x8DE1, + 0x90D6: 0x8E5F, + 0x90D7: 0x78A9, + 0x90D8: 0x5207, + 0x90D9: 0x62D9, + 0x90DA: 0x63A5, + 0x90DB: 0x6442, + 0x90DC: 0x6298, + 0x90DD: 0x8A2D, + 0x90DE: 0x7A83, + 0x90DF: 0x7BC0, + 0x90E0: 0x8AAC, + 0x90E1: 0x96EA, + 0x90E2: 0x7D76, + 0x90E3: 0x820C, + 0x90E4: 0x8749, + 0x90E5: 0x4ED9, + 0x90E6: 0x5148, + 0x90E7: 0x5343, + 0x90E8: 0x5360, + 0x90E9: 0x5BA3, + 0x90EA: 0x5C02, + 0x90EB: 0x5C16, + 0x90EC: 0x5DDD, + 0x90ED: 0x6226, + 0x90EE: 0x6247, + 0x90EF: 0x64B0, + 0x90F0: 0x6813, + 0x90F1: 0x6834, + 0x90F2: 0x6CC9, + 0x90F3: 0x6D45, + 0x90F4: 0x6D17, + 0x90F5: 0x67D3, + 0x90F6: 0x6F5C, + 0x90F7: 0x714E, + 0x90F8: 0x717D, + 0x90F9: 0x65CB, + 0x90FA: 0x7A7F, + 0x90FB: 0x7BAD, + 0x90FC: 0x7DDA, + 0x9140: 0x7E4A, + 0x9141: 0x7FA8, + 0x9142: 0x817A, + 0x9143: 0x821B, + 0x9144: 0x8239, + 0x9145: 0x85A6, + 0x9146: 0x8A6E, + 0x9147: 0x8CCE, + 0x9148: 0x8DF5, + 0x9149: 0x9078, + 0x914A: 0x9077, + 0x914B: 0x92AD, + 0x914C: 0x9291, + 0x914D: 0x9583, + 0x914E: 0x9BAE, + 0x914F: 0x524D, + 0x9150: 0x5584, + 0x9151: 0x6F38, + 0x9152: 0x7136, + 0x9153: 0x5168, + 0x9154: 0x7985, + 0x9155: 0x7E55, + 0x9156: 0x81B3, + 0x9157: 0x7CCE, + 0x9158: 0x564C, + 0x9159: 0x5851, + 0x915A: 0x5CA8, + 0x915B: 0x63AA, + 0x915C: 0x66FE, + 0x915D: 0x66FD, + 0x915E: 0x695A, + 0x915F: 0x72D9, + 0x9160: 0x758F, + 0x9161: 0x758E, + 0x9162: 0x790E, + 0x9163: 0x7956, + 0x9164: 0x79DF, + 0x9165: 0x7C97, + 0x9166: 0x7D20, + 0x9167: 0x7D44, + 0x9168: 0x8607, + 0x9169: 0x8A34, + 0x916A: 0x963B, + 0x916B: 0x9061, + 0x916C: 0x9F20, + 0x916D: 0x50E7, + 0x916E: 0x5275, + 0x916F: 0x53CC, + 0x9170: 0x53E2, + 0x9171: 0x5009, + 0x9172: 0x55AA, + 0x9173: 0x58EE, + 0x9174: 0x594F, + 0x9175: 0x723D, + 0x9176: 0x5B8B, + 0x9177: 0x5C64, + 0x9178: 0x531D, + 0x9179: 0x60E3, + 0x917A: 0x60F3, + 0x917B: 0x635C, + 0x917C: 0x6383, + 0x917D: 0x633F, + 0x917E: 0x63BB, + 0x9180: 0x64CD, + 0x9181: 0x65E9, + 0x9182: 0x66F9, + 0x9183: 0x5DE3, + 0x9184: 0x69CD, + 0x9185: 0x69FD, + 0x9186: 0x6F15, + 0x9187: 0x71E5, + 0x9188: 0x4E89, + 0x9189: 0x75E9, + 0x918A: 0x76F8, + 0x918B: 0x7A93, + 0x918C: 0x7CDF, + 0x918D: 0x7DCF, + 0x918E: 0x7D9C, + 0x918F: 0x8061, + 0x9190: 0x8349, + 0x9191: 0x8358, + 0x9192: 0x846C, + 0x9193: 0x84BC, + 0x9194: 0x85FB, + 0x9195: 0x88C5, + 0x9196: 0x8D70, + 0x9197: 0x9001, + 0x9198: 0x906D, + 0x9199: 0x9397, + 0x919A: 0x971C, + 0x919B: 0x9A12, + 0x919C: 0x50CF, + 0x919D: 0x5897, + 0x919E: 0x618E, + 0x919F: 0x81D3, + 0x91A0: 0x8535, + 0x91A1: 0x8D08, + 0x91A2: 0x9020, + 0x91A3: 0x4FC3, + 0x91A4: 0x5074, + 0x91A5: 0x5247, + 0x91A6: 0x5373, + 0x91A7: 0x606F, + 0x91A8: 0x6349, + 0x91A9: 0x675F, + 0x91AA: 0x6E2C, + 0x91AB: 0x8DB3, + 0x91AC: 0x901F, + 0x91AD: 0x4FD7, + 0x91AE: 0x5C5E, + 0x91AF: 0x8CCA, + 0x91B0: 0x65CF, + 0x91B1: 0x7D9A, + 0x91B2: 0x5352, + 0x91B3: 0x8896, + 0x91B4: 0x5176, + 0x91B5: 0x63C3, + 0x91B6: 0x5B58, + 0x91B7: 0x5B6B, + 0x91B8: 0x5C0A, + 0x91B9: 0x640D, + 0x91BA: 0x6751, + 0x91BB: 0x905C, + 0x91BC: 0x4ED6, + 0x91BD: 0x591A, + 0x91BE: 0x592A, + 0x91BF: 0x6C70, + 0x91C0: 0x8A51, + 0x91C1: 0x553E, + 0x91C2: 0x5815, + 0x91C3: 0x59A5, + 0x91C4: 0x60F0, + 0x91C5: 0x6253, + 0x91C6: 0x67C1, + 0x91C7: 0x8235, + 0x91C8: 0x6955, + 0x91C9: 0x9640, + 0x91CA: 0x99C4, + 0x91CB: 0x9A28, + 0x91CC: 0x4F53, + 0x91CD: 0x5806, + 0x91CE: 0x5BFE, + 0x91CF: 0x8010, + 0x91D0: 0x5CB1, + 0x91D1: 0x5E2F, + 0x91D2: 0x5F85, + 0x91D3: 0x6020, + 0x91D4: 0x614B, + 0x91D5: 0x6234, + 0x91D6: 0x66FF, + 0x91D7: 0x6CF0, + 0x91D8: 0x6EDE, + 0x91D9: 0x80CE, + 0x91DA: 0x817F, + 0x91DB: 0x82D4, + 0x91DC: 0x888B, + 0x91DD: 0x8CB8, + 0x91DE: 0x9000, + 0x91DF: 0x902E, + 0x91E0: 0x968A, + 0x91E1: 0x9EDB, + 0x91E2: 0x9BDB, + 0x91E3: 0x4EE3, + 0x91E4: 0x53F0, + 0x91E5: 0x5927, + 0x91E6: 0x7B2C, + 0x91E7: 0x918D, + 0x91E8: 0x984C, + 0x91E9: 0x9DF9, + 0x91EA: 0x6EDD, + 0x91EB: 0x7027, + 0x91EC: 0x5353, + 0x91ED: 0x5544, + 0x91EE: 0x5B85, + 0x91EF: 0x6258, + 0x91F0: 0x629E, + 0x91F1: 0x62D3, + 0x91F2: 0x6CA2, + 0x91F3: 0x6FEF, + 0x91F4: 0x7422, + 0x91F5: 0x8A17, + 0x91F6: 0x9438, + 0x91F7: 0x6FC1, + 0x91F8: 0x8AFE, + 0x91F9: 0x8338, + 0x91FA: 0x51E7, + 0x91FB: 0x86F8, + 0x91FC: 0x53EA, + 0x9240: 0x53E9, + 0x9241: 0x4F46, + 0x9242: 0x9054, + 0x9243: 0x8FB0, + 0x9244: 0x596A, + 0x9245: 0x8131, + 0x9246: 0x5DFD, + 0x9247: 0x7AEA, + 0x9248: 0x8FBF, + 0x9249: 0x68DA, + 0x924A: 0x8C37, + 0x924B: 0x72F8, + 0x924C: 0x9C48, + 0x924D: 0x6A3D, + 0x924E: 0x8AB0, + 0x924F: 0x4E39, + 0x9250: 0x5358, + 0x9251: 0x5606, + 0x9252: 0x5766, + 0x9253: 0x62C5, + 0x9254: 0x63A2, + 0x9255: 0x65E6, + 0x9256: 0x6B4E, + 0x9257: 0x6DE1, + 0x9258: 0x6E5B, + 0x9259: 0x70AD, + 0x925A: 0x77ED, + 0x925B: 0x7AEF, + 0x925C: 0x7BAA, + 0x925D: 0x7DBB, + 0x925E: 0x803D, + 0x925F: 0x80C6, + 0x9260: 0x86CB, + 0x9261: 0x8A95, + 0x9262: 0x935B, + 0x9263: 0x56E3, + 0x9264: 0x58C7, + 0x9265: 0x5F3E, + 0x9266: 0x65AD, + 0x9267: 0x6696, + 0x9268: 0x6A80, + 0x9269: 0x6BB5, + 0x926A: 0x7537, + 0x926B: 0x8AC7, + 0x926C: 0x5024, + 0x926D: 0x77E5, + 0x926E: 0x5730, + 0x926F: 0x5F1B, + 0x9270: 0x6065, + 0x9271: 0x667A, + 0x9272: 0x6C60, + 0x9273: 0x75F4, + 0x9274: 0x7A1A, + 0x9275: 0x7F6E, + 0x9276: 0x81F4, + 0x9277: 0x8718, + 0x9278: 0x9045, + 0x9279: 0x99B3, + 0x927A: 0x7BC9, + 0x927B: 0x755C, + 0x927C: 0x7AF9, + 0x927D: 0x7B51, + 0x927E: 0x84C4, + 0x9280: 0x9010, + 0x9281: 0x79E9, + 0x9282: 0x7A92, + 0x9283: 0x8336, + 0x9284: 0x5AE1, + 0x9285: 0x7740, + 0x9286: 0x4E2D, + 0x9287: 0x4EF2, + 0x9288: 0x5B99, + 0x9289: 0x5FE0, + 0x928A: 0x62BD, + 0x928B: 0x663C, + 0x928C: 0x67F1, + 0x928D: 0x6CE8, + 0x928E: 0x866B, + 0x928F: 0x8877, + 0x9290: 0x8A3B, + 0x9291: 0x914E, + 0x9292: 0x92F3, + 0x9293: 0x99D0, + 0x9294: 0x6A17, + 0x9295: 0x7026, + 0x9296: 0x732A, + 0x9297: 0x82E7, + 0x9298: 0x8457, + 0x9299: 0x8CAF, + 0x929A: 0x4E01, + 0x929B: 0x5146, + 0x929C: 0x51CB, + 0x929D: 0x558B, + 0x929E: 0x5BF5, + 0x929F: 0x5E16, + 0x92A0: 0x5E33, + 0x92A1: 0x5E81, + 0x92A2: 0x5F14, + 0x92A3: 0x5F35, + 0x92A4: 0x5F6B, + 0x92A5: 0x5FB4, + 0x92A6: 0x61F2, + 0x92A7: 0x6311, + 0x92A8: 0x66A2, + 0x92A9: 0x671D, + 0x92AA: 0x6F6E, + 0x92AB: 0x7252, + 0x92AC: 0x753A, + 0x92AD: 0x773A, + 0x92AE: 0x8074, + 0x92AF: 0x8139, + 0x92B0: 0x8178, + 0x92B1: 0x8776, + 0x92B2: 0x8ABF, + 0x92B3: 0x8ADC, + 0x92B4: 0x8D85, + 0x92B5: 0x8DF3, + 0x92B6: 0x929A, + 0x92B7: 0x9577, + 0x92B8: 0x9802, + 0x92B9: 0x9CE5, + 0x92BA: 0x52C5, + 0x92BB: 0x6357, + 0x92BC: 0x76F4, + 0x92BD: 0x6715, + 0x92BE: 0x6C88, + 0x92BF: 0x73CD, + 0x92C0: 0x8CC3, + 0x92C1: 0x93AE, + 0x92C2: 0x9673, + 0x92C3: 0x6D25, + 0x92C4: 0x589C, + 0x92C5: 0x690E, + 0x92C6: 0x69CC, + 0x92C7: 0x8FFD, + 0x92C8: 0x939A, + 0x92C9: 0x75DB, + 0x92CA: 0x901A, + 0x92CB: 0x585A, + 0x92CC: 0x6802, + 0x92CD: 0x63B4, + 0x92CE: 0x69FB, + 0x92CF: 0x4F43, + 0x92D0: 0x6F2C, + 0x92D1: 0x67D8, + 0x92D2: 0x8FBB, + 0x92D3: 0x8526, + 0x92D4: 0x7DB4, + 0x92D5: 0x9354, + 0x92D6: 0x693F, + 0x92D7: 0x6F70, + 0x92D8: 0x576A, + 0x92D9: 0x58F7, + 0x92DA: 0x5B2C, + 0x92DB: 0x7D2C, + 0x92DC: 0x722A, + 0x92DD: 0x540A, + 0x92DE: 0x91E3, + 0x92DF: 0x9DB4, + 0x92E0: 0x4EAD, + 0x92E1: 0x4F4E, + 0x92E2: 0x505C, + 0x92E3: 0x5075, + 0x92E4: 0x5243, + 0x92E5: 0x8C9E, + 0x92E6: 0x5448, + 0x92E7: 0x5824, + 0x92E8: 0x5B9A, + 0x92E9: 0x5E1D, + 0x92EA: 0x5E95, + 0x92EB: 0x5EAD, + 0x92EC: 0x5EF7, + 0x92ED: 0x5F1F, + 0x92EE: 0x608C, + 0x92EF: 0x62B5, + 0x92F0: 0x633A, + 0x92F1: 0x63D0, + 0x92F2: 0x68AF, + 0x92F3: 0x6C40, + 0x92F4: 0x7887, + 0x92F5: 0x798E, + 0x92F6: 0x7A0B, + 0x92F7: 0x7DE0, + 0x92F8: 0x8247, + 0x92F9: 0x8A02, + 0x92FA: 0x8AE6, + 0x92FB: 0x8E44, + 0x92FC: 0x9013, + 0x9340: 0x90B8, + 0x9341: 0x912D, + 0x9342: 0x91D8, + 0x9343: 0x9F0E, + 0x9344: 0x6CE5, + 0x9345: 0x6458, + 0x9346: 0x64E2, + 0x9347: 0x6575, + 0x9348: 0x6EF4, + 0x9349: 0x7684, + 0x934A: 0x7B1B, + 0x934B: 0x9069, + 0x934C: 0x93D1, + 0x934D: 0x6EBA, + 0x934E: 0x54F2, + 0x934F: 0x5FB9, + 0x9350: 0x64A4, + 0x9351: 0x8F4D, + 0x9352: 0x8FED, + 0x9353: 0x9244, + 0x9354: 0x5178, + 0x9355: 0x586B, + 0x9356: 0x5929, + 0x9357: 0x5C55, + 0x9358: 0x5E97, + 0x9359: 0x6DFB, + 0x935A: 0x7E8F, + 0x935B: 0x751C, + 0x935C: 0x8CBC, + 0x935D: 0x8EE2, + 0x935E: 0x985B, + 0x935F: 0x70B9, + 0x9360: 0x4F1D, + 0x9361: 0x6BBF, + 0x9362: 0x6FB1, + 0x9363: 0x7530, + 0x9364: 0x96FB, + 0x9365: 0x514E, + 0x9366: 0x5410, + 0x9367: 0x5835, + 0x9368: 0x5857, + 0x9369: 0x59AC, + 0x936A: 0x5C60, + 0x936B: 0x5F92, + 0x936C: 0x6597, + 0x936D: 0x675C, + 0x936E: 0x6E21, + 0x936F: 0x767B, + 0x9370: 0x83DF, + 0x9371: 0x8CED, + 0x9372: 0x9014, + 0x9373: 0x90FD, + 0x9374: 0x934D, + 0x9375: 0x7825, + 0x9376: 0x783A, + 0x9377: 0x52AA, + 0x9378: 0x5EA6, + 0x9379: 0x571F, + 0x937A: 0x5974, + 0x937B: 0x6012, + 0x937C: 0x5012, + 0x937D: 0x515A, + 0x937E: 0x51AC, + 0x9380: 0x51CD, + 0x9381: 0x5200, + 0x9382: 0x5510, + 0x9383: 0x5854, + 0x9384: 0x5858, + 0x9385: 0x5957, + 0x9386: 0x5B95, + 0x9387: 0x5CF6, + 0x9388: 0x5D8B, + 0x9389: 0x60BC, + 0x938A: 0x6295, + 0x938B: 0x642D, + 0x938C: 0x6771, + 0x938D: 0x6843, + 0x938E: 0x68BC, + 0x938F: 0x68DF, + 0x9390: 0x76D7, + 0x9391: 0x6DD8, + 0x9392: 0x6E6F, + 0x9393: 0x6D9B, + 0x9394: 0x706F, + 0x9395: 0x71C8, + 0x9396: 0x5F53, + 0x9397: 0x75D8, + 0x9398: 0x7977, + 0x9399: 0x7B49, + 0x939A: 0x7B54, + 0x939B: 0x7B52, + 0x939C: 0x7CD6, + 0x939D: 0x7D71, + 0x939E: 0x5230, + 0x939F: 0x8463, + 0x93A0: 0x8569, + 0x93A1: 0x85E4, + 0x93A2: 0x8A0E, + 0x93A3: 0x8B04, + 0x93A4: 0x8C46, + 0x93A5: 0x8E0F, + 0x93A6: 0x9003, + 0x93A7: 0x900F, + 0x93A8: 0x9419, + 0x93A9: 0x9676, + 0x93AA: 0x982D, + 0x93AB: 0x9A30, + 0x93AC: 0x95D8, + 0x93AD: 0x50CD, + 0x93AE: 0x52D5, + 0x93AF: 0x540C, + 0x93B0: 0x5802, + 0x93B1: 0x5C0E, + 0x93B2: 0x61A7, + 0x93B3: 0x649E, + 0x93B4: 0x6D1E, + 0x93B5: 0x77B3, + 0x93B6: 0x7AE5, + 0x93B7: 0x80F4, + 0x93B8: 0x8404, + 0x93B9: 0x9053, + 0x93BA: 0x9285, + 0x93BB: 0x5CE0, + 0x93BC: 0x9D07, + 0x93BD: 0x533F, + 0x93BE: 0x5F97, + 0x93BF: 0x5FB3, + 0x93C0: 0x6D9C, + 0x93C1: 0x7279, + 0x93C2: 0x7763, + 0x93C3: 0x79BF, + 0x93C4: 0x7BE4, + 0x93C5: 0x6BD2, + 0x93C6: 0x72EC, + 0x93C7: 0x8AAD, + 0x93C8: 0x6803, + 0x93C9: 0x6A61, + 0x93CA: 0x51F8, + 0x93CB: 0x7A81, + 0x93CC: 0x6934, + 0x93CD: 0x5C4A, + 0x93CE: 0x9CF6, + 0x93CF: 0x82EB, + 0x93D0: 0x5BC5, + 0x93D1: 0x9149, + 0x93D2: 0x701E, + 0x93D3: 0x5678, + 0x93D4: 0x5C6F, + 0x93D5: 0x60C7, + 0x93D6: 0x6566, + 0x93D7: 0x6C8C, + 0x93D8: 0x8C5A, + 0x93D9: 0x9041, + 0x93DA: 0x9813, + 0x93DB: 0x5451, + 0x93DC: 0x66C7, + 0x93DD: 0x920D, + 0x93DE: 0x5948, + 0x93DF: 0x90A3, + 0x93E0: 0x5185, + 0x93E1: 0x4E4D, + 0x93E2: 0x51EA, + 0x93E3: 0x8599, + 0x93E4: 0x8B0E, + 0x93E5: 0x7058, + 0x93E6: 0x637A, + 0x93E7: 0x934B, + 0x93E8: 0x6962, + 0x93E9: 0x99B4, + 0x93EA: 0x7E04, + 0x93EB: 0x7577, + 0x93EC: 0x5357, + 0x93ED: 0x6960, + 0x93EE: 0x8EDF, + 0x93EF: 0x96E3, + 0x93F0: 0x6C5D, + 0x93F1: 0x4E8C, + 0x93F2: 0x5C3C, + 0x93F3: 0x5F10, + 0x93F4: 0x8FE9, + 0x93F5: 0x5302, + 0x93F6: 0x8CD1, + 0x93F7: 0x8089, + 0x93F8: 0x8679, + 0x93F9: 0x5EFF, + 0x93FA: 0x65E5, + 0x93FB: 0x4E73, + 0x93FC: 0x5165, + 0x9440: 0x5982, + 0x9441: 0x5C3F, + 0x9442: 0x97EE, + 0x9443: 0x4EFB, + 0x9444: 0x598A, + 0x9445: 0x5FCD, + 0x9446: 0x8A8D, + 0x9447: 0x6FE1, + 0x9448: 0x79B0, + 0x9449: 0x7962, + 0x944A: 0x5BE7, + 0x944B: 0x8471, + 0x944C: 0x732B, + 0x944D: 0x71B1, + 0x944E: 0x5E74, + 0x944F: 0x5FF5, + 0x9450: 0x637B, + 0x9451: 0x649A, + 0x9452: 0x71C3, + 0x9453: 0x7C98, + 0x9454: 0x4E43, + 0x9455: 0x5EFC, + 0x9456: 0x4E4B, + 0x9457: 0x57DC, + 0x9458: 0x56A2, + 0x9459: 0x60A9, + 0x945A: 0x6FC3, + 0x945B: 0x7D0D, + 0x945C: 0x80FD, + 0x945D: 0x8133, + 0x945E: 0x81BF, + 0x945F: 0x8FB2, + 0x9460: 0x8997, + 0x9461: 0x86A4, + 0x9462: 0x5DF4, + 0x9463: 0x628A, + 0x9464: 0x64AD, + 0x9465: 0x8987, + 0x9466: 0x6777, + 0x9467: 0x6CE2, + 0x9468: 0x6D3E, + 0x9469: 0x7436, + 0x946A: 0x7834, + 0x946B: 0x5A46, + 0x946C: 0x7F75, + 0x946D: 0x82AD, + 0x946E: 0x99AC, + 0x946F: 0x4FF3, + 0x9470: 0x5EC3, + 0x9471: 0x62DD, + 0x9472: 0x6392, + 0x9473: 0x6557, + 0x9474: 0x676F, + 0x9475: 0x76C3, + 0x9476: 0x724C, + 0x9477: 0x80CC, + 0x9478: 0x80BA, + 0x9479: 0x8F29, + 0x947A: 0x914D, + 0x947B: 0x500D, + 0x947C: 0x57F9, + 0x947D: 0x5A92, + 0x947E: 0x6885, + 0x9480: 0x6973, + 0x9481: 0x7164, + 0x9482: 0x72FD, + 0x9483: 0x8CB7, + 0x9484: 0x58F2, + 0x9485: 0x8CE0, + 0x9486: 0x966A, + 0x9487: 0x9019, + 0x9488: 0x877F, + 0x9489: 0x79E4, + 0x948A: 0x77E7, + 0x948B: 0x8429, + 0x948C: 0x4F2F, + 0x948D: 0x5265, + 0x948E: 0x535A, + 0x948F: 0x62CD, + 0x9490: 0x67CF, + 0x9491: 0x6CCA, + 0x9492: 0x767D, + 0x9493: 0x7B94, + 0x9494: 0x7C95, + 0x9495: 0x8236, + 0x9496: 0x8584, + 0x9497: 0x8FEB, + 0x9498: 0x66DD, + 0x9499: 0x6F20, + 0x949A: 0x7206, + 0x949B: 0x7E1B, + 0x949C: 0x83AB, + 0x949D: 0x99C1, + 0x949E: 0x9EA6, + 0x949F: 0x51FD, + 0x94A0: 0x7BB1, + 0x94A1: 0x7872, + 0x94A2: 0x7BB8, + 0x94A3: 0x8087, + 0x94A4: 0x7B48, + 0x94A5: 0x6AE8, + 0x94A6: 0x5E61, + 0x94A7: 0x808C, + 0x94A8: 0x7551, + 0x94A9: 0x7560, + 0x94AA: 0x516B, + 0x94AB: 0x9262, + 0x94AC: 0x6E8C, + 0x94AD: 0x767A, + 0x94AE: 0x9197, + 0x94AF: 0x9AEA, + 0x94B0: 0x4F10, + 0x94B1: 0x7F70, + 0x94B2: 0x629C, + 0x94B3: 0x7B4F, + 0x94B4: 0x95A5, + 0x94B5: 0x9CE9, + 0x94B6: 0x567A, + 0x94B7: 0x5859, + 0x94B8: 0x86E4, + 0x94B9: 0x96BC, + 0x94BA: 0x4F34, + 0x94BB: 0x5224, + 0x94BC: 0x534A, + 0x94BD: 0x53CD, + 0x94BE: 0x53DB, + 0x94BF: 0x5E06, + 0x94C0: 0x642C, + 0x94C1: 0x6591, + 0x94C2: 0x677F, + 0x94C3: 0x6C3E, + 0x94C4: 0x6C4E, + 0x94C5: 0x7248, + 0x94C6: 0x72AF, + 0x94C7: 0x73ED, + 0x94C8: 0x7554, + 0x94C9: 0x7E41, + 0x94CA: 0x822C, + 0x94CB: 0x85E9, + 0x94CC: 0x8CA9, + 0x94CD: 0x7BC4, + 0x94CE: 0x91C6, + 0x94CF: 0x7169, + 0x94D0: 0x9812, + 0x94D1: 0x98EF, + 0x94D2: 0x633D, + 0x94D3: 0x6669, + 0x94D4: 0x756A, + 0x94D5: 0x76E4, + 0x94D6: 0x78D0, + 0x94D7: 0x8543, + 0x94D8: 0x86EE, + 0x94D9: 0x532A, + 0x94DA: 0x5351, + 0x94DB: 0x5426, + 0x94DC: 0x5983, + 0x94DD: 0x5E87, + 0x94DE: 0x5F7C, + 0x94DF: 0x60B2, + 0x94E0: 0x6249, + 0x94E1: 0x6279, + 0x94E2: 0x62AB, + 0x94E3: 0x6590, + 0x94E4: 0x6BD4, + 0x94E5: 0x6CCC, + 0x94E6: 0x75B2, + 0x94E7: 0x76AE, + 0x94E8: 0x7891, + 0x94E9: 0x79D8, + 0x94EA: 0x7DCB, + 0x94EB: 0x7F77, + 0x94EC: 0x80A5, + 0x94ED: 0x88AB, + 0x94EE: 0x8AB9, + 0x94EF: 0x8CBB, + 0x94F0: 0x907F, + 0x94F1: 0x975E, + 0x94F2: 0x98DB, + 0x94F3: 0x6A0B, + 0x94F4: 0x7C38, + 0x94F5: 0x5099, + 0x94F6: 0x5C3E, + 0x94F7: 0x5FAE, + 0x94F8: 0x6787, + 0x94F9: 0x6BD8, + 0x94FA: 0x7435, + 0x94FB: 0x7709, + 0x94FC: 0x7F8E, + 0x9540: 0x9F3B, + 0x9541: 0x67CA, + 0x9542: 0x7A17, + 0x9543: 0x5339, + 0x9544: 0x758B, + 0x9545: 0x9AED, + 0x9546: 0x5F66, + 0x9547: 0x819D, + 0x9548: 0x83F1, + 0x9549: 0x8098, + 0x954A: 0x5F3C, + 0x954B: 0x5FC5, + 0x954C: 0x7562, + 0x954D: 0x7B46, + 0x954E: 0x903C, + 0x954F: 0x6867, + 0x9550: 0x59EB, + 0x9551: 0x5A9B, + 0x9552: 0x7D10, + 0x9553: 0x767E, + 0x9554: 0x8B2C, + 0x9555: 0x4FF5, + 0x9556: 0x5F6A, + 0x9557: 0x6A19, + 0x9558: 0x6C37, + 0x9559: 0x6F02, + 0x955A: 0x74E2, + 0x955B: 0x7968, + 0x955C: 0x8868, + 0x955D: 0x8A55, + 0x955E: 0x8C79, + 0x955F: 0x5EDF, + 0x9560: 0x63CF, + 0x9561: 0x75C5, + 0x9562: 0x79D2, + 0x9563: 0x82D7, + 0x9564: 0x9328, + 0x9565: 0x92F2, + 0x9566: 0x849C, + 0x9567: 0x86ED, + 0x9568: 0x9C2D, + 0x9569: 0x54C1, + 0x956A: 0x5F6C, + 0x956B: 0x658C, + 0x956C: 0x6D5C, + 0x956D: 0x7015, + 0x956E: 0x8CA7, + 0x956F: 0x8CD3, + 0x9570: 0x983B, + 0x9571: 0x654F, + 0x9572: 0x74F6, + 0x9573: 0x4E0D, + 0x9574: 0x4ED8, + 0x9575: 0x57E0, + 0x9576: 0x592B, + 0x9577: 0x5A66, + 0x9578: 0x5BCC, + 0x9579: 0x51A8, + 0x957A: 0x5E03, + 0x957B: 0x5E9C, + 0x957C: 0x6016, + 0x957D: 0x6276, + 0x957E: 0x6577, + 0x9580: 0x65A7, + 0x9581: 0x666E, + 0x9582: 0x6D6E, + 0x9583: 0x7236, + 0x9584: 0x7B26, + 0x9585: 0x8150, + 0x9586: 0x819A, + 0x9587: 0x8299, + 0x9588: 0x8B5C, + 0x9589: 0x8CA0, + 0x958A: 0x8CE6, + 0x958B: 0x8D74, + 0x958C: 0x961C, + 0x958D: 0x9644, + 0x958E: 0x4FAE, + 0x958F: 0x64AB, + 0x9590: 0x6B66, + 0x9591: 0x821E, + 0x9592: 0x8461, + 0x9593: 0x856A, + 0x9594: 0x90E8, + 0x9595: 0x5C01, + 0x9596: 0x6953, + 0x9597: 0x98A8, + 0x9598: 0x847A, + 0x9599: 0x8557, + 0x959A: 0x4F0F, + 0x959B: 0x526F, + 0x959C: 0x5FA9, + 0x959D: 0x5E45, + 0x959E: 0x670D, + 0x959F: 0x798F, + 0x95A0: 0x8179, + 0x95A1: 0x8907, + 0x95A2: 0x8986, + 0x95A3: 0x6DF5, + 0x95A4: 0x5F17, + 0x95A5: 0x6255, + 0x95A6: 0x6CB8, + 0x95A7: 0x4ECF, + 0x95A8: 0x7269, + 0x95A9: 0x9B92, + 0x95AA: 0x5206, + 0x95AB: 0x543B, + 0x95AC: 0x5674, + 0x95AD: 0x58B3, + 0x95AE: 0x61A4, + 0x95AF: 0x626E, + 0x95B0: 0x711A, + 0x95B1: 0x596E, + 0x95B2: 0x7C89, + 0x95B3: 0x7CDE, + 0x95B4: 0x7D1B, + 0x95B5: 0x96F0, + 0x95B6: 0x6587, + 0x95B7: 0x805E, + 0x95B8: 0x4E19, + 0x95B9: 0x4F75, + 0x95BA: 0x5175, + 0x95BB: 0x5840, + 0x95BC: 0x5E63, + 0x95BD: 0x5E73, + 0x95BE: 0x5F0A, + 0x95BF: 0x67C4, + 0x95C0: 0x4E26, + 0x95C1: 0x853D, + 0x95C2: 0x9589, + 0x95C3: 0x965B, + 0x95C4: 0x7C73, + 0x95C5: 0x9801, + 0x95C6: 0x50FB, + 0x95C7: 0x58C1, + 0x95C8: 0x7656, + 0x95C9: 0x78A7, + 0x95CA: 0x5225, + 0x95CB: 0x77A5, + 0x95CC: 0x8511, + 0x95CD: 0x7B86, + 0x95CE: 0x504F, + 0x95CF: 0x5909, + 0x95D0: 0x7247, + 0x95D1: 0x7BC7, + 0x95D2: 0x7DE8, + 0x95D3: 0x8FBA, + 0x95D4: 0x8FD4, + 0x95D5: 0x904D, + 0x95D6: 0x4FBF, + 0x95D7: 0x52C9, + 0x95D8: 0x5A29, + 0x95D9: 0x5F01, + 0x95DA: 0x97AD, + 0x95DB: 0x4FDD, + 0x95DC: 0x8217, + 0x95DD: 0x92EA, + 0x95DE: 0x5703, + 0x95DF: 0x6355, + 0x95E0: 0x6B69, + 0x95E1: 0x752B, + 0x95E2: 0x88DC, + 0x95E3: 0x8F14, + 0x95E4: 0x7A42, + 0x95E5: 0x52DF, + 0x95E6: 0x5893, + 0x95E7: 0x6155, + 0x95E8: 0x620A, + 0x95E9: 0x66AE, + 0x95EA: 0x6BCD, + 0x95EB: 0x7C3F, + 0x95EC: 0x83E9, + 0x95ED: 0x5023, + 0x95EE: 0x4FF8, + 0x95EF: 0x5305, + 0x95F0: 0x5446, + 0x95F1: 0x5831, + 0x95F2: 0x5949, + 0x95F3: 0x5B9D, + 0x95F4: 0x5CF0, + 0x95F5: 0x5CEF, + 0x95F6: 0x5D29, + 0x95F7: 0x5E96, + 0x95F8: 0x62B1, + 0x95F9: 0x6367, + 0x95FA: 0x653E, + 0x95FB: 0x65B9, + 0x95FC: 0x670B, + 0x9640: 0x6CD5, + 0x9641: 0x6CE1, + 0x9642: 0x70F9, + 0x9643: 0x7832, + 0x9644: 0x7E2B, + 0x9645: 0x80DE, + 0x9646: 0x82B3, + 0x9647: 0x840C, + 0x9648: 0x84EC, + 0x9649: 0x8702, + 0x964A: 0x8912, + 0x964B: 0x8A2A, + 0x964C: 0x8C4A, + 0x964D: 0x90A6, + 0x964E: 0x92D2, + 0x964F: 0x98FD, + 0x9650: 0x9CF3, + 0x9651: 0x9D6C, + 0x9652: 0x4E4F, + 0x9653: 0x4EA1, + 0x9654: 0x508D, + 0x9655: 0x5256, + 0x9656: 0x574A, + 0x9657: 0x59A8, + 0x9658: 0x5E3D, + 0x9659: 0x5FD8, + 0x965A: 0x5FD9, + 0x965B: 0x623F, + 0x965C: 0x66B4, + 0x965D: 0x671B, + 0x965E: 0x67D0, + 0x965F: 0x68D2, + 0x9660: 0x5192, + 0x9661: 0x7D21, + 0x9662: 0x80AA, + 0x9663: 0x81A8, + 0x9664: 0x8B00, + 0x9665: 0x8C8C, + 0x9666: 0x8CBF, + 0x9667: 0x927E, + 0x9668: 0x9632, + 0x9669: 0x5420, + 0x966A: 0x982C, + 0x966B: 0x5317, + 0x966C: 0x50D5, + 0x966D: 0x535C, + 0x966E: 0x58A8, + 0x966F: 0x64B2, + 0x9670: 0x6734, + 0x9671: 0x7267, + 0x9672: 0x7766, + 0x9673: 0x7A46, + 0x9674: 0x91E6, + 0x9675: 0x52C3, + 0x9676: 0x6CA1, + 0x9677: 0x6B86, + 0x9678: 0x5800, + 0x9679: 0x5E4C, + 0x967A: 0x5954, + 0x967B: 0x672C, + 0x967C: 0x7FFB, + 0x967D: 0x51E1, + 0x967E: 0x76C6, + 0x9680: 0x6469, + 0x9681: 0x78E8, + 0x9682: 0x9B54, + 0x9683: 0x9EBB, + 0x9684: 0x57CB, + 0x9685: 0x59B9, + 0x9686: 0x6627, + 0x9687: 0x679A, + 0x9688: 0x6BCE, + 0x9689: 0x54E9, + 0x968A: 0x69D9, + 0x968B: 0x5E55, + 0x968C: 0x819C, + 0x968D: 0x6795, + 0x968E: 0x9BAA, + 0x968F: 0x67FE, + 0x9690: 0x9C52, + 0x9691: 0x685D, + 0x9692: 0x4EA6, + 0x9693: 0x4FE3, + 0x9694: 0x53C8, + 0x9695: 0x62B9, + 0x9696: 0x672B, + 0x9697: 0x6CAB, + 0x9698: 0x8FC4, + 0x9699: 0x4FAD, + 0x969A: 0x7E6D, + 0x969B: 0x9EBF, + 0x969C: 0x4E07, + 0x969D: 0x6162, + 0x969E: 0x6E80, + 0x969F: 0x6F2B, + 0x96A0: 0x8513, + 0x96A1: 0x5473, + 0x96A2: 0x672A, + 0x96A3: 0x9B45, + 0x96A4: 0x5DF3, + 0x96A5: 0x7B95, + 0x96A6: 0x5CAC, + 0x96A7: 0x5BC6, + 0x96A8: 0x871C, + 0x96A9: 0x6E4A, + 0x96AA: 0x84D1, + 0x96AB: 0x7A14, + 0x96AC: 0x8108, + 0x96AD: 0x5999, + 0x96AE: 0x7C8D, + 0x96AF: 0x6C11, + 0x96B0: 0x7720, + 0x96B1: 0x52D9, + 0x96B2: 0x5922, + 0x96B3: 0x7121, + 0x96B4: 0x725F, + 0x96B5: 0x77DB, + 0x96B6: 0x9727, + 0x96B7: 0x9D61, + 0x96B8: 0x690B, + 0x96B9: 0x5A7F, + 0x96BA: 0x5A18, + 0x96BB: 0x51A5, + 0x96BC: 0x540D, + 0x96BD: 0x547D, + 0x96BE: 0x660E, + 0x96BF: 0x76DF, + 0x96C0: 0x8FF7, + 0x96C1: 0x9298, + 0x96C2: 0x9CF4, + 0x96C3: 0x59EA, + 0x96C4: 0x725D, + 0x96C5: 0x6EC5, + 0x96C6: 0x514D, + 0x96C7: 0x68C9, + 0x96C8: 0x7DBF, + 0x96C9: 0x7DEC, + 0x96CA: 0x9762, + 0x96CB: 0x9EBA, + 0x96CC: 0x6478, + 0x96CD: 0x6A21, + 0x96CE: 0x8302, + 0x96CF: 0x5984, + 0x96D0: 0x5B5F, + 0x96D1: 0x6BDB, + 0x96D2: 0x731B, + 0x96D3: 0x76F2, + 0x96D4: 0x7DB2, + 0x96D5: 0x8017, + 0x96D6: 0x8499, + 0x96D7: 0x5132, + 0x96D8: 0x6728, + 0x96D9: 0x9ED9, + 0x96DA: 0x76EE, + 0x96DB: 0x6762, + 0x96DC: 0x52FF, + 0x96DD: 0x9905, + 0x96DE: 0x5C24, + 0x96DF: 0x623B, + 0x96E0: 0x7C7E, + 0x96E1: 0x8CB0, + 0x96E2: 0x554F, + 0x96E3: 0x60B6, + 0x96E4: 0x7D0B, + 0x96E5: 0x9580, + 0x96E6: 0x5301, + 0x96E7: 0x4E5F, + 0x96E8: 0x51B6, + 0x96E9: 0x591C, + 0x96EA: 0x723A, + 0x96EB: 0x8036, + 0x96EC: 0x91CE, + 0x96ED: 0x5F25, + 0x96EE: 0x77E2, + 0x96EF: 0x5384, + 0x96F0: 0x5F79, + 0x96F1: 0x7D04, + 0x96F2: 0x85AC, + 0x96F3: 0x8A33, + 0x96F4: 0x8E8D, + 0x96F5: 0x9756, + 0x96F6: 0x67F3, + 0x96F7: 0x85AE, + 0x96F8: 0x9453, + 0x96F9: 0x6109, + 0x96FA: 0x6108, + 0x96FB: 0x6CB9, + 0x96FC: 0x7652, + 0x9740: 0x8AED, + 0x9741: 0x8F38, + 0x9742: 0x552F, + 0x9743: 0x4F51, + 0x9744: 0x512A, + 0x9745: 0x52C7, + 0x9746: 0x53CB, + 0x9747: 0x5BA5, + 0x9748: 0x5E7D, + 0x9749: 0x60A0, + 0x974A: 0x6182, + 0x974B: 0x63D6, + 0x974C: 0x6709, + 0x974D: 0x67DA, + 0x974E: 0x6E67, + 0x974F: 0x6D8C, + 0x9750: 0x7336, + 0x9751: 0x7337, + 0x9752: 0x7531, + 0x9753: 0x7950, + 0x9754: 0x88D5, + 0x9755: 0x8A98, + 0x9756: 0x904A, + 0x9757: 0x9091, + 0x9758: 0x90F5, + 0x9759: 0x96C4, + 0x975A: 0x878D, + 0x975B: 0x5915, + 0x975C: 0x4E88, + 0x975D: 0x4F59, + 0x975E: 0x4E0E, + 0x975F: 0x8A89, + 0x9760: 0x8F3F, + 0x9761: 0x9810, + 0x9762: 0x50AD, + 0x9763: 0x5E7C, + 0x9764: 0x5996, + 0x9765: 0x5BB9, + 0x9766: 0x5EB8, + 0x9767: 0x63DA, + 0x9768: 0x63FA, + 0x9769: 0x64C1, + 0x976A: 0x66DC, + 0x976B: 0x694A, + 0x976C: 0x69D8, + 0x976D: 0x6D0B, + 0x976E: 0x6EB6, + 0x976F: 0x7194, + 0x9770: 0x7528, + 0x9771: 0x7AAF, + 0x9772: 0x7F8A, + 0x9773: 0x8000, + 0x9774: 0x8449, + 0x9775: 0x84C9, + 0x9776: 0x8981, + 0x9777: 0x8B21, + 0x9778: 0x8E0A, + 0x9779: 0x9065, + 0x977A: 0x967D, + 0x977B: 0x990A, + 0x977C: 0x617E, + 0x977D: 0x6291, + 0x977E: 0x6B32, + 0x9780: 0x6C83, + 0x9781: 0x6D74, + 0x9782: 0x7FCC, + 0x9783: 0x7FFC, + 0x9784: 0x6DC0, + 0x9785: 0x7F85, + 0x9786: 0x87BA, + 0x9787: 0x88F8, + 0x9788: 0x6765, + 0x9789: 0x83B1, + 0x978A: 0x983C, + 0x978B: 0x96F7, + 0x978C: 0x6D1B, + 0x978D: 0x7D61, + 0x978E: 0x843D, + 0x978F: 0x916A, + 0x9790: 0x4E71, + 0x9791: 0x5375, + 0x9792: 0x5D50, + 0x9793: 0x6B04, + 0x9794: 0x6FEB, + 0x9795: 0x85CD, + 0x9796: 0x862D, + 0x9797: 0x89A7, + 0x9798: 0x5229, + 0x9799: 0x540F, + 0x979A: 0x5C65, + 0x979B: 0x674E, + 0x979C: 0x68A8, + 0x979D: 0x7406, + 0x979E: 0x7483, + 0x979F: 0x75E2, + 0x97A0: 0x88CF, + 0x97A1: 0x88E1, + 0x97A2: 0x91CC, + 0x97A3: 0x96E2, + 0x97A4: 0x9678, + 0x97A5: 0x5F8B, + 0x97A6: 0x7387, + 0x97A7: 0x7ACB, + 0x97A8: 0x844E, + 0x97A9: 0x63A0, + 0x97AA: 0x7565, + 0x97AB: 0x5289, + 0x97AC: 0x6D41, + 0x97AD: 0x6E9C, + 0x97AE: 0x7409, + 0x97AF: 0x7559, + 0x97B0: 0x786B, + 0x97B1: 0x7C92, + 0x97B2: 0x9686, + 0x97B3: 0x7ADC, + 0x97B4: 0x9F8D, + 0x97B5: 0x4FB6, + 0x97B6: 0x616E, + 0x97B7: 0x65C5, + 0x97B8: 0x865C, + 0x97B9: 0x4E86, + 0x97BA: 0x4EAE, + 0x97BB: 0x50DA, + 0x97BC: 0x4E21, + 0x97BD: 0x51CC, + 0x97BE: 0x5BEE, + 0x97BF: 0x6599, + 0x97C0: 0x6881, + 0x97C1: 0x6DBC, + 0x97C2: 0x731F, + 0x97C3: 0x7642, + 0x97C4: 0x77AD, + 0x97C5: 0x7A1C, + 0x97C6: 0x7CE7, + 0x97C7: 0x826F, + 0x97C8: 0x8AD2, + 0x97C9: 0x907C, + 0x97CA: 0x91CF, + 0x97CB: 0x9675, + 0x97CC: 0x9818, + 0x97CD: 0x529B, + 0x97CE: 0x7DD1, + 0x97CF: 0x502B, + 0x97D0: 0x5398, + 0x97D1: 0x6797, + 0x97D2: 0x6DCB, + 0x97D3: 0x71D0, + 0x97D4: 0x7433, + 0x97D5: 0x81E8, + 0x97D6: 0x8F2A, + 0x97D7: 0x96A3, + 0x97D8: 0x9C57, + 0x97D9: 0x9E9F, + 0x97DA: 0x7460, + 0x97DB: 0x5841, + 0x97DC: 0x6D99, + 0x97DD: 0x7D2F, + 0x97DE: 0x985E, + 0x97DF: 0x4EE4, + 0x97E0: 0x4F36, + 0x97E1: 0x4F8B, + 0x97E2: 0x51B7, + 0x97E3: 0x52B1, + 0x97E4: 0x5DBA, + 0x97E5: 0x601C, + 0x97E6: 0x73B2, + 0x97E7: 0x793C, + 0x97E8: 0x82D3, + 0x97E9: 0x9234, + 0x97EA: 0x96B7, + 0x97EB: 0x96F6, + 0x97EC: 0x970A, + 0x97ED: 0x9E97, + 0x97EE: 0x9F62, + 0x97EF: 0x66A6, + 0x97F0: 0x6B74, + 0x97F1: 0x5217, + 0x97F2: 0x52A3, + 0x97F3: 0x70C8, + 0x97F4: 0x88C2, + 0x97F5: 0x5EC9, + 0x97F6: 0x604B, + 0x97F7: 0x6190, + 0x97F8: 0x6F23, + 0x97F9: 0x7149, + 0x97FA: 0x7C3E, + 0x97FB: 0x7DF4, + 0x97FC: 0x806F, + 0x9840: 0x84EE, + 0x9841: 0x9023, + 0x9842: 0x932C, + 0x9843: 0x5442, + 0x9844: 0x9B6F, + 0x9845: 0x6AD3, + 0x9846: 0x7089, + 0x9847: 0x8CC2, + 0x9848: 0x8DEF, + 0x9849: 0x9732, + 0x984A: 0x52B4, + 0x984B: 0x5A41, + 0x984C: 0x5ECA, + 0x984D: 0x5F04, + 0x984E: 0x6717, + 0x984F: 0x697C, + 0x9850: 0x6994, + 0x9851: 0x6D6A, + 0x9852: 0x6F0F, + 0x9853: 0x7262, + 0x9854: 0x72FC, + 0x9855: 0x7BED, + 0x9856: 0x8001, + 0x9857: 0x807E, + 0x9858: 0x874B, + 0x9859: 0x90CE, + 0x985A: 0x516D, + 0x985B: 0x9E93, + 0x985C: 0x7984, + 0x985D: 0x808B, + 0x985E: 0x9332, + 0x985F: 0x8AD6, + 0x9860: 0x502D, + 0x9861: 0x548C, + 0x9862: 0x8A71, + 0x9863: 0x6B6A, + 0x9864: 0x8CC4, + 0x9865: 0x8107, + 0x9866: 0x60D1, + 0x9867: 0x67A0, + 0x9868: 0x9DF2, + 0x9869: 0x4E99, + 0x986A: 0x4E98, + 0x986B: 0x9C10, + 0x986C: 0x8A6B, + 0x986D: 0x85C1, + 0x986E: 0x8568, + 0x986F: 0x6900, + 0x9870: 0x6E7E, + 0x9871: 0x7897, + 0x9872: 0x8155, + 0x989F: 0x5F0C, + 0x98A0: 0x4E10, + 0x98A1: 0x4E15, + 0x98A2: 0x4E2A, + 0x98A3: 0x4E31, + 0x98A4: 0x4E36, + 0x98A5: 0x4E3C, + 0x98A6: 0x4E3F, + 0x98A7: 0x4E42, + 0x98A8: 0x4E56, + 0x98A9: 0x4E58, + 0x98AA: 0x4E82, + 0x98AB: 0x4E85, + 0x98AC: 0x8C6B, + 0x98AD: 0x4E8A, + 0x98AE: 0x8212, + 0x98AF: 0x5F0D, + 0x98B0: 0x4E8E, + 0x98B1: 0x4E9E, + 0x98B2: 0x4E9F, + 0x98B3: 0x4EA0, + 0x98B4: 0x4EA2, + 0x98B5: 0x4EB0, + 0x98B6: 0x4EB3, + 0x98B7: 0x4EB6, + 0x98B8: 0x4ECE, + 0x98B9: 0x4ECD, + 0x98BA: 0x4EC4, + 0x98BB: 0x4EC6, + 0x98BC: 0x4EC2, + 0x98BD: 0x4ED7, + 0x98BE: 0x4EDE, + 0x98BF: 0x4EED, + 0x98C0: 0x4EDF, + 0x98C1: 0x4EF7, + 0x98C2: 0x4F09, + 0x98C3: 0x4F5A, + 0x98C4: 0x4F30, + 0x98C5: 0x4F5B, + 0x98C6: 0x4F5D, + 0x98C7: 0x4F57, + 0x98C8: 0x4F47, + 0x98C9: 0x4F76, + 0x98CA: 0x4F88, + 0x98CB: 0x4F8F, + 0x98CC: 0x4F98, + 0x98CD: 0x4F7B, + 0x98CE: 0x4F69, + 0x98CF: 0x4F70, + 0x98D0: 0x4F91, + 0x98D1: 0x4F6F, + 0x98D2: 0x4F86, + 0x98D3: 0x4F96, + 0x98D4: 0x5118, + 0x98D5: 0x4FD4, + 0x98D6: 0x4FDF, + 0x98D7: 0x4FCE, + 0x98D8: 0x4FD8, + 0x98D9: 0x4FDB, + 0x98DA: 0x4FD1, + 0x98DB: 0x4FDA, + 0x98DC: 0x4FD0, + 0x98DD: 0x4FE4, + 0x98DE: 0x4FE5, + 0x98DF: 0x501A, + 0x98E0: 0x5028, + 0x98E1: 0x5014, + 0x98E2: 0x502A, + 0x98E3: 0x5025, + 0x98E4: 0x5005, + 0x98E5: 0x4F1C, + 0x98E6: 0x4FF6, + 0x98E7: 0x5021, + 0x98E8: 0x5029, + 0x98E9: 0x502C, + 0x98EA: 0x4FFE, + 0x98EB: 0x4FEF, + 0x98EC: 0x5011, + 0x98ED: 0x5006, + 0x98EE: 0x5043, + 0x98EF: 0x5047, + 0x98F0: 0x6703, + 0x98F1: 0x5055, + 0x98F2: 0x5050, + 0x98F3: 0x5048, + 0x98F4: 0x505A, + 0x98F5: 0x5056, + 0x98F6: 0x506C, + 0x98F7: 0x5078, + 0x98F8: 0x5080, + 0x98F9: 0x509A, + 0x98FA: 0x5085, + 0x98FB: 0x50B4, + 0x98FC: 0x50B2, + 0x9940: 0x50C9, + 0x9941: 0x50CA, + 0x9942: 0x50B3, + 0x9943: 0x50C2, + 0x9944: 0x50D6, + 0x9945: 0x50DE, + 0x9946: 0x50E5, + 0x9947: 0x50ED, + 0x9948: 0x50E3, + 0x9949: 0x50EE, + 0x994A: 0x50F9, + 0x994B: 0x50F5, + 0x994C: 0x5109, + 0x994D: 0x5101, + 0x994E: 0x5102, + 0x994F: 0x5116, + 0x9950: 0x5115, + 0x9951: 0x5114, + 0x9952: 0x511A, + 0x9953: 0x5121, + 0x9954: 0x513A, + 0x9955: 0x5137, + 0x9956: 0x513C, + 0x9957: 0x513B, + 0x9958: 0x513F, + 0x9959: 0x5140, + 0x995A: 0x5152, + 0x995B: 0x514C, + 0x995C: 0x5154, + 0x995D: 0x5162, + 0x995E: 0x7AF8, + 0x995F: 0x5169, + 0x9960: 0x516A, + 0x9961: 0x516E, + 0x9962: 0x5180, + 0x9963: 0x5182, + 0x9964: 0x56D8, + 0x9965: 0x518C, + 0x9966: 0x5189, + 0x9967: 0x518F, + 0x9968: 0x5191, + 0x9969: 0x5193, + 0x996A: 0x5195, + 0x996B: 0x5196, + 0x996C: 0x51A4, + 0x996D: 0x51A6, + 0x996E: 0x51A2, + 0x996F: 0x51A9, + 0x9970: 0x51AA, + 0x9971: 0x51AB, + 0x9972: 0x51B3, + 0x9973: 0x51B1, + 0x9974: 0x51B2, + 0x9975: 0x51B0, + 0x9976: 0x51B5, + 0x9977: 0x51BD, + 0x9978: 0x51C5, + 0x9979: 0x51C9, + 0x997A: 0x51DB, + 0x997B: 0x51E0, + 0x997C: 0x8655, + 0x997D: 0x51E9, + 0x997E: 0x51ED, + 0x9980: 0x51F0, + 0x9981: 0x51F5, + 0x9982: 0x51FE, + 0x9983: 0x5204, + 0x9984: 0x520B, + 0x9985: 0x5214, + 0x9986: 0x520E, + 0x9987: 0x5227, + 0x9988: 0x522A, + 0x9989: 0x522E, + 0x998A: 0x5233, + 0x998B: 0x5239, + 0x998C: 0x524F, + 0x998D: 0x5244, + 0x998E: 0x524B, + 0x998F: 0x524C, + 0x9990: 0x525E, + 0x9991: 0x5254, + 0x9992: 0x526A, + 0x9993: 0x5274, + 0x9994: 0x5269, + 0x9995: 0x5273, + 0x9996: 0x527F, + 0x9997: 0x527D, + 0x9998: 0x528D, + 0x9999: 0x5294, + 0x999A: 0x5292, + 0x999B: 0x5271, + 0x999C: 0x5288, + 0x999D: 0x5291, + 0x999E: 0x8FA8, + 0x999F: 0x8FA7, + 0x99A0: 0x52AC, + 0x99A1: 0x52AD, + 0x99A2: 0x52BC, + 0x99A3: 0x52B5, + 0x99A4: 0x52C1, + 0x99A5: 0x52CD, + 0x99A6: 0x52D7, + 0x99A7: 0x52DE, + 0x99A8: 0x52E3, + 0x99A9: 0x52E6, + 0x99AA: 0x98ED, + 0x99AB: 0x52E0, + 0x99AC: 0x52F3, + 0x99AD: 0x52F5, + 0x99AE: 0x52F8, + 0x99AF: 0x52F9, + 0x99B0: 0x5306, + 0x99B1: 0x5308, + 0x99B2: 0x7538, + 0x99B3: 0x530D, + 0x99B4: 0x5310, + 0x99B5: 0x530F, + 0x99B6: 0x5315, + 0x99B7: 0x531A, + 0x99B8: 0x5323, + 0x99B9: 0x532F, + 0x99BA: 0x5331, + 0x99BB: 0x5333, + 0x99BC: 0x5338, + 0x99BD: 0x5340, + 0x99BE: 0x5346, + 0x99BF: 0x5345, + 0x99C0: 0x4E17, + 0x99C1: 0x5349, + 0x99C2: 0x534D, + 0x99C3: 0x51D6, + 0x99C4: 0x535E, + 0x99C5: 0x5369, + 0x99C6: 0x536E, + 0x99C7: 0x5918, + 0x99C8: 0x537B, + 0x99C9: 0x5377, + 0x99CA: 0x5382, + 0x99CB: 0x5396, + 0x99CC: 0x53A0, + 0x99CD: 0x53A6, + 0x99CE: 0x53A5, + 0x99CF: 0x53AE, + 0x99D0: 0x53B0, + 0x99D1: 0x53B6, + 0x99D2: 0x53C3, + 0x99D3: 0x7C12, + 0x99D4: 0x96D9, + 0x99D5: 0x53DF, + 0x99D6: 0x66FC, + 0x99D7: 0x71EE, + 0x99D8: 0x53EE, + 0x99D9: 0x53E8, + 0x99DA: 0x53ED, + 0x99DB: 0x53FA, + 0x99DC: 0x5401, + 0x99DD: 0x543D, + 0x99DE: 0x5440, + 0x99DF: 0x542C, + 0x99E0: 0x542D, + 0x99E1: 0x543C, + 0x99E2: 0x542E, + 0x99E3: 0x5436, + 0x99E4: 0x5429, + 0x99E5: 0x541D, + 0x99E6: 0x544E, + 0x99E7: 0x548F, + 0x99E8: 0x5475, + 0x99E9: 0x548E, + 0x99EA: 0x545F, + 0x99EB: 0x5471, + 0x99EC: 0x5477, + 0x99ED: 0x5470, + 0x99EE: 0x5492, + 0x99EF: 0x547B, + 0x99F0: 0x5480, + 0x99F1: 0x5476, + 0x99F2: 0x5484, + 0x99F3: 0x5490, + 0x99F4: 0x5486, + 0x99F5: 0x54C7, + 0x99F6: 0x54A2, + 0x99F7: 0x54B8, + 0x99F8: 0x54A5, + 0x99F9: 0x54AC, + 0x99FA: 0x54C4, + 0x99FB: 0x54C8, + 0x99FC: 0x54A8, + 0x9A40: 0x54AB, + 0x9A41: 0x54C2, + 0x9A42: 0x54A4, + 0x9A43: 0x54BE, + 0x9A44: 0x54BC, + 0x9A45: 0x54D8, + 0x9A46: 0x54E5, + 0x9A47: 0x54E6, + 0x9A48: 0x550F, + 0x9A49: 0x5514, + 0x9A4A: 0x54FD, + 0x9A4B: 0x54EE, + 0x9A4C: 0x54ED, + 0x9A4D: 0x54FA, + 0x9A4E: 0x54E2, + 0x9A4F: 0x5539, + 0x9A50: 0x5540, + 0x9A51: 0x5563, + 0x9A52: 0x554C, + 0x9A53: 0x552E, + 0x9A54: 0x555C, + 0x9A55: 0x5545, + 0x9A56: 0x5556, + 0x9A57: 0x5557, + 0x9A58: 0x5538, + 0x9A59: 0x5533, + 0x9A5A: 0x555D, + 0x9A5B: 0x5599, + 0x9A5C: 0x5580, + 0x9A5D: 0x54AF, + 0x9A5E: 0x558A, + 0x9A5F: 0x559F, + 0x9A60: 0x557B, + 0x9A61: 0x557E, + 0x9A62: 0x5598, + 0x9A63: 0x559E, + 0x9A64: 0x55AE, + 0x9A65: 0x557C, + 0x9A66: 0x5583, + 0x9A67: 0x55A9, + 0x9A68: 0x5587, + 0x9A69: 0x55A8, + 0x9A6A: 0x55DA, + 0x9A6B: 0x55C5, + 0x9A6C: 0x55DF, + 0x9A6D: 0x55C4, + 0x9A6E: 0x55DC, + 0x9A6F: 0x55E4, + 0x9A70: 0x55D4, + 0x9A71: 0x5614, + 0x9A72: 0x55F7, + 0x9A73: 0x5616, + 0x9A74: 0x55FE, + 0x9A75: 0x55FD, + 0x9A76: 0x561B, + 0x9A77: 0x55F9, + 0x9A78: 0x564E, + 0x9A79: 0x5650, + 0x9A7A: 0x71DF, + 0x9A7B: 0x5634, + 0x9A7C: 0x5636, + 0x9A7D: 0x5632, + 0x9A7E: 0x5638, + 0x9A80: 0x566B, + 0x9A81: 0x5664, + 0x9A82: 0x562F, + 0x9A83: 0x566C, + 0x9A84: 0x566A, + 0x9A85: 0x5686, + 0x9A86: 0x5680, + 0x9A87: 0x568A, + 0x9A88: 0x56A0, + 0x9A89: 0x5694, + 0x9A8A: 0x568F, + 0x9A8B: 0x56A5, + 0x9A8C: 0x56AE, + 0x9A8D: 0x56B6, + 0x9A8E: 0x56B4, + 0x9A8F: 0x56C2, + 0x9A90: 0x56BC, + 0x9A91: 0x56C1, + 0x9A92: 0x56C3, + 0x9A93: 0x56C0, + 0x9A94: 0x56C8, + 0x9A95: 0x56CE, + 0x9A96: 0x56D1, + 0x9A97: 0x56D3, + 0x9A98: 0x56D7, + 0x9A99: 0x56EE, + 0x9A9A: 0x56F9, + 0x9A9B: 0x5700, + 0x9A9C: 0x56FF, + 0x9A9D: 0x5704, + 0x9A9E: 0x5709, + 0x9A9F: 0x5708, + 0x9AA0: 0x570B, + 0x9AA1: 0x570D, + 0x9AA2: 0x5713, + 0x9AA3: 0x5718, + 0x9AA4: 0x5716, + 0x9AA5: 0x55C7, + 0x9AA6: 0x571C, + 0x9AA7: 0x5726, + 0x9AA8: 0x5737, + 0x9AA9: 0x5738, + 0x9AAA: 0x574E, + 0x9AAB: 0x573B, + 0x9AAC: 0x5740, + 0x9AAD: 0x574F, + 0x9AAE: 0x5769, + 0x9AAF: 0x57C0, + 0x9AB0: 0x5788, + 0x9AB1: 0x5761, + 0x9AB2: 0x577F, + 0x9AB3: 0x5789, + 0x9AB4: 0x5793, + 0x9AB5: 0x57A0, + 0x9AB6: 0x57B3, + 0x9AB7: 0x57A4, + 0x9AB8: 0x57AA, + 0x9AB9: 0x57B0, + 0x9ABA: 0x57C3, + 0x9ABB: 0x57C6, + 0x9ABC: 0x57D4, + 0x9ABD: 0x57D2, + 0x9ABE: 0x57D3, + 0x9ABF: 0x580A, + 0x9AC0: 0x57D6, + 0x9AC1: 0x57E3, + 0x9AC2: 0x580B, + 0x9AC3: 0x5819, + 0x9AC4: 0x581D, + 0x9AC5: 0x5872, + 0x9AC6: 0x5821, + 0x9AC7: 0x5862, + 0x9AC8: 0x584B, + 0x9AC9: 0x5870, + 0x9ACA: 0x6BC0, + 0x9ACB: 0x5852, + 0x9ACC: 0x583D, + 0x9ACD: 0x5879, + 0x9ACE: 0x5885, + 0x9ACF: 0x58B9, + 0x9AD0: 0x589F, + 0x9AD1: 0x58AB, + 0x9AD2: 0x58BA, + 0x9AD3: 0x58DE, + 0x9AD4: 0x58BB, + 0x9AD5: 0x58B8, + 0x9AD6: 0x58AE, + 0x9AD7: 0x58C5, + 0x9AD8: 0x58D3, + 0x9AD9: 0x58D1, + 0x9ADA: 0x58D7, + 0x9ADB: 0x58D9, + 0x9ADC: 0x58D8, + 0x9ADD: 0x58E5, + 0x9ADE: 0x58DC, + 0x9ADF: 0x58E4, + 0x9AE0: 0x58DF, + 0x9AE1: 0x58EF, + 0x9AE2: 0x58FA, + 0x9AE3: 0x58F9, + 0x9AE4: 0x58FB, + 0x9AE5: 0x58FC, + 0x9AE6: 0x58FD, + 0x9AE7: 0x5902, + 0x9AE8: 0x590A, + 0x9AE9: 0x5910, + 0x9AEA: 0x591B, + 0x9AEB: 0x68A6, + 0x9AEC: 0x5925, + 0x9AED: 0x592C, + 0x9AEE: 0x592D, + 0x9AEF: 0x5932, + 0x9AF0: 0x5938, + 0x9AF1: 0x593E, + 0x9AF2: 0x7AD2, + 0x9AF3: 0x5955, + 0x9AF4: 0x5950, + 0x9AF5: 0x594E, + 0x9AF6: 0x595A, + 0x9AF7: 0x5958, + 0x9AF8: 0x5962, + 0x9AF9: 0x5960, + 0x9AFA: 0x5967, + 0x9AFB: 0x596C, + 0x9AFC: 0x5969, + 0x9B40: 0x5978, + 0x9B41: 0x5981, + 0x9B42: 0x599D, + 0x9B43: 0x4F5E, + 0x9B44: 0x4FAB, + 0x9B45: 0x59A3, + 0x9B46: 0x59B2, + 0x9B47: 0x59C6, + 0x9B48: 0x59E8, + 0x9B49: 0x59DC, + 0x9B4A: 0x598D, + 0x9B4B: 0x59D9, + 0x9B4C: 0x59DA, + 0x9B4D: 0x5A25, + 0x9B4E: 0x5A1F, + 0x9B4F: 0x5A11, + 0x9B50: 0x5A1C, + 0x9B51: 0x5A09, + 0x9B52: 0x5A1A, + 0x9B53: 0x5A40, + 0x9B54: 0x5A6C, + 0x9B55: 0x5A49, + 0x9B56: 0x5A35, + 0x9B57: 0x5A36, + 0x9B58: 0x5A62, + 0x9B59: 0x5A6A, + 0x9B5A: 0x5A9A, + 0x9B5B: 0x5ABC, + 0x9B5C: 0x5ABE, + 0x9B5D: 0x5ACB, + 0x9B5E: 0x5AC2, + 0x9B5F: 0x5ABD, + 0x9B60: 0x5AE3, + 0x9B61: 0x5AD7, + 0x9B62: 0x5AE6, + 0x9B63: 0x5AE9, + 0x9B64: 0x5AD6, + 0x9B65: 0x5AFA, + 0x9B66: 0x5AFB, + 0x9B67: 0x5B0C, + 0x9B68: 0x5B0B, + 0x9B69: 0x5B16, + 0x9B6A: 0x5B32, + 0x9B6B: 0x5AD0, + 0x9B6C: 0x5B2A, + 0x9B6D: 0x5B36, + 0x9B6E: 0x5B3E, + 0x9B6F: 0x5B43, + 0x9B70: 0x5B45, + 0x9B71: 0x5B40, + 0x9B72: 0x5B51, + 0x9B73: 0x5B55, + 0x9B74: 0x5B5A, + 0x9B75: 0x5B5B, + 0x9B76: 0x5B65, + 0x9B77: 0x5B69, + 0x9B78: 0x5B70, + 0x9B79: 0x5B73, + 0x9B7A: 0x5B75, + 0x9B7B: 0x5B78, + 0x9B7C: 0x6588, + 0x9B7D: 0x5B7A, + 0x9B7E: 0x5B80, + 0x9B80: 0x5B83, + 0x9B81: 0x5BA6, + 0x9B82: 0x5BB8, + 0x9B83: 0x5BC3, + 0x9B84: 0x5BC7, + 0x9B85: 0x5BC9, + 0x9B86: 0x5BD4, + 0x9B87: 0x5BD0, + 0x9B88: 0x5BE4, + 0x9B89: 0x5BE6, + 0x9B8A: 0x5BE2, + 0x9B8B: 0x5BDE, + 0x9B8C: 0x5BE5, + 0x9B8D: 0x5BEB, + 0x9B8E: 0x5BF0, + 0x9B8F: 0x5BF6, + 0x9B90: 0x5BF3, + 0x9B91: 0x5C05, + 0x9B92: 0x5C07, + 0x9B93: 0x5C08, + 0x9B94: 0x5C0D, + 0x9B95: 0x5C13, + 0x9B96: 0x5C20, + 0x9B97: 0x5C22, + 0x9B98: 0x5C28, + 0x9B99: 0x5C38, + 0x9B9A: 0x5C39, + 0x9B9B: 0x5C41, + 0x9B9C: 0x5C46, + 0x9B9D: 0x5C4E, + 0x9B9E: 0x5C53, + 0x9B9F: 0x5C50, + 0x9BA0: 0x5C4F, + 0x9BA1: 0x5B71, + 0x9BA2: 0x5C6C, + 0x9BA3: 0x5C6E, + 0x9BA4: 0x4E62, + 0x9BA5: 0x5C76, + 0x9BA6: 0x5C79, + 0x9BA7: 0x5C8C, + 0x9BA8: 0x5C91, + 0x9BA9: 0x5C94, + 0x9BAA: 0x599B, + 0x9BAB: 0x5CAB, + 0x9BAC: 0x5CBB, + 0x9BAD: 0x5CB6, + 0x9BAE: 0x5CBC, + 0x9BAF: 0x5CB7, + 0x9BB0: 0x5CC5, + 0x9BB1: 0x5CBE, + 0x9BB2: 0x5CC7, + 0x9BB3: 0x5CD9, + 0x9BB4: 0x5CE9, + 0x9BB5: 0x5CFD, + 0x9BB6: 0x5CFA, + 0x9BB7: 0x5CED, + 0x9BB8: 0x5D8C, + 0x9BB9: 0x5CEA, + 0x9BBA: 0x5D0B, + 0x9BBB: 0x5D15, + 0x9BBC: 0x5D17, + 0x9BBD: 0x5D5C, + 0x9BBE: 0x5D1F, + 0x9BBF: 0x5D1B, + 0x9BC0: 0x5D11, + 0x9BC1: 0x5D14, + 0x9BC2: 0x5D22, + 0x9BC3: 0x5D1A, + 0x9BC4: 0x5D19, + 0x9BC5: 0x5D18, + 0x9BC6: 0x5D4C, + 0x9BC7: 0x5D52, + 0x9BC8: 0x5D4E, + 0x9BC9: 0x5D4B, + 0x9BCA: 0x5D6C, + 0x9BCB: 0x5D73, + 0x9BCC: 0x5D76, + 0x9BCD: 0x5D87, + 0x9BCE: 0x5D84, + 0x9BCF: 0x5D82, + 0x9BD0: 0x5DA2, + 0x9BD1: 0x5D9D, + 0x9BD2: 0x5DAC, + 0x9BD3: 0x5DAE, + 0x9BD4: 0x5DBD, + 0x9BD5: 0x5D90, + 0x9BD6: 0x5DB7, + 0x9BD7: 0x5DBC, + 0x9BD8: 0x5DC9, + 0x9BD9: 0x5DCD, + 0x9BDA: 0x5DD3, + 0x9BDB: 0x5DD2, + 0x9BDC: 0x5DD6, + 0x9BDD: 0x5DDB, + 0x9BDE: 0x5DEB, + 0x9BDF: 0x5DF2, + 0x9BE0: 0x5DF5, + 0x9BE1: 0x5E0B, + 0x9BE2: 0x5E1A, + 0x9BE3: 0x5E19, + 0x9BE4: 0x5E11, + 0x9BE5: 0x5E1B, + 0x9BE6: 0x5E36, + 0x9BE7: 0x5E37, + 0x9BE8: 0x5E44, + 0x9BE9: 0x5E43, + 0x9BEA: 0x5E40, + 0x9BEB: 0x5E4E, + 0x9BEC: 0x5E57, + 0x9BED: 0x5E54, + 0x9BEE: 0x5E5F, + 0x9BEF: 0x5E62, + 0x9BF0: 0x5E64, + 0x9BF1: 0x5E47, + 0x9BF2: 0x5E75, + 0x9BF3: 0x5E76, + 0x9BF4: 0x5E7A, + 0x9BF5: 0x9EBC, + 0x9BF6: 0x5E7F, + 0x9BF7: 0x5EA0, + 0x9BF8: 0x5EC1, + 0x9BF9: 0x5EC2, + 0x9BFA: 0x5EC8, + 0x9BFB: 0x5ED0, + 0x9BFC: 0x5ECF, + 0x9C40: 0x5ED6, + 0x9C41: 0x5EE3, + 0x9C42: 0x5EDD, + 0x9C43: 0x5EDA, + 0x9C44: 0x5EDB, + 0x9C45: 0x5EE2, + 0x9C46: 0x5EE1, + 0x9C47: 0x5EE8, + 0x9C48: 0x5EE9, + 0x9C49: 0x5EEC, + 0x9C4A: 0x5EF1, + 0x9C4B: 0x5EF3, + 0x9C4C: 0x5EF0, + 0x9C4D: 0x5EF4, + 0x9C4E: 0x5EF8, + 0x9C4F: 0x5EFE, + 0x9C50: 0x5F03, + 0x9C51: 0x5F09, + 0x9C52: 0x5F5D, + 0x9C53: 0x5F5C, + 0x9C54: 0x5F0B, + 0x9C55: 0x5F11, + 0x9C56: 0x5F16, + 0x9C57: 0x5F29, + 0x9C58: 0x5F2D, + 0x9C59: 0x5F38, + 0x9C5A: 0x5F41, + 0x9C5B: 0x5F48, + 0x9C5C: 0x5F4C, + 0x9C5D: 0x5F4E, + 0x9C5E: 0x5F2F, + 0x9C5F: 0x5F51, + 0x9C60: 0x5F56, + 0x9C61: 0x5F57, + 0x9C62: 0x5F59, + 0x9C63: 0x5F61, + 0x9C64: 0x5F6D, + 0x9C65: 0x5F73, + 0x9C66: 0x5F77, + 0x9C67: 0x5F83, + 0x9C68: 0x5F82, + 0x9C69: 0x5F7F, + 0x9C6A: 0x5F8A, + 0x9C6B: 0x5F88, + 0x9C6C: 0x5F91, + 0x9C6D: 0x5F87, + 0x9C6E: 0x5F9E, + 0x9C6F: 0x5F99, + 0x9C70: 0x5F98, + 0x9C71: 0x5FA0, + 0x9C72: 0x5FA8, + 0x9C73: 0x5FAD, + 0x9C74: 0x5FBC, + 0x9C75: 0x5FD6, + 0x9C76: 0x5FFB, + 0x9C77: 0x5FE4, + 0x9C78: 0x5FF8, + 0x9C79: 0x5FF1, + 0x9C7A: 0x5FDD, + 0x9C7B: 0x60B3, + 0x9C7C: 0x5FFF, + 0x9C7D: 0x6021, + 0x9C7E: 0x6060, + 0x9C80: 0x6019, + 0x9C81: 0x6010, + 0x9C82: 0x6029, + 0x9C83: 0x600E, + 0x9C84: 0x6031, + 0x9C85: 0x601B, + 0x9C86: 0x6015, + 0x9C87: 0x602B, + 0x9C88: 0x6026, + 0x9C89: 0x600F, + 0x9C8A: 0x603A, + 0x9C8B: 0x605A, + 0x9C8C: 0x6041, + 0x9C8D: 0x606A, + 0x9C8E: 0x6077, + 0x9C8F: 0x605F, + 0x9C90: 0x604A, + 0x9C91: 0x6046, + 0x9C92: 0x604D, + 0x9C93: 0x6063, + 0x9C94: 0x6043, + 0x9C95: 0x6064, + 0x9C96: 0x6042, + 0x9C97: 0x606C, + 0x9C98: 0x606B, + 0x9C99: 0x6059, + 0x9C9A: 0x6081, + 0x9C9B: 0x608D, + 0x9C9C: 0x60E7, + 0x9C9D: 0x6083, + 0x9C9E: 0x609A, + 0x9C9F: 0x6084, + 0x9CA0: 0x609B, + 0x9CA1: 0x6096, + 0x9CA2: 0x6097, + 0x9CA3: 0x6092, + 0x9CA4: 0x60A7, + 0x9CA5: 0x608B, + 0x9CA6: 0x60E1, + 0x9CA7: 0x60B8, + 0x9CA8: 0x60E0, + 0x9CA9: 0x60D3, + 0x9CAA: 0x60B4, + 0x9CAB: 0x5FF0, + 0x9CAC: 0x60BD, + 0x9CAD: 0x60C6, + 0x9CAE: 0x60B5, + 0x9CAF: 0x60D8, + 0x9CB0: 0x614D, + 0x9CB1: 0x6115, + 0x9CB2: 0x6106, + 0x9CB3: 0x60F6, + 0x9CB4: 0x60F7, + 0x9CB5: 0x6100, + 0x9CB6: 0x60F4, + 0x9CB7: 0x60FA, + 0x9CB8: 0x6103, + 0x9CB9: 0x6121, + 0x9CBA: 0x60FB, + 0x9CBB: 0x60F1, + 0x9CBC: 0x610D, + 0x9CBD: 0x610E, + 0x9CBE: 0x6147, + 0x9CBF: 0x613E, + 0x9CC0: 0x6128, + 0x9CC1: 0x6127, + 0x9CC2: 0x614A, + 0x9CC3: 0x613F, + 0x9CC4: 0x613C, + 0x9CC5: 0x612C, + 0x9CC6: 0x6134, + 0x9CC7: 0x613D, + 0x9CC8: 0x6142, + 0x9CC9: 0x6144, + 0x9CCA: 0x6173, + 0x9CCB: 0x6177, + 0x9CCC: 0x6158, + 0x9CCD: 0x6159, + 0x9CCE: 0x615A, + 0x9CCF: 0x616B, + 0x9CD0: 0x6174, + 0x9CD1: 0x616F, + 0x9CD2: 0x6165, + 0x9CD3: 0x6171, + 0x9CD4: 0x615F, + 0x9CD5: 0x615D, + 0x9CD6: 0x6153, + 0x9CD7: 0x6175, + 0x9CD8: 0x6199, + 0x9CD9: 0x6196, + 0x9CDA: 0x6187, + 0x9CDB: 0x61AC, + 0x9CDC: 0x6194, + 0x9CDD: 0x619A, + 0x9CDE: 0x618A, + 0x9CDF: 0x6191, + 0x9CE0: 0x61AB, + 0x9CE1: 0x61AE, + 0x9CE2: 0x61CC, + 0x9CE3: 0x61CA, + 0x9CE4: 0x61C9, + 0x9CE5: 0x61F7, + 0x9CE6: 0x61C8, + 0x9CE7: 0x61C3, + 0x9CE8: 0x61C6, + 0x9CE9: 0x61BA, + 0x9CEA: 0x61CB, + 0x9CEB: 0x7F79, + 0x9CEC: 0x61CD, + 0x9CED: 0x61E6, + 0x9CEE: 0x61E3, + 0x9CEF: 0x61F6, + 0x9CF0: 0x61FA, + 0x9CF1: 0x61F4, + 0x9CF2: 0x61FF, + 0x9CF3: 0x61FD, + 0x9CF4: 0x61FC, + 0x9CF5: 0x61FE, + 0x9CF6: 0x6200, + 0x9CF7: 0x6208, + 0x9CF8: 0x6209, + 0x9CF9: 0x620D, + 0x9CFA: 0x620C, + 0x9CFB: 0x6214, + 0x9CFC: 0x621B, + 0x9D40: 0x621E, + 0x9D41: 0x6221, + 0x9D42: 0x622A, + 0x9D43: 0x622E, + 0x9D44: 0x6230, + 0x9D45: 0x6232, + 0x9D46: 0x6233, + 0x9D47: 0x6241, + 0x9D48: 0x624E, + 0x9D49: 0x625E, + 0x9D4A: 0x6263, + 0x9D4B: 0x625B, + 0x9D4C: 0x6260, + 0x9D4D: 0x6268, + 0x9D4E: 0x627C, + 0x9D4F: 0x6282, + 0x9D50: 0x6289, + 0x9D51: 0x627E, + 0x9D52: 0x6292, + 0x9D53: 0x6293, + 0x9D54: 0x6296, + 0x9D55: 0x62D4, + 0x9D56: 0x6283, + 0x9D57: 0x6294, + 0x9D58: 0x62D7, + 0x9D59: 0x62D1, + 0x9D5A: 0x62BB, + 0x9D5B: 0x62CF, + 0x9D5C: 0x62FF, + 0x9D5D: 0x62C6, + 0x9D5E: 0x64D4, + 0x9D5F: 0x62C8, + 0x9D60: 0x62DC, + 0x9D61: 0x62CC, + 0x9D62: 0x62CA, + 0x9D63: 0x62C2, + 0x9D64: 0x62C7, + 0x9D65: 0x629B, + 0x9D66: 0x62C9, + 0x9D67: 0x630C, + 0x9D68: 0x62EE, + 0x9D69: 0x62F1, + 0x9D6A: 0x6327, + 0x9D6B: 0x6302, + 0x9D6C: 0x6308, + 0x9D6D: 0x62EF, + 0x9D6E: 0x62F5, + 0x9D6F: 0x6350, + 0x9D70: 0x633E, + 0x9D71: 0x634D, + 0x9D72: 0x641C, + 0x9D73: 0x634F, + 0x9D74: 0x6396, + 0x9D75: 0x638E, + 0x9D76: 0x6380, + 0x9D77: 0x63AB, + 0x9D78: 0x6376, + 0x9D79: 0x63A3, + 0x9D7A: 0x638F, + 0x9D7B: 0x6389, + 0x9D7C: 0x639F, + 0x9D7D: 0x63B5, + 0x9D7E: 0x636B, + 0x9D80: 0x6369, + 0x9D81: 0x63BE, + 0x9D82: 0x63E9, + 0x9D83: 0x63C0, + 0x9D84: 0x63C6, + 0x9D85: 0x63E3, + 0x9D86: 0x63C9, + 0x9D87: 0x63D2, + 0x9D88: 0x63F6, + 0x9D89: 0x63C4, + 0x9D8A: 0x6416, + 0x9D8B: 0x6434, + 0x9D8C: 0x6406, + 0x9D8D: 0x6413, + 0x9D8E: 0x6426, + 0x9D8F: 0x6436, + 0x9D90: 0x651D, + 0x9D91: 0x6417, + 0x9D92: 0x6428, + 0x9D93: 0x640F, + 0x9D94: 0x6467, + 0x9D95: 0x646F, + 0x9D96: 0x6476, + 0x9D97: 0x644E, + 0x9D98: 0x652A, + 0x9D99: 0x6495, + 0x9D9A: 0x6493, + 0x9D9B: 0x64A5, + 0x9D9C: 0x64A9, + 0x9D9D: 0x6488, + 0x9D9E: 0x64BC, + 0x9D9F: 0x64DA, + 0x9DA0: 0x64D2, + 0x9DA1: 0x64C5, + 0x9DA2: 0x64C7, + 0x9DA3: 0x64BB, + 0x9DA4: 0x64D8, + 0x9DA5: 0x64C2, + 0x9DA6: 0x64F1, + 0x9DA7: 0x64E7, + 0x9DA8: 0x8209, + 0x9DA9: 0x64E0, + 0x9DAA: 0x64E1, + 0x9DAB: 0x62AC, + 0x9DAC: 0x64E3, + 0x9DAD: 0x64EF, + 0x9DAE: 0x652C, + 0x9DAF: 0x64F6, + 0x9DB0: 0x64F4, + 0x9DB1: 0x64F2, + 0x9DB2: 0x64FA, + 0x9DB3: 0x6500, + 0x9DB4: 0x64FD, + 0x9DB5: 0x6518, + 0x9DB6: 0x651C, + 0x9DB7: 0x6505, + 0x9DB8: 0x6524, + 0x9DB9: 0x6523, + 0x9DBA: 0x652B, + 0x9DBB: 0x6534, + 0x9DBC: 0x6535, + 0x9DBD: 0x6537, + 0x9DBE: 0x6536, + 0x9DBF: 0x6538, + 0x9DC0: 0x754B, + 0x9DC1: 0x6548, + 0x9DC2: 0x6556, + 0x9DC3: 0x6555, + 0x9DC4: 0x654D, + 0x9DC5: 0x6558, + 0x9DC6: 0x655E, + 0x9DC7: 0x655D, + 0x9DC8: 0x6572, + 0x9DC9: 0x6578, + 0x9DCA: 0x6582, + 0x9DCB: 0x6583, + 0x9DCC: 0x8B8A, + 0x9DCD: 0x659B, + 0x9DCE: 0x659F, + 0x9DCF: 0x65AB, + 0x9DD0: 0x65B7, + 0x9DD1: 0x65C3, + 0x9DD2: 0x65C6, + 0x9DD3: 0x65C1, + 0x9DD4: 0x65C4, + 0x9DD5: 0x65CC, + 0x9DD6: 0x65D2, + 0x9DD7: 0x65DB, + 0x9DD8: 0x65D9, + 0x9DD9: 0x65E0, + 0x9DDA: 0x65E1, + 0x9DDB: 0x65F1, + 0x9DDC: 0x6772, + 0x9DDD: 0x660A, + 0x9DDE: 0x6603, + 0x9DDF: 0x65FB, + 0x9DE0: 0x6773, + 0x9DE1: 0x6635, + 0x9DE2: 0x6636, + 0x9DE3: 0x6634, + 0x9DE4: 0x661C, + 0x9DE5: 0x664F, + 0x9DE6: 0x6644, + 0x9DE7: 0x6649, + 0x9DE8: 0x6641, + 0x9DE9: 0x665E, + 0x9DEA: 0x665D, + 0x9DEB: 0x6664, + 0x9DEC: 0x6667, + 0x9DED: 0x6668, + 0x9DEE: 0x665F, + 0x9DEF: 0x6662, + 0x9DF0: 0x6670, + 0x9DF1: 0x6683, + 0x9DF2: 0x6688, + 0x9DF3: 0x668E, + 0x9DF4: 0x6689, + 0x9DF5: 0x6684, + 0x9DF6: 0x6698, + 0x9DF7: 0x669D, + 0x9DF8: 0x66C1, + 0x9DF9: 0x66B9, + 0x9DFA: 0x66C9, + 0x9DFB: 0x66BE, + 0x9DFC: 0x66BC, + 0x9E40: 0x66C4, + 0x9E41: 0x66B8, + 0x9E42: 0x66D6, + 0x9E43: 0x66DA, + 0x9E44: 0x66E0, + 0x9E45: 0x663F, + 0x9E46: 0x66E6, + 0x9E47: 0x66E9, + 0x9E48: 0x66F0, + 0x9E49: 0x66F5, + 0x9E4A: 0x66F7, + 0x9E4B: 0x670F, + 0x9E4C: 0x6716, + 0x9E4D: 0x671E, + 0x9E4E: 0x6726, + 0x9E4F: 0x6727, + 0x9E50: 0x9738, + 0x9E51: 0x672E, + 0x9E52: 0x673F, + 0x9E53: 0x6736, + 0x9E54: 0x6741, + 0x9E55: 0x6738, + 0x9E56: 0x6737, + 0x9E57: 0x6746, + 0x9E58: 0x675E, + 0x9E59: 0x6760, + 0x9E5A: 0x6759, + 0x9E5B: 0x6763, + 0x9E5C: 0x6764, + 0x9E5D: 0x6789, + 0x9E5E: 0x6770, + 0x9E5F: 0x67A9, + 0x9E60: 0x677C, + 0x9E61: 0x676A, + 0x9E62: 0x678C, + 0x9E63: 0x678B, + 0x9E64: 0x67A6, + 0x9E65: 0x67A1, + 0x9E66: 0x6785, + 0x9E67: 0x67B7, + 0x9E68: 0x67EF, + 0x9E69: 0x67B4, + 0x9E6A: 0x67EC, + 0x9E6B: 0x67B3, + 0x9E6C: 0x67E9, + 0x9E6D: 0x67B8, + 0x9E6E: 0x67E4, + 0x9E6F: 0x67DE, + 0x9E70: 0x67DD, + 0x9E71: 0x67E2, + 0x9E72: 0x67EE, + 0x9E73: 0x67B9, + 0x9E74: 0x67CE, + 0x9E75: 0x67C6, + 0x9E76: 0x67E7, + 0x9E77: 0x6A9C, + 0x9E78: 0x681E, + 0x9E79: 0x6846, + 0x9E7A: 0x6829, + 0x9E7B: 0x6840, + 0x9E7C: 0x684D, + 0x9E7D: 0x6832, + 0x9E7E: 0x684E, + 0x9E80: 0x68B3, + 0x9E81: 0x682B, + 0x9E82: 0x6859, + 0x9E83: 0x6863, + 0x9E84: 0x6877, + 0x9E85: 0x687F, + 0x9E86: 0x689F, + 0x9E87: 0x688F, + 0x9E88: 0x68AD, + 0x9E89: 0x6894, + 0x9E8A: 0x689D, + 0x9E8B: 0x689B, + 0x9E8C: 0x6883, + 0x9E8D: 0x6AAE, + 0x9E8E: 0x68B9, + 0x9E8F: 0x6874, + 0x9E90: 0x68B5, + 0x9E91: 0x68A0, + 0x9E92: 0x68BA, + 0x9E93: 0x690F, + 0x9E94: 0x688D, + 0x9E95: 0x687E, + 0x9E96: 0x6901, + 0x9E97: 0x68CA, + 0x9E98: 0x6908, + 0x9E99: 0x68D8, + 0x9E9A: 0x6922, + 0x9E9B: 0x6926, + 0x9E9C: 0x68E1, + 0x9E9D: 0x690C, + 0x9E9E: 0x68CD, + 0x9E9F: 0x68D4, + 0x9EA0: 0x68E7, + 0x9EA1: 0x68D5, + 0x9EA2: 0x6936, + 0x9EA3: 0x6912, + 0x9EA4: 0x6904, + 0x9EA5: 0x68D7, + 0x9EA6: 0x68E3, + 0x9EA7: 0x6925, + 0x9EA8: 0x68F9, + 0x9EA9: 0x68E0, + 0x9EAA: 0x68EF, + 0x9EAB: 0x6928, + 0x9EAC: 0x692A, + 0x9EAD: 0x691A, + 0x9EAE: 0x6923, + 0x9EAF: 0x6921, + 0x9EB0: 0x68C6, + 0x9EB1: 0x6979, + 0x9EB2: 0x6977, + 0x9EB3: 0x695C, + 0x9EB4: 0x6978, + 0x9EB5: 0x696B, + 0x9EB6: 0x6954, + 0x9EB7: 0x697E, + 0x9EB8: 0x696E, + 0x9EB9: 0x6939, + 0x9EBA: 0x6974, + 0x9EBB: 0x693D, + 0x9EBC: 0x6959, + 0x9EBD: 0x6930, + 0x9EBE: 0x6961, + 0x9EBF: 0x695E, + 0x9EC0: 0x695D, + 0x9EC1: 0x6981, + 0x9EC2: 0x696A, + 0x9EC3: 0x69B2, + 0x9EC4: 0x69AE, + 0x9EC5: 0x69D0, + 0x9EC6: 0x69BF, + 0x9EC7: 0x69C1, + 0x9EC8: 0x69D3, + 0x9EC9: 0x69BE, + 0x9ECA: 0x69CE, + 0x9ECB: 0x5BE8, + 0x9ECC: 0x69CA, + 0x9ECD: 0x69DD, + 0x9ECE: 0x69BB, + 0x9ECF: 0x69C3, + 0x9ED0: 0x69A7, + 0x9ED1: 0x6A2E, + 0x9ED2: 0x6991, + 0x9ED3: 0x69A0, + 0x9ED4: 0x699C, + 0x9ED5: 0x6995, + 0x9ED6: 0x69B4, + 0x9ED7: 0x69DE, + 0x9ED8: 0x69E8, + 0x9ED9: 0x6A02, + 0x9EDA: 0x6A1B, + 0x9EDB: 0x69FF, + 0x9EDC: 0x6B0A, + 0x9EDD: 0x69F9, + 0x9EDE: 0x69F2, + 0x9EDF: 0x69E7, + 0x9EE0: 0x6A05, + 0x9EE1: 0x69B1, + 0x9EE2: 0x6A1E, + 0x9EE3: 0x69ED, + 0x9EE4: 0x6A14, + 0x9EE5: 0x69EB, + 0x9EE6: 0x6A0A, + 0x9EE7: 0x6A12, + 0x9EE8: 0x6AC1, + 0x9EE9: 0x6A23, + 0x9EEA: 0x6A13, + 0x9EEB: 0x6A44, + 0x9EEC: 0x6A0C, + 0x9EED: 0x6A72, + 0x9EEE: 0x6A36, + 0x9EEF: 0x6A78, + 0x9EF0: 0x6A47, + 0x9EF1: 0x6A62, + 0x9EF2: 0x6A59, + 0x9EF3: 0x6A66, + 0x9EF4: 0x6A48, + 0x9EF5: 0x6A38, + 0x9EF6: 0x6A22, + 0x9EF7: 0x6A90, + 0x9EF8: 0x6A8D, + 0x9EF9: 0x6AA0, + 0x9EFA: 0x6A84, + 0x9EFB: 0x6AA2, + 0x9EFC: 0x6AA3, + 0x9F40: 0x6A97, + 0x9F41: 0x8617, + 0x9F42: 0x6ABB, + 0x9F43: 0x6AC3, + 0x9F44: 0x6AC2, + 0x9F45: 0x6AB8, + 0x9F46: 0x6AB3, + 0x9F47: 0x6AAC, + 0x9F48: 0x6ADE, + 0x9F49: 0x6AD1, + 0x9F4A: 0x6ADF, + 0x9F4B: 0x6AAA, + 0x9F4C: 0x6ADA, + 0x9F4D: 0x6AEA, + 0x9F4E: 0x6AFB, + 0x9F4F: 0x6B05, + 0x9F50: 0x8616, + 0x9F51: 0x6AFA, + 0x9F52: 0x6B12, + 0x9F53: 0x6B16, + 0x9F54: 0x9B31, + 0x9F55: 0x6B1F, + 0x9F56: 0x6B38, + 0x9F57: 0x6B37, + 0x9F58: 0x76DC, + 0x9F59: 0x6B39, + 0x9F5A: 0x98EE, + 0x9F5B: 0x6B47, + 0x9F5C: 0x6B43, + 0x9F5D: 0x6B49, + 0x9F5E: 0x6B50, + 0x9F5F: 0x6B59, + 0x9F60: 0x6B54, + 0x9F61: 0x6B5B, + 0x9F62: 0x6B5F, + 0x9F63: 0x6B61, + 0x9F64: 0x6B78, + 0x9F65: 0x6B79, + 0x9F66: 0x6B7F, + 0x9F67: 0x6B80, + 0x9F68: 0x6B84, + 0x9F69: 0x6B83, + 0x9F6A: 0x6B8D, + 0x9F6B: 0x6B98, + 0x9F6C: 0x6B95, + 0x9F6D: 0x6B9E, + 0x9F6E: 0x6BA4, + 0x9F6F: 0x6BAA, + 0x9F70: 0x6BAB, + 0x9F71: 0x6BAF, + 0x9F72: 0x6BB2, + 0x9F73: 0x6BB1, + 0x9F74: 0x6BB3, + 0x9F75: 0x6BB7, + 0x9F76: 0x6BBC, + 0x9F77: 0x6BC6, + 0x9F78: 0x6BCB, + 0x9F79: 0x6BD3, + 0x9F7A: 0x6BDF, + 0x9F7B: 0x6BEC, + 0x9F7C: 0x6BEB, + 0x9F7D: 0x6BF3, + 0x9F7E: 0x6BEF, + 0x9F80: 0x9EBE, + 0x9F81: 0x6C08, + 0x9F82: 0x6C13, + 0x9F83: 0x6C14, + 0x9F84: 0x6C1B, + 0x9F85: 0x6C24, + 0x9F86: 0x6C23, + 0x9F87: 0x6C5E, + 0x9F88: 0x6C55, + 0x9F89: 0x6C62, + 0x9F8A: 0x6C6A, + 0x9F8B: 0x6C82, + 0x9F8C: 0x6C8D, + 0x9F8D: 0x6C9A, + 0x9F8E: 0x6C81, + 0x9F8F: 0x6C9B, + 0x9F90: 0x6C7E, + 0x9F91: 0x6C68, + 0x9F92: 0x6C73, + 0x9F93: 0x6C92, + 0x9F94: 0x6C90, + 0x9F95: 0x6CC4, + 0x9F96: 0x6CF1, + 0x9F97: 0x6CD3, + 0x9F98: 0x6CBD, + 0x9F99: 0x6CD7, + 0x9F9A: 0x6CC5, + 0x9F9B: 0x6CDD, + 0x9F9C: 0x6CAE, + 0x9F9D: 0x6CB1, + 0x9F9E: 0x6CBE, + 0x9F9F: 0x6CBA, + 0x9FA0: 0x6CDB, + 0x9FA1: 0x6CEF, + 0x9FA2: 0x6CD9, + 0x9FA3: 0x6CEA, + 0x9FA4: 0x6D1F, + 0x9FA5: 0x884D, + 0x9FA6: 0x6D36, + 0x9FA7: 0x6D2B, + 0x9FA8: 0x6D3D, + 0x9FA9: 0x6D38, + 0x9FAA: 0x6D19, + 0x9FAB: 0x6D35, + 0x9FAC: 0x6D33, + 0x9FAD: 0x6D12, + 0x9FAE: 0x6D0C, + 0x9FAF: 0x6D63, + 0x9FB0: 0x6D93, + 0x9FB1: 0x6D64, + 0x9FB2: 0x6D5A, + 0x9FB3: 0x6D79, + 0x9FB4: 0x6D59, + 0x9FB5: 0x6D8E, + 0x9FB6: 0x6D95, + 0x9FB7: 0x6FE4, + 0x9FB8: 0x6D85, + 0x9FB9: 0x6DF9, + 0x9FBA: 0x6E15, + 0x9FBB: 0x6E0A, + 0x9FBC: 0x6DB5, + 0x9FBD: 0x6DC7, + 0x9FBE: 0x6DE6, + 0x9FBF: 0x6DB8, + 0x9FC0: 0x6DC6, + 0x9FC1: 0x6DEC, + 0x9FC2: 0x6DDE, + 0x9FC3: 0x6DCC, + 0x9FC4: 0x6DE8, + 0x9FC5: 0x6DD2, + 0x9FC6: 0x6DC5, + 0x9FC7: 0x6DFA, + 0x9FC8: 0x6DD9, + 0x9FC9: 0x6DE4, + 0x9FCA: 0x6DD5, + 0x9FCB: 0x6DEA, + 0x9FCC: 0x6DEE, + 0x9FCD: 0x6E2D, + 0x9FCE: 0x6E6E, + 0x9FCF: 0x6E2E, + 0x9FD0: 0x6E19, + 0x9FD1: 0x6E72, + 0x9FD2: 0x6E5F, + 0x9FD3: 0x6E3E, + 0x9FD4: 0x6E23, + 0x9FD5: 0x6E6B, + 0x9FD6: 0x6E2B, + 0x9FD7: 0x6E76, + 0x9FD8: 0x6E4D, + 0x9FD9: 0x6E1F, + 0x9FDA: 0x6E43, + 0x9FDB: 0x6E3A, + 0x9FDC: 0x6E4E, + 0x9FDD: 0x6E24, + 0x9FDE: 0x6EFF, + 0x9FDF: 0x6E1D, + 0x9FE0: 0x6E38, + 0x9FE1: 0x6E82, + 0x9FE2: 0x6EAA, + 0x9FE3: 0x6E98, + 0x9FE4: 0x6EC9, + 0x9FE5: 0x6EB7, + 0x9FE6: 0x6ED3, + 0x9FE7: 0x6EBD, + 0x9FE8: 0x6EAF, + 0x9FE9: 0x6EC4, + 0x9FEA: 0x6EB2, + 0x9FEB: 0x6ED4, + 0x9FEC: 0x6ED5, + 0x9FED: 0x6E8F, + 0x9FEE: 0x6EA5, + 0x9FEF: 0x6EC2, + 0x9FF0: 0x6E9F, + 0x9FF1: 0x6F41, + 0x9FF2: 0x6F11, + 0x9FF3: 0x704C, + 0x9FF4: 0x6EEC, + 0x9FF5: 0x6EF8, + 0x9FF6: 0x6EFE, + 0x9FF7: 0x6F3F, + 0x9FF8: 0x6EF2, + 0x9FF9: 0x6F31, + 0x9FFA: 0x6EEF, + 0x9FFB: 0x6F32, + 0x9FFC: 0x6ECC, + 0xA1: 0xFF61, + 0xA2: 0xFF62, + 0xA3: 0xFF63, + 0xA4: 0xFF64, + 0xA5: 0xFF65, + 0xA6: 0xFF66, + 0xA7: 0xFF67, + 0xA8: 0xFF68, + 0xA9: 0xFF69, + 0xAA: 0xFF6A, + 0xAB: 0xFF6B, + 0xAC: 0xFF6C, + 0xAD: 0xFF6D, + 0xAE: 0xFF6E, + 0xAF: 0xFF6F, + 0xB0: 0xFF70, + 0xB1: 0xFF71, + 0xB2: 0xFF72, + 0xB3: 0xFF73, + 0xB4: 0xFF74, + 0xB5: 0xFF75, + 0xB6: 0xFF76, + 0xB7: 0xFF77, + 0xB8: 0xFF78, + 0xB9: 0xFF79, + 0xBA: 0xFF7A, + 0xBB: 0xFF7B, + 0xBC: 0xFF7C, + 0xBD: 0xFF7D, + 0xBE: 0xFF7E, + 0xBF: 0xFF7F, + 0xC0: 0xFF80, + 0xC1: 0xFF81, + 0xC2: 0xFF82, + 0xC3: 0xFF83, + 0xC4: 0xFF84, + 0xC5: 0xFF85, + 0xC6: 0xFF86, + 0xC7: 0xFF87, + 0xC8: 0xFF88, + 0xC9: 0xFF89, + 0xCA: 0xFF8A, + 0xCB: 0xFF8B, + 0xCC: 0xFF8C, + 0xCD: 0xFF8D, + 0xCE: 0xFF8E, + 0xCF: 0xFF8F, + 0xD0: 0xFF90, + 0xD1: 0xFF91, + 0xD2: 0xFF92, + 0xD3: 0xFF93, + 0xD4: 0xFF94, + 0xD5: 0xFF95, + 0xD6: 0xFF96, + 0xD7: 0xFF97, + 0xD8: 0xFF98, + 0xD9: 0xFF99, + 0xDA: 0xFF9A, + 0xDB: 0xFF9B, + 0xDC: 0xFF9C, + 0xDD: 0xFF9D, + 0xDE: 0xFF9E, + 0xDF: 0xFF9F, + 0xE040: 0x6F3E, + 0xE041: 0x6F13, + 0xE042: 0x6EF7, + 0xE043: 0x6F86, + 0xE044: 0x6F7A, + 0xE045: 0x6F78, + 0xE046: 0x6F81, + 0xE047: 0x6F80, + 0xE048: 0x6F6F, + 0xE049: 0x6F5B, + 0xE04A: 0x6FF3, + 0xE04B: 0x6F6D, + 0xE04C: 0x6F82, + 0xE04D: 0x6F7C, + 0xE04E: 0x6F58, + 0xE04F: 0x6F8E, + 0xE050: 0x6F91, + 0xE051: 0x6FC2, + 0xE052: 0x6F66, + 0xE053: 0x6FB3, + 0xE054: 0x6FA3, + 0xE055: 0x6FA1, + 0xE056: 0x6FA4, + 0xE057: 0x6FB9, + 0xE058: 0x6FC6, + 0xE059: 0x6FAA, + 0xE05A: 0x6FDF, + 0xE05B: 0x6FD5, + 0xE05C: 0x6FEC, + 0xE05D: 0x6FD4, + 0xE05E: 0x6FD8, + 0xE05F: 0x6FF1, + 0xE060: 0x6FEE, + 0xE061: 0x6FDB, + 0xE062: 0x7009, + 0xE063: 0x700B, + 0xE064: 0x6FFA, + 0xE065: 0x7011, + 0xE066: 0x7001, + 0xE067: 0x700F, + 0xE068: 0x6FFE, + 0xE069: 0x701B, + 0xE06A: 0x701A, + 0xE06B: 0x6F74, + 0xE06C: 0x701D, + 0xE06D: 0x7018, + 0xE06E: 0x701F, + 0xE06F: 0x7030, + 0xE070: 0x703E, + 0xE071: 0x7032, + 0xE072: 0x7051, + 0xE073: 0x7063, + 0xE074: 0x7099, + 0xE075: 0x7092, + 0xE076: 0x70AF, + 0xE077: 0x70F1, + 0xE078: 0x70AC, + 0xE079: 0x70B8, + 0xE07A: 0x70B3, + 0xE07B: 0x70AE, + 0xE07C: 0x70DF, + 0xE07D: 0x70CB, + 0xE07E: 0x70DD, + 0xE080: 0x70D9, + 0xE081: 0x7109, + 0xE082: 0x70FD, + 0xE083: 0x711C, + 0xE084: 0x7119, + 0xE085: 0x7165, + 0xE086: 0x7155, + 0xE087: 0x7188, + 0xE088: 0x7166, + 0xE089: 0x7162, + 0xE08A: 0x714C, + 0xE08B: 0x7156, + 0xE08C: 0x716C, + 0xE08D: 0x718F, + 0xE08E: 0x71FB, + 0xE08F: 0x7184, + 0xE090: 0x7195, + 0xE091: 0x71A8, + 0xE092: 0x71AC, + 0xE093: 0x71D7, + 0xE094: 0x71B9, + 0xE095: 0x71BE, + 0xE096: 0x71D2, + 0xE097: 0x71C9, + 0xE098: 0x71D4, + 0xE099: 0x71CE, + 0xE09A: 0x71E0, + 0xE09B: 0x71EC, + 0xE09C: 0x71E7, + 0xE09D: 0x71F5, + 0xE09E: 0x71FC, + 0xE09F: 0x71F9, + 0xE0A0: 0x71FF, + 0xE0A1: 0x720D, + 0xE0A2: 0x7210, + 0xE0A3: 0x721B, + 0xE0A4: 0x7228, + 0xE0A5: 0x722D, + 0xE0A6: 0x722C, + 0xE0A7: 0x7230, + 0xE0A8: 0x7232, + 0xE0A9: 0x723B, + 0xE0AA: 0x723C, + 0xE0AB: 0x723F, + 0xE0AC: 0x7240, + 0xE0AD: 0x7246, + 0xE0AE: 0x724B, + 0xE0AF: 0x7258, + 0xE0B0: 0x7274, + 0xE0B1: 0x727E, + 0xE0B2: 0x7282, + 0xE0B3: 0x7281, + 0xE0B4: 0x7287, + 0xE0B5: 0x7292, + 0xE0B6: 0x7296, + 0xE0B7: 0x72A2, + 0xE0B8: 0x72A7, + 0xE0B9: 0x72B9, + 0xE0BA: 0x72B2, + 0xE0BB: 0x72C3, + 0xE0BC: 0x72C6, + 0xE0BD: 0x72C4, + 0xE0BE: 0x72CE, + 0xE0BF: 0x72D2, + 0xE0C0: 0x72E2, + 0xE0C1: 0x72E0, + 0xE0C2: 0x72E1, + 0xE0C3: 0x72F9, + 0xE0C4: 0x72F7, + 0xE0C5: 0x500F, + 0xE0C6: 0x7317, + 0xE0C7: 0x730A, + 0xE0C8: 0x731C, + 0xE0C9: 0x7316, + 0xE0CA: 0x731D, + 0xE0CB: 0x7334, + 0xE0CC: 0x732F, + 0xE0CD: 0x7329, + 0xE0CE: 0x7325, + 0xE0CF: 0x733E, + 0xE0D0: 0x734E, + 0xE0D1: 0x734F, + 0xE0D2: 0x9ED8, + 0xE0D3: 0x7357, + 0xE0D4: 0x736A, + 0xE0D5: 0x7368, + 0xE0D6: 0x7370, + 0xE0D7: 0x7378, + 0xE0D8: 0x7375, + 0xE0D9: 0x737B, + 0xE0DA: 0x737A, + 0xE0DB: 0x73C8, + 0xE0DC: 0x73B3, + 0xE0DD: 0x73CE, + 0xE0DE: 0x73BB, + 0xE0DF: 0x73C0, + 0xE0E0: 0x73E5, + 0xE0E1: 0x73EE, + 0xE0E2: 0x73DE, + 0xE0E3: 0x74A2, + 0xE0E4: 0x7405, + 0xE0E5: 0x746F, + 0xE0E6: 0x7425, + 0xE0E7: 0x73F8, + 0xE0E8: 0x7432, + 0xE0E9: 0x743A, + 0xE0EA: 0x7455, + 0xE0EB: 0x743F, + 0xE0EC: 0x745F, + 0xE0ED: 0x7459, + 0xE0EE: 0x7441, + 0xE0EF: 0x745C, + 0xE0F0: 0x7469, + 0xE0F1: 0x7470, + 0xE0F2: 0x7463, + 0xE0F3: 0x746A, + 0xE0F4: 0x7476, + 0xE0F5: 0x747E, + 0xE0F6: 0x748B, + 0xE0F7: 0x749E, + 0xE0F8: 0x74A7, + 0xE0F9: 0x74CA, + 0xE0FA: 0x74CF, + 0xE0FB: 0x74D4, + 0xE0FC: 0x73F1, + 0xE140: 0x74E0, + 0xE141: 0x74E3, + 0xE142: 0x74E7, + 0xE143: 0x74E9, + 0xE144: 0x74EE, + 0xE145: 0x74F2, + 0xE146: 0x74F0, + 0xE147: 0x74F1, + 0xE148: 0x74F8, + 0xE149: 0x74F7, + 0xE14A: 0x7504, + 0xE14B: 0x7503, + 0xE14C: 0x7505, + 0xE14D: 0x750C, + 0xE14E: 0x750E, + 0xE14F: 0x750D, + 0xE150: 0x7515, + 0xE151: 0x7513, + 0xE152: 0x751E, + 0xE153: 0x7526, + 0xE154: 0x752C, + 0xE155: 0x753C, + 0xE156: 0x7544, + 0xE157: 0x754D, + 0xE158: 0x754A, + 0xE159: 0x7549, + 0xE15A: 0x755B, + 0xE15B: 0x7546, + 0xE15C: 0x755A, + 0xE15D: 0x7569, + 0xE15E: 0x7564, + 0xE15F: 0x7567, + 0xE160: 0x756B, + 0xE161: 0x756D, + 0xE162: 0x7578, + 0xE163: 0x7576, + 0xE164: 0x7586, + 0xE165: 0x7587, + 0xE166: 0x7574, + 0xE167: 0x758A, + 0xE168: 0x7589, + 0xE169: 0x7582, + 0xE16A: 0x7594, + 0xE16B: 0x759A, + 0xE16C: 0x759D, + 0xE16D: 0x75A5, + 0xE16E: 0x75A3, + 0xE16F: 0x75C2, + 0xE170: 0x75B3, + 0xE171: 0x75C3, + 0xE172: 0x75B5, + 0xE173: 0x75BD, + 0xE174: 0x75B8, + 0xE175: 0x75BC, + 0xE176: 0x75B1, + 0xE177: 0x75CD, + 0xE178: 0x75CA, + 0xE179: 0x75D2, + 0xE17A: 0x75D9, + 0xE17B: 0x75E3, + 0xE17C: 0x75DE, + 0xE17D: 0x75FE, + 0xE17E: 0x75FF, + 0xE180: 0x75FC, + 0xE181: 0x7601, + 0xE182: 0x75F0, + 0xE183: 0x75FA, + 0xE184: 0x75F2, + 0xE185: 0x75F3, + 0xE186: 0x760B, + 0xE187: 0x760D, + 0xE188: 0x7609, + 0xE189: 0x761F, + 0xE18A: 0x7627, + 0xE18B: 0x7620, + 0xE18C: 0x7621, + 0xE18D: 0x7622, + 0xE18E: 0x7624, + 0xE18F: 0x7634, + 0xE190: 0x7630, + 0xE191: 0x763B, + 0xE192: 0x7647, + 0xE193: 0x7648, + 0xE194: 0x7646, + 0xE195: 0x765C, + 0xE196: 0x7658, + 0xE197: 0x7661, + 0xE198: 0x7662, + 0xE199: 0x7668, + 0xE19A: 0x7669, + 0xE19B: 0x766A, + 0xE19C: 0x7667, + 0xE19D: 0x766C, + 0xE19E: 0x7670, + 0xE19F: 0x7672, + 0xE1A0: 0x7676, + 0xE1A1: 0x7678, + 0xE1A2: 0x767C, + 0xE1A3: 0x7680, + 0xE1A4: 0x7683, + 0xE1A5: 0x7688, + 0xE1A6: 0x768B, + 0xE1A7: 0x768E, + 0xE1A8: 0x7696, + 0xE1A9: 0x7693, + 0xE1AA: 0x7699, + 0xE1AB: 0x769A, + 0xE1AC: 0x76B0, + 0xE1AD: 0x76B4, + 0xE1AE: 0x76B8, + 0xE1AF: 0x76B9, + 0xE1B0: 0x76BA, + 0xE1B1: 0x76C2, + 0xE1B2: 0x76CD, + 0xE1B3: 0x76D6, + 0xE1B4: 0x76D2, + 0xE1B5: 0x76DE, + 0xE1B6: 0x76E1, + 0xE1B7: 0x76E5, + 0xE1B8: 0x76E7, + 0xE1B9: 0x76EA, + 0xE1BA: 0x862F, + 0xE1BB: 0x76FB, + 0xE1BC: 0x7708, + 0xE1BD: 0x7707, + 0xE1BE: 0x7704, + 0xE1BF: 0x7729, + 0xE1C0: 0x7724, + 0xE1C1: 0x771E, + 0xE1C2: 0x7725, + 0xE1C3: 0x7726, + 0xE1C4: 0x771B, + 0xE1C5: 0x7737, + 0xE1C6: 0x7738, + 0xE1C7: 0x7747, + 0xE1C8: 0x775A, + 0xE1C9: 0x7768, + 0xE1CA: 0x776B, + 0xE1CB: 0x775B, + 0xE1CC: 0x7765, + 0xE1CD: 0x777F, + 0xE1CE: 0x777E, + 0xE1CF: 0x7779, + 0xE1D0: 0x778E, + 0xE1D1: 0x778B, + 0xE1D2: 0x7791, + 0xE1D3: 0x77A0, + 0xE1D4: 0x779E, + 0xE1D5: 0x77B0, + 0xE1D6: 0x77B6, + 0xE1D7: 0x77B9, + 0xE1D8: 0x77BF, + 0xE1D9: 0x77BC, + 0xE1DA: 0x77BD, + 0xE1DB: 0x77BB, + 0xE1DC: 0x77C7, + 0xE1DD: 0x77CD, + 0xE1DE: 0x77D7, + 0xE1DF: 0x77DA, + 0xE1E0: 0x77DC, + 0xE1E1: 0x77E3, + 0xE1E2: 0x77EE, + 0xE1E3: 0x77FC, + 0xE1E4: 0x780C, + 0xE1E5: 0x7812, + 0xE1E6: 0x7926, + 0xE1E7: 0x7820, + 0xE1E8: 0x792A, + 0xE1E9: 0x7845, + 0xE1EA: 0x788E, + 0xE1EB: 0x7874, + 0xE1EC: 0x7886, + 0xE1ED: 0x787C, + 0xE1EE: 0x789A, + 0xE1EF: 0x788C, + 0xE1F0: 0x78A3, + 0xE1F1: 0x78B5, + 0xE1F2: 0x78AA, + 0xE1F3: 0x78AF, + 0xE1F4: 0x78D1, + 0xE1F5: 0x78C6, + 0xE1F6: 0x78CB, + 0xE1F7: 0x78D4, + 0xE1F8: 0x78BE, + 0xE1F9: 0x78BC, + 0xE1FA: 0x78C5, + 0xE1FB: 0x78CA, + 0xE1FC: 0x78EC, + 0xE240: 0x78E7, + 0xE241: 0x78DA, + 0xE242: 0x78FD, + 0xE243: 0x78F4, + 0xE244: 0x7907, + 0xE245: 0x7912, + 0xE246: 0x7911, + 0xE247: 0x7919, + 0xE248: 0x792C, + 0xE249: 0x792B, + 0xE24A: 0x7940, + 0xE24B: 0x7960, + 0xE24C: 0x7957, + 0xE24D: 0x795F, + 0xE24E: 0x795A, + 0xE24F: 0x7955, + 0xE250: 0x7953, + 0xE251: 0x797A, + 0xE252: 0x797F, + 0xE253: 0x798A, + 0xE254: 0x799D, + 0xE255: 0x79A7, + 0xE256: 0x9F4B, + 0xE257: 0x79AA, + 0xE258: 0x79AE, + 0xE259: 0x79B3, + 0xE25A: 0x79B9, + 0xE25B: 0x79BA, + 0xE25C: 0x79C9, + 0xE25D: 0x79D5, + 0xE25E: 0x79E7, + 0xE25F: 0x79EC, + 0xE260: 0x79E1, + 0xE261: 0x79E3, + 0xE262: 0x7A08, + 0xE263: 0x7A0D, + 0xE264: 0x7A18, + 0xE265: 0x7A19, + 0xE266: 0x7A20, + 0xE267: 0x7A1F, + 0xE268: 0x7980, + 0xE269: 0x7A31, + 0xE26A: 0x7A3B, + 0xE26B: 0x7A3E, + 0xE26C: 0x7A37, + 0xE26D: 0x7A43, + 0xE26E: 0x7A57, + 0xE26F: 0x7A49, + 0xE270: 0x7A61, + 0xE271: 0x7A62, + 0xE272: 0x7A69, + 0xE273: 0x9F9D, + 0xE274: 0x7A70, + 0xE275: 0x7A79, + 0xE276: 0x7A7D, + 0xE277: 0x7A88, + 0xE278: 0x7A97, + 0xE279: 0x7A95, + 0xE27A: 0x7A98, + 0xE27B: 0x7A96, + 0xE27C: 0x7AA9, + 0xE27D: 0x7AC8, + 0xE27E: 0x7AB0, + 0xE280: 0x7AB6, + 0xE281: 0x7AC5, + 0xE282: 0x7AC4, + 0xE283: 0x7ABF, + 0xE284: 0x9083, + 0xE285: 0x7AC7, + 0xE286: 0x7ACA, + 0xE287: 0x7ACD, + 0xE288: 0x7ACF, + 0xE289: 0x7AD5, + 0xE28A: 0x7AD3, + 0xE28B: 0x7AD9, + 0xE28C: 0x7ADA, + 0xE28D: 0x7ADD, + 0xE28E: 0x7AE1, + 0xE28F: 0x7AE2, + 0xE290: 0x7AE6, + 0xE291: 0x7AED, + 0xE292: 0x7AF0, + 0xE293: 0x7B02, + 0xE294: 0x7B0F, + 0xE295: 0x7B0A, + 0xE296: 0x7B06, + 0xE297: 0x7B33, + 0xE298: 0x7B18, + 0xE299: 0x7B19, + 0xE29A: 0x7B1E, + 0xE29B: 0x7B35, + 0xE29C: 0x7B28, + 0xE29D: 0x7B36, + 0xE29E: 0x7B50, + 0xE29F: 0x7B7A, + 0xE2A0: 0x7B04, + 0xE2A1: 0x7B4D, + 0xE2A2: 0x7B0B, + 0xE2A3: 0x7B4C, + 0xE2A4: 0x7B45, + 0xE2A5: 0x7B75, + 0xE2A6: 0x7B65, + 0xE2A7: 0x7B74, + 0xE2A8: 0x7B67, + 0xE2A9: 0x7B70, + 0xE2AA: 0x7B71, + 0xE2AB: 0x7B6C, + 0xE2AC: 0x7B6E, + 0xE2AD: 0x7B9D, + 0xE2AE: 0x7B98, + 0xE2AF: 0x7B9F, + 0xE2B0: 0x7B8D, + 0xE2B1: 0x7B9C, + 0xE2B2: 0x7B9A, + 0xE2B3: 0x7B8B, + 0xE2B4: 0x7B92, + 0xE2B5: 0x7B8F, + 0xE2B6: 0x7B5D, + 0xE2B7: 0x7B99, + 0xE2B8: 0x7BCB, + 0xE2B9: 0x7BC1, + 0xE2BA: 0x7BCC, + 0xE2BB: 0x7BCF, + 0xE2BC: 0x7BB4, + 0xE2BD: 0x7BC6, + 0xE2BE: 0x7BDD, + 0xE2BF: 0x7BE9, + 0xE2C0: 0x7C11, + 0xE2C1: 0x7C14, + 0xE2C2: 0x7BE6, + 0xE2C3: 0x7BE5, + 0xE2C4: 0x7C60, + 0xE2C5: 0x7C00, + 0xE2C6: 0x7C07, + 0xE2C7: 0x7C13, + 0xE2C8: 0x7BF3, + 0xE2C9: 0x7BF7, + 0xE2CA: 0x7C17, + 0xE2CB: 0x7C0D, + 0xE2CC: 0x7BF6, + 0xE2CD: 0x7C23, + 0xE2CE: 0x7C27, + 0xE2CF: 0x7C2A, + 0xE2D0: 0x7C1F, + 0xE2D1: 0x7C37, + 0xE2D2: 0x7C2B, + 0xE2D3: 0x7C3D, + 0xE2D4: 0x7C4C, + 0xE2D5: 0x7C43, + 0xE2D6: 0x7C54, + 0xE2D7: 0x7C4F, + 0xE2D8: 0x7C40, + 0xE2D9: 0x7C50, + 0xE2DA: 0x7C58, + 0xE2DB: 0x7C5F, + 0xE2DC: 0x7C64, + 0xE2DD: 0x7C56, + 0xE2DE: 0x7C65, + 0xE2DF: 0x7C6C, + 0xE2E0: 0x7C75, + 0xE2E1: 0x7C83, + 0xE2E2: 0x7C90, + 0xE2E3: 0x7CA4, + 0xE2E4: 0x7CAD, + 0xE2E5: 0x7CA2, + 0xE2E6: 0x7CAB, + 0xE2E7: 0x7CA1, + 0xE2E8: 0x7CA8, + 0xE2E9: 0x7CB3, + 0xE2EA: 0x7CB2, + 0xE2EB: 0x7CB1, + 0xE2EC: 0x7CAE, + 0xE2ED: 0x7CB9, + 0xE2EE: 0x7CBD, + 0xE2EF: 0x7CC0, + 0xE2F0: 0x7CC5, + 0xE2F1: 0x7CC2, + 0xE2F2: 0x7CD8, + 0xE2F3: 0x7CD2, + 0xE2F4: 0x7CDC, + 0xE2F5: 0x7CE2, + 0xE2F6: 0x9B3B, + 0xE2F7: 0x7CEF, + 0xE2F8: 0x7CF2, + 0xE2F9: 0x7CF4, + 0xE2FA: 0x7CF6, + 0xE2FB: 0x7CFA, + 0xE2FC: 0x7D06, + 0xE340: 0x7D02, + 0xE341: 0x7D1C, + 0xE342: 0x7D15, + 0xE343: 0x7D0A, + 0xE344: 0x7D45, + 0xE345: 0x7D4B, + 0xE346: 0x7D2E, + 0xE347: 0x7D32, + 0xE348: 0x7D3F, + 0xE349: 0x7D35, + 0xE34A: 0x7D46, + 0xE34B: 0x7D73, + 0xE34C: 0x7D56, + 0xE34D: 0x7D4E, + 0xE34E: 0x7D72, + 0xE34F: 0x7D68, + 0xE350: 0x7D6E, + 0xE351: 0x7D4F, + 0xE352: 0x7D63, + 0xE353: 0x7D93, + 0xE354: 0x7D89, + 0xE355: 0x7D5B, + 0xE356: 0x7D8F, + 0xE357: 0x7D7D, + 0xE358: 0x7D9B, + 0xE359: 0x7DBA, + 0xE35A: 0x7DAE, + 0xE35B: 0x7DA3, + 0xE35C: 0x7DB5, + 0xE35D: 0x7DC7, + 0xE35E: 0x7DBD, + 0xE35F: 0x7DAB, + 0xE360: 0x7E3D, + 0xE361: 0x7DA2, + 0xE362: 0x7DAF, + 0xE363: 0x7DDC, + 0xE364: 0x7DB8, + 0xE365: 0x7D9F, + 0xE366: 0x7DB0, + 0xE367: 0x7DD8, + 0xE368: 0x7DDD, + 0xE369: 0x7DE4, + 0xE36A: 0x7DDE, + 0xE36B: 0x7DFB, + 0xE36C: 0x7DF2, + 0xE36D: 0x7DE1, + 0xE36E: 0x7E05, + 0xE36F: 0x7E0A, + 0xE370: 0x7E23, + 0xE371: 0x7E21, + 0xE372: 0x7E12, + 0xE373: 0x7E31, + 0xE374: 0x7E1F, + 0xE375: 0x7E09, + 0xE376: 0x7E0B, + 0xE377: 0x7E22, + 0xE378: 0x7E46, + 0xE379: 0x7E66, + 0xE37A: 0x7E3B, + 0xE37B: 0x7E35, + 0xE37C: 0x7E39, + 0xE37D: 0x7E43, + 0xE37E: 0x7E37, + 0xE380: 0x7E32, + 0xE381: 0x7E3A, + 0xE382: 0x7E67, + 0xE383: 0x7E5D, + 0xE384: 0x7E56, + 0xE385: 0x7E5E, + 0xE386: 0x7E59, + 0xE387: 0x7E5A, + 0xE388: 0x7E79, + 0xE389: 0x7E6A, + 0xE38A: 0x7E69, + 0xE38B: 0x7E7C, + 0xE38C: 0x7E7B, + 0xE38D: 0x7E83, + 0xE38E: 0x7DD5, + 0xE38F: 0x7E7D, + 0xE390: 0x8FAE, + 0xE391: 0x7E7F, + 0xE392: 0x7E88, + 0xE393: 0x7E89, + 0xE394: 0x7E8C, + 0xE395: 0x7E92, + 0xE396: 0x7E90, + 0xE397: 0x7E93, + 0xE398: 0x7E94, + 0xE399: 0x7E96, + 0xE39A: 0x7E8E, + 0xE39B: 0x7E9B, + 0xE39C: 0x7E9C, + 0xE39D: 0x7F38, + 0xE39E: 0x7F3A, + 0xE39F: 0x7F45, + 0xE3A0: 0x7F4C, + 0xE3A1: 0x7F4D, + 0xE3A2: 0x7F4E, + 0xE3A3: 0x7F50, + 0xE3A4: 0x7F51, + 0xE3A5: 0x7F55, + 0xE3A6: 0x7F54, + 0xE3A7: 0x7F58, + 0xE3A8: 0x7F5F, + 0xE3A9: 0x7F60, + 0xE3AA: 0x7F68, + 0xE3AB: 0x7F69, + 0xE3AC: 0x7F67, + 0xE3AD: 0x7F78, + 0xE3AE: 0x7F82, + 0xE3AF: 0x7F86, + 0xE3B0: 0x7F83, + 0xE3B1: 0x7F88, + 0xE3B2: 0x7F87, + 0xE3B3: 0x7F8C, + 0xE3B4: 0x7F94, + 0xE3B5: 0x7F9E, + 0xE3B6: 0x7F9D, + 0xE3B7: 0x7F9A, + 0xE3B8: 0x7FA3, + 0xE3B9: 0x7FAF, + 0xE3BA: 0x7FB2, + 0xE3BB: 0x7FB9, + 0xE3BC: 0x7FAE, + 0xE3BD: 0x7FB6, + 0xE3BE: 0x7FB8, + 0xE3BF: 0x8B71, + 0xE3C0: 0x7FC5, + 0xE3C1: 0x7FC6, + 0xE3C2: 0x7FCA, + 0xE3C3: 0x7FD5, + 0xE3C4: 0x7FD4, + 0xE3C5: 0x7FE1, + 0xE3C6: 0x7FE6, + 0xE3C7: 0x7FE9, + 0xE3C8: 0x7FF3, + 0xE3C9: 0x7FF9, + 0xE3CA: 0x98DC, + 0xE3CB: 0x8006, + 0xE3CC: 0x8004, + 0xE3CD: 0x800B, + 0xE3CE: 0x8012, + 0xE3CF: 0x8018, + 0xE3D0: 0x8019, + 0xE3D1: 0x801C, + 0xE3D2: 0x8021, + 0xE3D3: 0x8028, + 0xE3D4: 0x803F, + 0xE3D5: 0x803B, + 0xE3D6: 0x804A, + 0xE3D7: 0x8046, + 0xE3D8: 0x8052, + 0xE3D9: 0x8058, + 0xE3DA: 0x805A, + 0xE3DB: 0x805F, + 0xE3DC: 0x8062, + 0xE3DD: 0x8068, + 0xE3DE: 0x8073, + 0xE3DF: 0x8072, + 0xE3E0: 0x8070, + 0xE3E1: 0x8076, + 0xE3E2: 0x8079, + 0xE3E3: 0x807D, + 0xE3E4: 0x807F, + 0xE3E5: 0x8084, + 0xE3E6: 0x8086, + 0xE3E7: 0x8085, + 0xE3E8: 0x809B, + 0xE3E9: 0x8093, + 0xE3EA: 0x809A, + 0xE3EB: 0x80AD, + 0xE3EC: 0x5190, + 0xE3ED: 0x80AC, + 0xE3EE: 0x80DB, + 0xE3EF: 0x80E5, + 0xE3F0: 0x80D9, + 0xE3F1: 0x80DD, + 0xE3F2: 0x80C4, + 0xE3F3: 0x80DA, + 0xE3F4: 0x80D6, + 0xE3F5: 0x8109, + 0xE3F6: 0x80EF, + 0xE3F7: 0x80F1, + 0xE3F8: 0x811B, + 0xE3F9: 0x8129, + 0xE3FA: 0x8123, + 0xE3FB: 0x812F, + 0xE3FC: 0x814B, + 0xE440: 0x968B, + 0xE441: 0x8146, + 0xE442: 0x813E, + 0xE443: 0x8153, + 0xE444: 0x8151, + 0xE445: 0x80FC, + 0xE446: 0x8171, + 0xE447: 0x816E, + 0xE448: 0x8165, + 0xE449: 0x8166, + 0xE44A: 0x8174, + 0xE44B: 0x8183, + 0xE44C: 0x8188, + 0xE44D: 0x818A, + 0xE44E: 0x8180, + 0xE44F: 0x8182, + 0xE450: 0x81A0, + 0xE451: 0x8195, + 0xE452: 0x81A4, + 0xE453: 0x81A3, + 0xE454: 0x815F, + 0xE455: 0x8193, + 0xE456: 0x81A9, + 0xE457: 0x81B0, + 0xE458: 0x81B5, + 0xE459: 0x81BE, + 0xE45A: 0x81B8, + 0xE45B: 0x81BD, + 0xE45C: 0x81C0, + 0xE45D: 0x81C2, + 0xE45E: 0x81BA, + 0xE45F: 0x81C9, + 0xE460: 0x81CD, + 0xE461: 0x81D1, + 0xE462: 0x81D9, + 0xE463: 0x81D8, + 0xE464: 0x81C8, + 0xE465: 0x81DA, + 0xE466: 0x81DF, + 0xE467: 0x81E0, + 0xE468: 0x81E7, + 0xE469: 0x81FA, + 0xE46A: 0x81FB, + 0xE46B: 0x81FE, + 0xE46C: 0x8201, + 0xE46D: 0x8202, + 0xE46E: 0x8205, + 0xE46F: 0x8207, + 0xE470: 0x820A, + 0xE471: 0x820D, + 0xE472: 0x8210, + 0xE473: 0x8216, + 0xE474: 0x8229, + 0xE475: 0x822B, + 0xE476: 0x8238, + 0xE477: 0x8233, + 0xE478: 0x8240, + 0xE479: 0x8259, + 0xE47A: 0x8258, + 0xE47B: 0x825D, + 0xE47C: 0x825A, + 0xE47D: 0x825F, + 0xE47E: 0x8264, + 0xE480: 0x8262, + 0xE481: 0x8268, + 0xE482: 0x826A, + 0xE483: 0x826B, + 0xE484: 0x822E, + 0xE485: 0x8271, + 0xE486: 0x8277, + 0xE487: 0x8278, + 0xE488: 0x827E, + 0xE489: 0x828D, + 0xE48A: 0x8292, + 0xE48B: 0x82AB, + 0xE48C: 0x829F, + 0xE48D: 0x82BB, + 0xE48E: 0x82AC, + 0xE48F: 0x82E1, + 0xE490: 0x82E3, + 0xE491: 0x82DF, + 0xE492: 0x82D2, + 0xE493: 0x82F4, + 0xE494: 0x82F3, + 0xE495: 0x82FA, + 0xE496: 0x8393, + 0xE497: 0x8303, + 0xE498: 0x82FB, + 0xE499: 0x82F9, + 0xE49A: 0x82DE, + 0xE49B: 0x8306, + 0xE49C: 0x82DC, + 0xE49D: 0x8309, + 0xE49E: 0x82D9, + 0xE49F: 0x8335, + 0xE4A0: 0x8334, + 0xE4A1: 0x8316, + 0xE4A2: 0x8332, + 0xE4A3: 0x8331, + 0xE4A4: 0x8340, + 0xE4A5: 0x8339, + 0xE4A6: 0x8350, + 0xE4A7: 0x8345, + 0xE4A8: 0x832F, + 0xE4A9: 0x832B, + 0xE4AA: 0x8317, + 0xE4AB: 0x8318, + 0xE4AC: 0x8385, + 0xE4AD: 0x839A, + 0xE4AE: 0x83AA, + 0xE4AF: 0x839F, + 0xE4B0: 0x83A2, + 0xE4B1: 0x8396, + 0xE4B2: 0x8323, + 0xE4B3: 0x838E, + 0xE4B4: 0x8387, + 0xE4B5: 0x838A, + 0xE4B6: 0x837C, + 0xE4B7: 0x83B5, + 0xE4B8: 0x8373, + 0xE4B9: 0x8375, + 0xE4BA: 0x83A0, + 0xE4BB: 0x8389, + 0xE4BC: 0x83A8, + 0xE4BD: 0x83F4, + 0xE4BE: 0x8413, + 0xE4BF: 0x83EB, + 0xE4C0: 0x83CE, + 0xE4C1: 0x83FD, + 0xE4C2: 0x8403, + 0xE4C3: 0x83D8, + 0xE4C4: 0x840B, + 0xE4C5: 0x83C1, + 0xE4C6: 0x83F7, + 0xE4C7: 0x8407, + 0xE4C8: 0x83E0, + 0xE4C9: 0x83F2, + 0xE4CA: 0x840D, + 0xE4CB: 0x8422, + 0xE4CC: 0x8420, + 0xE4CD: 0x83BD, + 0xE4CE: 0x8438, + 0xE4CF: 0x8506, + 0xE4D0: 0x83FB, + 0xE4D1: 0x846D, + 0xE4D2: 0x842A, + 0xE4D3: 0x843C, + 0xE4D4: 0x855A, + 0xE4D5: 0x8484, + 0xE4D6: 0x8477, + 0xE4D7: 0x846B, + 0xE4D8: 0x84AD, + 0xE4D9: 0x846E, + 0xE4DA: 0x8482, + 0xE4DB: 0x8469, + 0xE4DC: 0x8446, + 0xE4DD: 0x842C, + 0xE4DE: 0x846F, + 0xE4DF: 0x8479, + 0xE4E0: 0x8435, + 0xE4E1: 0x84CA, + 0xE4E2: 0x8462, + 0xE4E3: 0x84B9, + 0xE4E4: 0x84BF, + 0xE4E5: 0x849F, + 0xE4E6: 0x84D9, + 0xE4E7: 0x84CD, + 0xE4E8: 0x84BB, + 0xE4E9: 0x84DA, + 0xE4EA: 0x84D0, + 0xE4EB: 0x84C1, + 0xE4EC: 0x84C6, + 0xE4ED: 0x84D6, + 0xE4EE: 0x84A1, + 0xE4EF: 0x8521, + 0xE4F0: 0x84FF, + 0xE4F1: 0x84F4, + 0xE4F2: 0x8517, + 0xE4F3: 0x8518, + 0xE4F4: 0x852C, + 0xE4F5: 0x851F, + 0xE4F6: 0x8515, + 0xE4F7: 0x8514, + 0xE4F8: 0x84FC, + 0xE4F9: 0x8540, + 0xE4FA: 0x8563, + 0xE4FB: 0x8558, + 0xE4FC: 0x8548, + 0xE540: 0x8541, + 0xE541: 0x8602, + 0xE542: 0x854B, + 0xE543: 0x8555, + 0xE544: 0x8580, + 0xE545: 0x85A4, + 0xE546: 0x8588, + 0xE547: 0x8591, + 0xE548: 0x858A, + 0xE549: 0x85A8, + 0xE54A: 0x856D, + 0xE54B: 0x8594, + 0xE54C: 0x859B, + 0xE54D: 0x85EA, + 0xE54E: 0x8587, + 0xE54F: 0x859C, + 0xE550: 0x8577, + 0xE551: 0x857E, + 0xE552: 0x8590, + 0xE553: 0x85C9, + 0xE554: 0x85BA, + 0xE555: 0x85CF, + 0xE556: 0x85B9, + 0xE557: 0x85D0, + 0xE558: 0x85D5, + 0xE559: 0x85DD, + 0xE55A: 0x85E5, + 0xE55B: 0x85DC, + 0xE55C: 0x85F9, + 0xE55D: 0x860A, + 0xE55E: 0x8613, + 0xE55F: 0x860B, + 0xE560: 0x85FE, + 0xE561: 0x85FA, + 0xE562: 0x8606, + 0xE563: 0x8622, + 0xE564: 0x861A, + 0xE565: 0x8630, + 0xE566: 0x863F, + 0xE567: 0x864D, + 0xE568: 0x4E55, + 0xE569: 0x8654, + 0xE56A: 0x865F, + 0xE56B: 0x8667, + 0xE56C: 0x8671, + 0xE56D: 0x8693, + 0xE56E: 0x86A3, + 0xE56F: 0x86A9, + 0xE570: 0x86AA, + 0xE571: 0x868B, + 0xE572: 0x868C, + 0xE573: 0x86B6, + 0xE574: 0x86AF, + 0xE575: 0x86C4, + 0xE576: 0x86C6, + 0xE577: 0x86B0, + 0xE578: 0x86C9, + 0xE579: 0x8823, + 0xE57A: 0x86AB, + 0xE57B: 0x86D4, + 0xE57C: 0x86DE, + 0xE57D: 0x86E9, + 0xE57E: 0x86EC, + 0xE580: 0x86DF, + 0xE581: 0x86DB, + 0xE582: 0x86EF, + 0xE583: 0x8712, + 0xE584: 0x8706, + 0xE585: 0x8708, + 0xE586: 0x8700, + 0xE587: 0x8703, + 0xE588: 0x86FB, + 0xE589: 0x8711, + 0xE58A: 0x8709, + 0xE58B: 0x870D, + 0xE58C: 0x86F9, + 0xE58D: 0x870A, + 0xE58E: 0x8734, + 0xE58F: 0x873F, + 0xE590: 0x8737, + 0xE591: 0x873B, + 0xE592: 0x8725, + 0xE593: 0x8729, + 0xE594: 0x871A, + 0xE595: 0x8760, + 0xE596: 0x875F, + 0xE597: 0x8778, + 0xE598: 0x874C, + 0xE599: 0x874E, + 0xE59A: 0x8774, + 0xE59B: 0x8757, + 0xE59C: 0x8768, + 0xE59D: 0x876E, + 0xE59E: 0x8759, + 0xE59F: 0x8753, + 0xE5A0: 0x8763, + 0xE5A1: 0x876A, + 0xE5A2: 0x8805, + 0xE5A3: 0x87A2, + 0xE5A4: 0x879F, + 0xE5A5: 0x8782, + 0xE5A6: 0x87AF, + 0xE5A7: 0x87CB, + 0xE5A8: 0x87BD, + 0xE5A9: 0x87C0, + 0xE5AA: 0x87D0, + 0xE5AB: 0x96D6, + 0xE5AC: 0x87AB, + 0xE5AD: 0x87C4, + 0xE5AE: 0x87B3, + 0xE5AF: 0x87C7, + 0xE5B0: 0x87C6, + 0xE5B1: 0x87BB, + 0xE5B2: 0x87EF, + 0xE5B3: 0x87F2, + 0xE5B4: 0x87E0, + 0xE5B5: 0x880F, + 0xE5B6: 0x880D, + 0xE5B7: 0x87FE, + 0xE5B8: 0x87F6, + 0xE5B9: 0x87F7, + 0xE5BA: 0x880E, + 0xE5BB: 0x87D2, + 0xE5BC: 0x8811, + 0xE5BD: 0x8816, + 0xE5BE: 0x8815, + 0xE5BF: 0x8822, + 0xE5C0: 0x8821, + 0xE5C1: 0x8831, + 0xE5C2: 0x8836, + 0xE5C3: 0x8839, + 0xE5C4: 0x8827, + 0xE5C5: 0x883B, + 0xE5C6: 0x8844, + 0xE5C7: 0x8842, + 0xE5C8: 0x8852, + 0xE5C9: 0x8859, + 0xE5CA: 0x885E, + 0xE5CB: 0x8862, + 0xE5CC: 0x886B, + 0xE5CD: 0x8881, + 0xE5CE: 0x887E, + 0xE5CF: 0x889E, + 0xE5D0: 0x8875, + 0xE5D1: 0x887D, + 0xE5D2: 0x88B5, + 0xE5D3: 0x8872, + 0xE5D4: 0x8882, + 0xE5D5: 0x8897, + 0xE5D6: 0x8892, + 0xE5D7: 0x88AE, + 0xE5D8: 0x8899, + 0xE5D9: 0x88A2, + 0xE5DA: 0x888D, + 0xE5DB: 0x88A4, + 0xE5DC: 0x88B0, + 0xE5DD: 0x88BF, + 0xE5DE: 0x88B1, + 0xE5DF: 0x88C3, + 0xE5E0: 0x88C4, + 0xE5E1: 0x88D4, + 0xE5E2: 0x88D8, + 0xE5E3: 0x88D9, + 0xE5E4: 0x88DD, + 0xE5E5: 0x88F9, + 0xE5E6: 0x8902, + 0xE5E7: 0x88FC, + 0xE5E8: 0x88F4, + 0xE5E9: 0x88E8, + 0xE5EA: 0x88F2, + 0xE5EB: 0x8904, + 0xE5EC: 0x890C, + 0xE5ED: 0x890A, + 0xE5EE: 0x8913, + 0xE5EF: 0x8943, + 0xE5F0: 0x891E, + 0xE5F1: 0x8925, + 0xE5F2: 0x892A, + 0xE5F3: 0x892B, + 0xE5F4: 0x8941, + 0xE5F5: 0x8944, + 0xE5F6: 0x893B, + 0xE5F7: 0x8936, + 0xE5F8: 0x8938, + 0xE5F9: 0x894C, + 0xE5FA: 0x891D, + 0xE5FB: 0x8960, + 0xE5FC: 0x895E, + 0xE640: 0x8966, + 0xE641: 0x8964, + 0xE642: 0x896D, + 0xE643: 0x896A, + 0xE644: 0x896F, + 0xE645: 0x8974, + 0xE646: 0x8977, + 0xE647: 0x897E, + 0xE648: 0x8983, + 0xE649: 0x8988, + 0xE64A: 0x898A, + 0xE64B: 0x8993, + 0xE64C: 0x8998, + 0xE64D: 0x89A1, + 0xE64E: 0x89A9, + 0xE64F: 0x89A6, + 0xE650: 0x89AC, + 0xE651: 0x89AF, + 0xE652: 0x89B2, + 0xE653: 0x89BA, + 0xE654: 0x89BD, + 0xE655: 0x89BF, + 0xE656: 0x89C0, + 0xE657: 0x89DA, + 0xE658: 0x89DC, + 0xE659: 0x89DD, + 0xE65A: 0x89E7, + 0xE65B: 0x89F4, + 0xE65C: 0x89F8, + 0xE65D: 0x8A03, + 0xE65E: 0x8A16, + 0xE65F: 0x8A10, + 0xE660: 0x8A0C, + 0xE661: 0x8A1B, + 0xE662: 0x8A1D, + 0xE663: 0x8A25, + 0xE664: 0x8A36, + 0xE665: 0x8A41, + 0xE666: 0x8A5B, + 0xE667: 0x8A52, + 0xE668: 0x8A46, + 0xE669: 0x8A48, + 0xE66A: 0x8A7C, + 0xE66B: 0x8A6D, + 0xE66C: 0x8A6C, + 0xE66D: 0x8A62, + 0xE66E: 0x8A85, + 0xE66F: 0x8A82, + 0xE670: 0x8A84, + 0xE671: 0x8AA8, + 0xE672: 0x8AA1, + 0xE673: 0x8A91, + 0xE674: 0x8AA5, + 0xE675: 0x8AA6, + 0xE676: 0x8A9A, + 0xE677: 0x8AA3, + 0xE678: 0x8AC4, + 0xE679: 0x8ACD, + 0xE67A: 0x8AC2, + 0xE67B: 0x8ADA, + 0xE67C: 0x8AEB, + 0xE67D: 0x8AF3, + 0xE67E: 0x8AE7, + 0xE680: 0x8AE4, + 0xE681: 0x8AF1, + 0xE682: 0x8B14, + 0xE683: 0x8AE0, + 0xE684: 0x8AE2, + 0xE685: 0x8AF7, + 0xE686: 0x8ADE, + 0xE687: 0x8ADB, + 0xE688: 0x8B0C, + 0xE689: 0x8B07, + 0xE68A: 0x8B1A, + 0xE68B: 0x8AE1, + 0xE68C: 0x8B16, + 0xE68D: 0x8B10, + 0xE68E: 0x8B17, + 0xE68F: 0x8B20, + 0xE690: 0x8B33, + 0xE691: 0x97AB, + 0xE692: 0x8B26, + 0xE693: 0x8B2B, + 0xE694: 0x8B3E, + 0xE695: 0x8B28, + 0xE696: 0x8B41, + 0xE697: 0x8B4C, + 0xE698: 0x8B4F, + 0xE699: 0x8B4E, + 0xE69A: 0x8B49, + 0xE69B: 0x8B56, + 0xE69C: 0x8B5B, + 0xE69D: 0x8B5A, + 0xE69E: 0x8B6B, + 0xE69F: 0x8B5F, + 0xE6A0: 0x8B6C, + 0xE6A1: 0x8B6F, + 0xE6A2: 0x8B74, + 0xE6A3: 0x8B7D, + 0xE6A4: 0x8B80, + 0xE6A5: 0x8B8C, + 0xE6A6: 0x8B8E, + 0xE6A7: 0x8B92, + 0xE6A8: 0x8B93, + 0xE6A9: 0x8B96, + 0xE6AA: 0x8B99, + 0xE6AB: 0x8B9A, + 0xE6AC: 0x8C3A, + 0xE6AD: 0x8C41, + 0xE6AE: 0x8C3F, + 0xE6AF: 0x8C48, + 0xE6B0: 0x8C4C, + 0xE6B1: 0x8C4E, + 0xE6B2: 0x8C50, + 0xE6B3: 0x8C55, + 0xE6B4: 0x8C62, + 0xE6B5: 0x8C6C, + 0xE6B6: 0x8C78, + 0xE6B7: 0x8C7A, + 0xE6B8: 0x8C82, + 0xE6B9: 0x8C89, + 0xE6BA: 0x8C85, + 0xE6BB: 0x8C8A, + 0xE6BC: 0x8C8D, + 0xE6BD: 0x8C8E, + 0xE6BE: 0x8C94, + 0xE6BF: 0x8C7C, + 0xE6C0: 0x8C98, + 0xE6C1: 0x621D, + 0xE6C2: 0x8CAD, + 0xE6C3: 0x8CAA, + 0xE6C4: 0x8CBD, + 0xE6C5: 0x8CB2, + 0xE6C6: 0x8CB3, + 0xE6C7: 0x8CAE, + 0xE6C8: 0x8CB6, + 0xE6C9: 0x8CC8, + 0xE6CA: 0x8CC1, + 0xE6CB: 0x8CE4, + 0xE6CC: 0x8CE3, + 0xE6CD: 0x8CDA, + 0xE6CE: 0x8CFD, + 0xE6CF: 0x8CFA, + 0xE6D0: 0x8CFB, + 0xE6D1: 0x8D04, + 0xE6D2: 0x8D05, + 0xE6D3: 0x8D0A, + 0xE6D4: 0x8D07, + 0xE6D5: 0x8D0F, + 0xE6D6: 0x8D0D, + 0xE6D7: 0x8D10, + 0xE6D8: 0x9F4E, + 0xE6D9: 0x8D13, + 0xE6DA: 0x8CCD, + 0xE6DB: 0x8D14, + 0xE6DC: 0x8D16, + 0xE6DD: 0x8D67, + 0xE6DE: 0x8D6D, + 0xE6DF: 0x8D71, + 0xE6E0: 0x8D73, + 0xE6E1: 0x8D81, + 0xE6E2: 0x8D99, + 0xE6E3: 0x8DC2, + 0xE6E4: 0x8DBE, + 0xE6E5: 0x8DBA, + 0xE6E6: 0x8DCF, + 0xE6E7: 0x8DDA, + 0xE6E8: 0x8DD6, + 0xE6E9: 0x8DCC, + 0xE6EA: 0x8DDB, + 0xE6EB: 0x8DCB, + 0xE6EC: 0x8DEA, + 0xE6ED: 0x8DEB, + 0xE6EE: 0x8DDF, + 0xE6EF: 0x8DE3, + 0xE6F0: 0x8DFC, + 0xE6F1: 0x8E08, + 0xE6F2: 0x8E09, + 0xE6F3: 0x8DFF, + 0xE6F4: 0x8E1D, + 0xE6F5: 0x8E1E, + 0xE6F6: 0x8E10, + 0xE6F7: 0x8E1F, + 0xE6F8: 0x8E42, + 0xE6F9: 0x8E35, + 0xE6FA: 0x8E30, + 0xE6FB: 0x8E34, + 0xE6FC: 0x8E4A, + 0xE740: 0x8E47, + 0xE741: 0x8E49, + 0xE742: 0x8E4C, + 0xE743: 0x8E50, + 0xE744: 0x8E48, + 0xE745: 0x8E59, + 0xE746: 0x8E64, + 0xE747: 0x8E60, + 0xE748: 0x8E2A, + 0xE749: 0x8E63, + 0xE74A: 0x8E55, + 0xE74B: 0x8E76, + 0xE74C: 0x8E72, + 0xE74D: 0x8E7C, + 0xE74E: 0x8E81, + 0xE74F: 0x8E87, + 0xE750: 0x8E85, + 0xE751: 0x8E84, + 0xE752: 0x8E8B, + 0xE753: 0x8E8A, + 0xE754: 0x8E93, + 0xE755: 0x8E91, + 0xE756: 0x8E94, + 0xE757: 0x8E99, + 0xE758: 0x8EAA, + 0xE759: 0x8EA1, + 0xE75A: 0x8EAC, + 0xE75B: 0x8EB0, + 0xE75C: 0x8EC6, + 0xE75D: 0x8EB1, + 0xE75E: 0x8EBE, + 0xE75F: 0x8EC5, + 0xE760: 0x8EC8, + 0xE761: 0x8ECB, + 0xE762: 0x8EDB, + 0xE763: 0x8EE3, + 0xE764: 0x8EFC, + 0xE765: 0x8EFB, + 0xE766: 0x8EEB, + 0xE767: 0x8EFE, + 0xE768: 0x8F0A, + 0xE769: 0x8F05, + 0xE76A: 0x8F15, + 0xE76B: 0x8F12, + 0xE76C: 0x8F19, + 0xE76D: 0x8F13, + 0xE76E: 0x8F1C, + 0xE76F: 0x8F1F, + 0xE770: 0x8F1B, + 0xE771: 0x8F0C, + 0xE772: 0x8F26, + 0xE773: 0x8F33, + 0xE774: 0x8F3B, + 0xE775: 0x8F39, + 0xE776: 0x8F45, + 0xE777: 0x8F42, + 0xE778: 0x8F3E, + 0xE779: 0x8F4C, + 0xE77A: 0x8F49, + 0xE77B: 0x8F46, + 0xE77C: 0x8F4E, + 0xE77D: 0x8F57, + 0xE77E: 0x8F5C, + 0xE780: 0x8F62, + 0xE781: 0x8F63, + 0xE782: 0x8F64, + 0xE783: 0x8F9C, + 0xE784: 0x8F9F, + 0xE785: 0x8FA3, + 0xE786: 0x8FAD, + 0xE787: 0x8FAF, + 0xE788: 0x8FB7, + 0xE789: 0x8FDA, + 0xE78A: 0x8FE5, + 0xE78B: 0x8FE2, + 0xE78C: 0x8FEA, + 0xE78D: 0x8FEF, + 0xE78E: 0x9087, + 0xE78F: 0x8FF4, + 0xE790: 0x9005, + 0xE791: 0x8FF9, + 0xE792: 0x8FFA, + 0xE793: 0x9011, + 0xE794: 0x9015, + 0xE795: 0x9021, + 0xE796: 0x900D, + 0xE797: 0x901E, + 0xE798: 0x9016, + 0xE799: 0x900B, + 0xE79A: 0x9027, + 0xE79B: 0x9036, + 0xE79C: 0x9035, + 0xE79D: 0x9039, + 0xE79E: 0x8FF8, + 0xE79F: 0x904F, + 0xE7A0: 0x9050, + 0xE7A1: 0x9051, + 0xE7A2: 0x9052, + 0xE7A3: 0x900E, + 0xE7A4: 0x9049, + 0xE7A5: 0x903E, + 0xE7A6: 0x9056, + 0xE7A7: 0x9058, + 0xE7A8: 0x905E, + 0xE7A9: 0x9068, + 0xE7AA: 0x906F, + 0xE7AB: 0x9076, + 0xE7AC: 0x96A8, + 0xE7AD: 0x9072, + 0xE7AE: 0x9082, + 0xE7AF: 0x907D, + 0xE7B0: 0x9081, + 0xE7B1: 0x9080, + 0xE7B2: 0x908A, + 0xE7B3: 0x9089, + 0xE7B4: 0x908F, + 0xE7B5: 0x90A8, + 0xE7B6: 0x90AF, + 0xE7B7: 0x90B1, + 0xE7B8: 0x90B5, + 0xE7B9: 0x90E2, + 0xE7BA: 0x90E4, + 0xE7BB: 0x6248, + 0xE7BC: 0x90DB, + 0xE7BD: 0x9102, + 0xE7BE: 0x9112, + 0xE7BF: 0x9119, + 0xE7C0: 0x9132, + 0xE7C1: 0x9130, + 0xE7C2: 0x914A, + 0xE7C3: 0x9156, + 0xE7C4: 0x9158, + 0xE7C5: 0x9163, + 0xE7C6: 0x9165, + 0xE7C7: 0x9169, + 0xE7C8: 0x9173, + 0xE7C9: 0x9172, + 0xE7CA: 0x918B, + 0xE7CB: 0x9189, + 0xE7CC: 0x9182, + 0xE7CD: 0x91A2, + 0xE7CE: 0x91AB, + 0xE7CF: 0x91AF, + 0xE7D0: 0x91AA, + 0xE7D1: 0x91B5, + 0xE7D2: 0x91B4, + 0xE7D3: 0x91BA, + 0xE7D4: 0x91C0, + 0xE7D5: 0x91C1, + 0xE7D6: 0x91C9, + 0xE7D7: 0x91CB, + 0xE7D8: 0x91D0, + 0xE7D9: 0x91D6, + 0xE7DA: 0x91DF, + 0xE7DB: 0x91E1, + 0xE7DC: 0x91DB, + 0xE7DD: 0x91FC, + 0xE7DE: 0x91F5, + 0xE7DF: 0x91F6, + 0xE7E0: 0x921E, + 0xE7E1: 0x91FF, + 0xE7E2: 0x9214, + 0xE7E3: 0x922C, + 0xE7E4: 0x9215, + 0xE7E5: 0x9211, + 0xE7E6: 0x925E, + 0xE7E7: 0x9257, + 0xE7E8: 0x9245, + 0xE7E9: 0x9249, + 0xE7EA: 0x9264, + 0xE7EB: 0x9248, + 0xE7EC: 0x9295, + 0xE7ED: 0x923F, + 0xE7EE: 0x924B, + 0xE7EF: 0x9250, + 0xE7F0: 0x929C, + 0xE7F1: 0x9296, + 0xE7F2: 0x9293, + 0xE7F3: 0x929B, + 0xE7F4: 0x925A, + 0xE7F5: 0x92CF, + 0xE7F6: 0x92B9, + 0xE7F7: 0x92B7, + 0xE7F8: 0x92E9, + 0xE7F9: 0x930F, + 0xE7FA: 0x92FA, + 0xE7FB: 0x9344, + 0xE7FC: 0x932E, + 0xE840: 0x9319, + 0xE841: 0x9322, + 0xE842: 0x931A, + 0xE843: 0x9323, + 0xE844: 0x933A, + 0xE845: 0x9335, + 0xE846: 0x933B, + 0xE847: 0x935C, + 0xE848: 0x9360, + 0xE849: 0x937C, + 0xE84A: 0x936E, + 0xE84B: 0x9356, + 0xE84C: 0x93B0, + 0xE84D: 0x93AC, + 0xE84E: 0x93AD, + 0xE84F: 0x9394, + 0xE850: 0x93B9, + 0xE851: 0x93D6, + 0xE852: 0x93D7, + 0xE853: 0x93E8, + 0xE854: 0x93E5, + 0xE855: 0x93D8, + 0xE856: 0x93C3, + 0xE857: 0x93DD, + 0xE858: 0x93D0, + 0xE859: 0x93C8, + 0xE85A: 0x93E4, + 0xE85B: 0x941A, + 0xE85C: 0x9414, + 0xE85D: 0x9413, + 0xE85E: 0x9403, + 0xE85F: 0x9407, + 0xE860: 0x9410, + 0xE861: 0x9436, + 0xE862: 0x942B, + 0xE863: 0x9435, + 0xE864: 0x9421, + 0xE865: 0x943A, + 0xE866: 0x9441, + 0xE867: 0x9452, + 0xE868: 0x9444, + 0xE869: 0x945B, + 0xE86A: 0x9460, + 0xE86B: 0x9462, + 0xE86C: 0x945E, + 0xE86D: 0x946A, + 0xE86E: 0x9229, + 0xE86F: 0x9470, + 0xE870: 0x9475, + 0xE871: 0x9477, + 0xE872: 0x947D, + 0xE873: 0x945A, + 0xE874: 0x947C, + 0xE875: 0x947E, + 0xE876: 0x9481, + 0xE877: 0x947F, + 0xE878: 0x9582, + 0xE879: 0x9587, + 0xE87A: 0x958A, + 0xE87B: 0x9594, + 0xE87C: 0x9596, + 0xE87D: 0x9598, + 0xE87E: 0x9599, + 0xE880: 0x95A0, + 0xE881: 0x95A8, + 0xE882: 0x95A7, + 0xE883: 0x95AD, + 0xE884: 0x95BC, + 0xE885: 0x95BB, + 0xE886: 0x95B9, + 0xE887: 0x95BE, + 0xE888: 0x95CA, + 0xE889: 0x6FF6, + 0xE88A: 0x95C3, + 0xE88B: 0x95CD, + 0xE88C: 0x95CC, + 0xE88D: 0x95D5, + 0xE88E: 0x95D4, + 0xE88F: 0x95D6, + 0xE890: 0x95DC, + 0xE891: 0x95E1, + 0xE892: 0x95E5, + 0xE893: 0x95E2, + 0xE894: 0x9621, + 0xE895: 0x9628, + 0xE896: 0x962E, + 0xE897: 0x962F, + 0xE898: 0x9642, + 0xE899: 0x964C, + 0xE89A: 0x964F, + 0xE89B: 0x964B, + 0xE89C: 0x9677, + 0xE89D: 0x965C, + 0xE89E: 0x965E, + 0xE89F: 0x965D, + 0xE8A0: 0x965F, + 0xE8A1: 0x9666, + 0xE8A2: 0x9672, + 0xE8A3: 0x966C, + 0xE8A4: 0x968D, + 0xE8A5: 0x9698, + 0xE8A6: 0x9695, + 0xE8A7: 0x9697, + 0xE8A8: 0x96AA, + 0xE8A9: 0x96A7, + 0xE8AA: 0x96B1, + 0xE8AB: 0x96B2, + 0xE8AC: 0x96B0, + 0xE8AD: 0x96B4, + 0xE8AE: 0x96B6, + 0xE8AF: 0x96B8, + 0xE8B0: 0x96B9, + 0xE8B1: 0x96CE, + 0xE8B2: 0x96CB, + 0xE8B3: 0x96C9, + 0xE8B4: 0x96CD, + 0xE8B5: 0x894D, + 0xE8B6: 0x96DC, + 0xE8B7: 0x970D, + 0xE8B8: 0x96D5, + 0xE8B9: 0x96F9, + 0xE8BA: 0x9704, + 0xE8BB: 0x9706, + 0xE8BC: 0x9708, + 0xE8BD: 0x9713, + 0xE8BE: 0x970E, + 0xE8BF: 0x9711, + 0xE8C0: 0x970F, + 0xE8C1: 0x9716, + 0xE8C2: 0x9719, + 0xE8C3: 0x9724, + 0xE8C4: 0x972A, + 0xE8C5: 0x9730, + 0xE8C6: 0x9739, + 0xE8C7: 0x973D, + 0xE8C8: 0x973E, + 0xE8C9: 0x9744, + 0xE8CA: 0x9746, + 0xE8CB: 0x9748, + 0xE8CC: 0x9742, + 0xE8CD: 0x9749, + 0xE8CE: 0x975C, + 0xE8CF: 0x9760, + 0xE8D0: 0x9764, + 0xE8D1: 0x9766, + 0xE8D2: 0x9768, + 0xE8D3: 0x52D2, + 0xE8D4: 0x976B, + 0xE8D5: 0x9771, + 0xE8D6: 0x9779, + 0xE8D7: 0x9785, + 0xE8D8: 0x977C, + 0xE8D9: 0x9781, + 0xE8DA: 0x977A, + 0xE8DB: 0x9786, + 0xE8DC: 0x978B, + 0xE8DD: 0x978F, + 0xE8DE: 0x9790, + 0xE8DF: 0x979C, + 0xE8E0: 0x97A8, + 0xE8E1: 0x97A6, + 0xE8E2: 0x97A3, + 0xE8E3: 0x97B3, + 0xE8E4: 0x97B4, + 0xE8E5: 0x97C3, + 0xE8E6: 0x97C6, + 0xE8E7: 0x97C8, + 0xE8E8: 0x97CB, + 0xE8E9: 0x97DC, + 0xE8EA: 0x97ED, + 0xE8EB: 0x9F4F, + 0xE8EC: 0x97F2, + 0xE8ED: 0x7ADF, + 0xE8EE: 0x97F6, + 0xE8EF: 0x97F5, + 0xE8F0: 0x980F, + 0xE8F1: 0x980C, + 0xE8F2: 0x9838, + 0xE8F3: 0x9824, + 0xE8F4: 0x9821, + 0xE8F5: 0x9837, + 0xE8F6: 0x983D, + 0xE8F7: 0x9846, + 0xE8F8: 0x984F, + 0xE8F9: 0x984B, + 0xE8FA: 0x986B, + 0xE8FB: 0x986F, + 0xE8FC: 0x9870, + 0xE940: 0x9871, + 0xE941: 0x9874, + 0xE942: 0x9873, + 0xE943: 0x98AA, + 0xE944: 0x98AF, + 0xE945: 0x98B1, + 0xE946: 0x98B6, + 0xE947: 0x98C4, + 0xE948: 0x98C3, + 0xE949: 0x98C6, + 0xE94A: 0x98E9, + 0xE94B: 0x98EB, + 0xE94C: 0x9903, + 0xE94D: 0x9909, + 0xE94E: 0x9912, + 0xE94F: 0x9914, + 0xE950: 0x9918, + 0xE951: 0x9921, + 0xE952: 0x991D, + 0xE953: 0x991E, + 0xE954: 0x9924, + 0xE955: 0x9920, + 0xE956: 0x992C, + 0xE957: 0x992E, + 0xE958: 0x993D, + 0xE959: 0x993E, + 0xE95A: 0x9942, + 0xE95B: 0x9949, + 0xE95C: 0x9945, + 0xE95D: 0x9950, + 0xE95E: 0x994B, + 0xE95F: 0x9951, + 0xE960: 0x9952, + 0xE961: 0x994C, + 0xE962: 0x9955, + 0xE963: 0x9997, + 0xE964: 0x9998, + 0xE965: 0x99A5, + 0xE966: 0x99AD, + 0xE967: 0x99AE, + 0xE968: 0x99BC, + 0xE969: 0x99DF, + 0xE96A: 0x99DB, + 0xE96B: 0x99DD, + 0xE96C: 0x99D8, + 0xE96D: 0x99D1, + 0xE96E: 0x99ED, + 0xE96F: 0x99EE, + 0xE970: 0x99F1, + 0xE971: 0x99F2, + 0xE972: 0x99FB, + 0xE973: 0x99F8, + 0xE974: 0x9A01, + 0xE975: 0x9A0F, + 0xE976: 0x9A05, + 0xE977: 0x99E2, + 0xE978: 0x9A19, + 0xE979: 0x9A2B, + 0xE97A: 0x9A37, + 0xE97B: 0x9A45, + 0xE97C: 0x9A42, + 0xE97D: 0x9A40, + 0xE97E: 0x9A43, + 0xE980: 0x9A3E, + 0xE981: 0x9A55, + 0xE982: 0x9A4D, + 0xE983: 0x9A5B, + 0xE984: 0x9A57, + 0xE985: 0x9A5F, + 0xE986: 0x9A62, + 0xE987: 0x9A65, + 0xE988: 0x9A64, + 0xE989: 0x9A69, + 0xE98A: 0x9A6B, + 0xE98B: 0x9A6A, + 0xE98C: 0x9AAD, + 0xE98D: 0x9AB0, + 0xE98E: 0x9ABC, + 0xE98F: 0x9AC0, + 0xE990: 0x9ACF, + 0xE991: 0x9AD1, + 0xE992: 0x9AD3, + 0xE993: 0x9AD4, + 0xE994: 0x9ADE, + 0xE995: 0x9ADF, + 0xE996: 0x9AE2, + 0xE997: 0x9AE3, + 0xE998: 0x9AE6, + 0xE999: 0x9AEF, + 0xE99A: 0x9AEB, + 0xE99B: 0x9AEE, + 0xE99C: 0x9AF4, + 0xE99D: 0x9AF1, + 0xE99E: 0x9AF7, + 0xE99F: 0x9AFB, + 0xE9A0: 0x9B06, + 0xE9A1: 0x9B18, + 0xE9A2: 0x9B1A, + 0xE9A3: 0x9B1F, + 0xE9A4: 0x9B22, + 0xE9A5: 0x9B23, + 0xE9A6: 0x9B25, + 0xE9A7: 0x9B27, + 0xE9A8: 0x9B28, + 0xE9A9: 0x9B29, + 0xE9AA: 0x9B2A, + 0xE9AB: 0x9B2E, + 0xE9AC: 0x9B2F, + 0xE9AD: 0x9B32, + 0xE9AE: 0x9B44, + 0xE9AF: 0x9B43, + 0xE9B0: 0x9B4F, + 0xE9B1: 0x9B4D, + 0xE9B2: 0x9B4E, + 0xE9B3: 0x9B51, + 0xE9B4: 0x9B58, + 0xE9B5: 0x9B74, + 0xE9B6: 0x9B93, + 0xE9B7: 0x9B83, + 0xE9B8: 0x9B91, + 0xE9B9: 0x9B96, + 0xE9BA: 0x9B97, + 0xE9BB: 0x9B9F, + 0xE9BC: 0x9BA0, + 0xE9BD: 0x9BA8, + 0xE9BE: 0x9BB4, + 0xE9BF: 0x9BC0, + 0xE9C0: 0x9BCA, + 0xE9C1: 0x9BB9, + 0xE9C2: 0x9BC6, + 0xE9C3: 0x9BCF, + 0xE9C4: 0x9BD1, + 0xE9C5: 0x9BD2, + 0xE9C6: 0x9BE3, + 0xE9C7: 0x9BE2, + 0xE9C8: 0x9BE4, + 0xE9C9: 0x9BD4, + 0xE9CA: 0x9BE1, + 0xE9CB: 0x9C3A, + 0xE9CC: 0x9BF2, + 0xE9CD: 0x9BF1, + 0xE9CE: 0x9BF0, + 0xE9CF: 0x9C15, + 0xE9D0: 0x9C14, + 0xE9D1: 0x9C09, + 0xE9D2: 0x9C13, + 0xE9D3: 0x9C0C, + 0xE9D4: 0x9C06, + 0xE9D5: 0x9C08, + 0xE9D6: 0x9C12, + 0xE9D7: 0x9C0A, + 0xE9D8: 0x9C04, + 0xE9D9: 0x9C2E, + 0xE9DA: 0x9C1B, + 0xE9DB: 0x9C25, + 0xE9DC: 0x9C24, + 0xE9DD: 0x9C21, + 0xE9DE: 0x9C30, + 0xE9DF: 0x9C47, + 0xE9E0: 0x9C32, + 0xE9E1: 0x9C46, + 0xE9E2: 0x9C3E, + 0xE9E3: 0x9C5A, + 0xE9E4: 0x9C60, + 0xE9E5: 0x9C67, + 0xE9E6: 0x9C76, + 0xE9E7: 0x9C78, + 0xE9E8: 0x9CE7, + 0xE9E9: 0x9CEC, + 0xE9EA: 0x9CF0, + 0xE9EB: 0x9D09, + 0xE9EC: 0x9D08, + 0xE9ED: 0x9CEB, + 0xE9EE: 0x9D03, + 0xE9EF: 0x9D06, + 0xE9F0: 0x9D2A, + 0xE9F1: 0x9D26, + 0xE9F2: 0x9DAF, + 0xE9F3: 0x9D23, + 0xE9F4: 0x9D1F, + 0xE9F5: 0x9D44, + 0xE9F6: 0x9D15, + 0xE9F7: 0x9D12, + 0xE9F8: 0x9D41, + 0xE9F9: 0x9D3F, + 0xE9FA: 0x9D3E, + 0xE9FB: 0x9D46, + 0xE9FC: 0x9D48, + 0xEA40: 0x9D5D, + 0xEA41: 0x9D5E, + 0xEA42: 0x9D64, + 0xEA43: 0x9D51, + 0xEA44: 0x9D50, + 0xEA45: 0x9D59, + 0xEA46: 0x9D72, + 0xEA47: 0x9D89, + 0xEA48: 0x9D87, + 0xEA49: 0x9DAB, + 0xEA4A: 0x9D6F, + 0xEA4B: 0x9D7A, + 0xEA4C: 0x9D9A, + 0xEA4D: 0x9DA4, + 0xEA4E: 0x9DA9, + 0xEA4F: 0x9DB2, + 0xEA50: 0x9DC4, + 0xEA51: 0x9DC1, + 0xEA52: 0x9DBB, + 0xEA53: 0x9DB8, + 0xEA54: 0x9DBA, + 0xEA55: 0x9DC6, + 0xEA56: 0x9DCF, + 0xEA57: 0x9DC2, + 0xEA58: 0x9DD9, + 0xEA59: 0x9DD3, + 0xEA5A: 0x9DF8, + 0xEA5B: 0x9DE6, + 0xEA5C: 0x9DED, + 0xEA5D: 0x9DEF, + 0xEA5E: 0x9DFD, + 0xEA5F: 0x9E1A, + 0xEA60: 0x9E1B, + 0xEA61: 0x9E1E, + 0xEA62: 0x9E75, + 0xEA63: 0x9E79, + 0xEA64: 0x9E7D, + 0xEA65: 0x9E81, + 0xEA66: 0x9E88, + 0xEA67: 0x9E8B, + 0xEA68: 0x9E8C, + 0xEA69: 0x9E92, + 0xEA6A: 0x9E95, + 0xEA6B: 0x9E91, + 0xEA6C: 0x9E9D, + 0xEA6D: 0x9EA5, + 0xEA6E: 0x9EA9, + 0xEA6F: 0x9EB8, + 0xEA70: 0x9EAA, + 0xEA71: 0x9EAD, + 0xEA72: 0x9761, + 0xEA73: 0x9ECC, + 0xEA74: 0x9ECE, + 0xEA75: 0x9ECF, + 0xEA76: 0x9ED0, + 0xEA77: 0x9ED4, + 0xEA78: 0x9EDC, + 0xEA79: 0x9EDE, + 0xEA7A: 0x9EDD, + 0xEA7B: 0x9EE0, + 0xEA7C: 0x9EE5, + 0xEA7D: 0x9EE8, + 0xEA7E: 0x9EEF, + 0xEA80: 0x9EF4, + 0xEA81: 0x9EF6, + 0xEA82: 0x9EF7, + 0xEA83: 0x9EF9, + 0xEA84: 0x9EFB, + 0xEA85: 0x9EFC, + 0xEA86: 0x9EFD, + 0xEA87: 0x9F07, + 0xEA88: 0x9F08, + 0xEA89: 0x76B7, + 0xEA8A: 0x9F15, + 0xEA8B: 0x9F21, + 0xEA8C: 0x9F2C, + 0xEA8D: 0x9F3E, + 0xEA8E: 0x9F4A, + 0xEA8F: 0x9F52, + 0xEA90: 0x9F54, + 0xEA91: 0x9F63, + 0xEA92: 0x9F5F, + 0xEA93: 0x9F60, + 0xEA94: 0x9F61, + 0xEA95: 0x9F66, + 0xEA96: 0x9F67, + 0xEA97: 0x9F6C, + 0xEA98: 0x9F6A, + 0xEA99: 0x9F77, + 0xEA9A: 0x9F72, + 0xEA9B: 0x9F76, + 0xEA9C: 0x9F95, + 0xEA9D: 0x9F9C, + 0xEA9E: 0x9FA0, + 0xEA9F: 0x582F, + 0xEAA0: 0x69C7, + 0xEAA1: 0x9059, + 0xEAA2: 0x7464, + 0xEAA3: 0x51DC, + 0xEAA4: 0x7199, +}; diff --git a/jsQR/src/decoder/decoder.ts b/jsQR/src/decoder/decoder.ts new file mode 100644 index 0000000000000000000000000000000000000000..350c548463d01a63071979d43fc9c24254c0a82b --- /dev/null +++ b/jsQR/src/decoder/decoder.ts @@ -0,0 +1,350 @@ +import { BitMatrix } from "../BitMatrix"; +import { Point } from "../Point"; +import { decode as decodeData, DecodedQR } from "./decodeData"; +import { decode as rsDecode } from "./reedsolomon"; +import { Version, VERSIONS } from "./version"; + +// tslint:disable:no-bitwise +function numBitsDiffering(x: number, y: number) { + let z = x ^ y; + let bitCount = 0; + while (z) { + bitCount++; + z &= z - 1; + } + return bitCount; +} + +function pushBit(bit: any, byte: number) { + return (byte << 1) | bit; +} +// tslint:enable:no-bitwise + +const FORMAT_INFO_TABLE = [ + { bits: 0x5412, formatInfo: { errorCorrectionLevel: 1, dataMask: 0 } }, + { bits: 0x5125, formatInfo: { errorCorrectionLevel: 1, dataMask: 1 } }, + { bits: 0x5E7C, formatInfo: { errorCorrectionLevel: 1, dataMask: 2 } }, + { bits: 0x5B4B, formatInfo: { errorCorrectionLevel: 1, dataMask: 3 } }, + { bits: 0x45F9, formatInfo: { errorCorrectionLevel: 1, dataMask: 4 } }, + { bits: 0x40CE, formatInfo: { errorCorrectionLevel: 1, dataMask: 5 } }, + { bits: 0x4F97, formatInfo: { errorCorrectionLevel: 1, dataMask: 6 } }, + { bits: 0x4AA0, formatInfo: { errorCorrectionLevel: 1, dataMask: 7 } }, + { bits: 0x77C4, formatInfo: { errorCorrectionLevel: 0, dataMask: 0 } }, + { bits: 0x72F3, formatInfo: { errorCorrectionLevel: 0, dataMask: 1 } }, + { bits: 0x7DAA, formatInfo: { errorCorrectionLevel: 0, dataMask: 2 } }, + { bits: 0x789D, formatInfo: { errorCorrectionLevel: 0, dataMask: 3 } }, + { bits: 0x662F, formatInfo: { errorCorrectionLevel: 0, dataMask: 4 } }, + { bits: 0x6318, formatInfo: { errorCorrectionLevel: 0, dataMask: 5 } }, + { bits: 0x6C41, formatInfo: { errorCorrectionLevel: 0, dataMask: 6 } }, + { bits: 0x6976, formatInfo: { errorCorrectionLevel: 0, dataMask: 7 } }, + { bits: 0x1689, formatInfo: { errorCorrectionLevel: 3, dataMask: 0 } }, + { bits: 0x13BE, formatInfo: { errorCorrectionLevel: 3, dataMask: 1 } }, + { bits: 0x1CE7, formatInfo: { errorCorrectionLevel: 3, dataMask: 2 } }, + { bits: 0x19D0, formatInfo: { errorCorrectionLevel: 3, dataMask: 3 } }, + { bits: 0x0762, formatInfo: { errorCorrectionLevel: 3, dataMask: 4 } }, + { bits: 0x0255, formatInfo: { errorCorrectionLevel: 3, dataMask: 5 } }, + { bits: 0x0D0C, formatInfo: { errorCorrectionLevel: 3, dataMask: 6 } }, + { bits: 0x083B, formatInfo: { errorCorrectionLevel: 3, dataMask: 7 } }, + { bits: 0x355F, formatInfo: { errorCorrectionLevel: 2, dataMask: 0 } }, + { bits: 0x3068, formatInfo: { errorCorrectionLevel: 2, dataMask: 1 } }, + { bits: 0x3F31, formatInfo: { errorCorrectionLevel: 2, dataMask: 2 } }, + { bits: 0x3A06, formatInfo: { errorCorrectionLevel: 2, dataMask: 3 } }, + { bits: 0x24B4, formatInfo: { errorCorrectionLevel: 2, dataMask: 4 } }, + { bits: 0x2183, formatInfo: { errorCorrectionLevel: 2, dataMask: 5 } }, + { bits: 0x2EDA, formatInfo: { errorCorrectionLevel: 2, dataMask: 6 } }, + { bits: 0x2BED, formatInfo: { errorCorrectionLevel: 2, dataMask: 7 } }, +]; + +const DATA_MASKS = [ + (p: Point) => ((p.y + p.x) % 2) === 0, + (p: Point) => (p.y % 2) === 0, + (p: Point) => p.x % 3 === 0, + (p: Point) => (p.y + p.x) % 3 === 0, + (p: Point) => (Math.floor(p.y / 2) + Math.floor(p.x / 3)) % 2 === 0, + (p: Point) => ((p.x * p.y) % 2) + ((p.x * p.y) % 3) === 0, + (p: Point) => ((((p.y * p.x) % 2) + (p.y * p.x) % 3) % 2) === 0, + (p: Point) => ((((p.y + p.x) % 2) + (p.y * p.x) % 3) % 2) === 0, +]; + +interface FormatInformation { + errorCorrectionLevel: number; + dataMask: number; +} + +function buildFunctionPatternMask(version: Version): BitMatrix { + const dimension = 17 + 4 * version.versionNumber; + const matrix = BitMatrix.createEmpty(dimension, dimension); + + matrix.setRegion(0, 0, 9, 9, true); // Top left finder pattern + separator + format + matrix.setRegion(dimension - 8, 0, 8, 9, true); // Top right finder pattern + separator + format + matrix.setRegion(0, dimension - 8, 9, 8, true); // Bottom left finder pattern + separator + format + + // Alignment patterns + for (const x of version.alignmentPatternCenters) { + for (const y of version.alignmentPatternCenters) { + if (!(x === 6 && y === 6 || x === 6 && y === dimension - 7 || x === dimension - 7 && y === 6)) { + matrix.setRegion(x - 2, y - 2, 5, 5, true); + } + } + } + + matrix.setRegion(6, 9, 1, dimension - 17, true); // Vertical timing pattern + matrix.setRegion(9, 6, dimension - 17, 1, true); // Horizontal timing pattern + + if (version.versionNumber > 6) { + matrix.setRegion(dimension - 11, 0, 3, 6, true); // Version info, top right + matrix.setRegion(0, dimension - 11, 6, 3, true); // Version info, bottom left + } + + return matrix; +} + +function readCodewords(matrix: BitMatrix, version: Version, formatInfo: FormatInformation) { + const dataMask = DATA_MASKS[formatInfo.dataMask]; + const dimension = matrix.height; + + const functionPatternMask = buildFunctionPatternMask(version); + + const codewords: number[] = []; + let currentByte = 0; + let bitsRead = 0; + + // Read columns in pairs, from right to left + let readingUp = true; + for (let columnIndex = dimension - 1; columnIndex > 0; columnIndex -= 2) { + if (columnIndex === 6) { // Skip whole column with vertical alignment pattern; + columnIndex--; + } + for (let i = 0; i < dimension; i++) { + const y = readingUp ? dimension - 1 - i : i; + for (let columnOffset = 0; columnOffset < 2; columnOffset++) { + const x = columnIndex - columnOffset; + if (!functionPatternMask.get(x, y)) { + bitsRead++; + let bit = matrix.get(x, y); + if (dataMask({y, x})) { + bit = !bit; + } + currentByte = pushBit(bit, currentByte); + if (bitsRead === 8) { // Whole bytes + codewords.push(currentByte); + bitsRead = 0; + currentByte = 0; + } + } + } + } + readingUp = !readingUp; + } + return codewords; +} + +function readVersion(matrix: BitMatrix): Version { + const dimension = matrix.height; + + const provisionalVersion = Math.floor((dimension - 17) / 4); + if (provisionalVersion <= 6) { // 6 and under dont have version info in the QR code + return VERSIONS[provisionalVersion - 1]; + } + + let topRightVersionBits = 0; + for (let y = 5; y >= 0; y--) { + for (let x = dimension - 9; x >= dimension - 11; x--) { + topRightVersionBits = pushBit(matrix.get(x, y), topRightVersionBits); + } + } + + let bottomLeftVersionBits = 0; + for (let x = 5; x >= 0; x--) { + for (let y = dimension - 9; y >= dimension - 11; y--) { + bottomLeftVersionBits = pushBit(matrix.get(x, y), bottomLeftVersionBits); + } + } + + let bestDifference = Infinity; + let bestVersion: Version; + for (const version of VERSIONS) { + if (version.infoBits === topRightVersionBits || version.infoBits === bottomLeftVersionBits) { + return version; + } + + let difference = numBitsDiffering(topRightVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + + difference = numBitsDiffering(bottomLeftVersionBits, version.infoBits); + if (difference < bestDifference) { + bestVersion = version; + bestDifference = difference; + } + } + // We can tolerate up to 3 bits of error since no two version info codewords will + // differ in less than 8 bits. + if (bestDifference <= 3) { + return bestVersion; + } +} + +function readFormatInformation(matrix: BitMatrix) { + let topLeftFormatInfoBits = 0; + for (let x = 0; x <= 8; x++) { + if (x !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(x, 8), topLeftFormatInfoBits); + } + } + for (let y = 7; y >= 0; y--) { + if (y !== 6) { // Skip timing pattern bit + topLeftFormatInfoBits = pushBit(matrix.get(8, y), topLeftFormatInfoBits); + } + } + + const dimension = matrix.height; + let topRightBottomRightFormatInfoBits = 0; + for (let y = dimension - 1; y >= dimension - 7; y--) { // bottom left + topRightBottomRightFormatInfoBits = pushBit(matrix.get(8, y), topRightBottomRightFormatInfoBits); + } + for (let x = dimension - 8; x < dimension; x++) { // top right + topRightBottomRightFormatInfoBits = pushBit(matrix.get(x, 8), topRightBottomRightFormatInfoBits); + } + + let bestDifference = Infinity; + let bestFormatInfo = null; + for (const {bits, formatInfo} of FORMAT_INFO_TABLE) { + if (bits === topLeftFormatInfoBits || bits === topRightBottomRightFormatInfoBits) { + return formatInfo; + } + let difference = numBitsDiffering(topLeftFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + if (topLeftFormatInfoBits !== topRightBottomRightFormatInfoBits) { // also try the other option + difference = numBitsDiffering(topRightBottomRightFormatInfoBits, bits); + if (difference < bestDifference) { + bestFormatInfo = formatInfo; + bestDifference = difference; + } + } + } + // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match + if (bestDifference <= 3) { + return bestFormatInfo; + } + return null; +} + +function getDataBlocks(codewords: number[], version: Version, ecLevel: number) { + const ecInfo = version.errorCorrectionLevels[ecLevel]; + const dataBlocks: Array<{ + numDataCodewords: number; + codewords: number[]; + }> = []; + + let totalCodewords = 0; + ecInfo.ecBlocks.forEach(block => { + for (let i = 0; i < block.numBlocks; i++) { + dataBlocks.push({ numDataCodewords: block.dataCodewordsPerBlock, codewords: [] }); + totalCodewords += block.dataCodewordsPerBlock + ecInfo.ecCodewordsPerBlock; + } + }); + + // In some cases the QR code will be malformed enough that we pull off more or less than we should. + // If we pull off less there's nothing we can do. + // If we pull off more we can safely truncate + if (codewords.length < totalCodewords) { + return null; + } + codewords = codewords.slice(0, totalCodewords); + + const shortBlockSize = ecInfo.ecBlocks[0].dataCodewordsPerBlock; + // Pull codewords to fill the blocks up to the minimum size + for (let i = 0; i < shortBlockSize; i++) { + for (const dataBlock of dataBlocks) { + dataBlock.codewords.push(codewords.shift()); + } + } + + // If there are any large blocks, pull codewords to fill the last element of those + if (ecInfo.ecBlocks.length > 1) { + const smallBlockCount = ecInfo.ecBlocks[0].numBlocks; + const largeBlockCount = ecInfo.ecBlocks[1].numBlocks; + for (let i = 0; i < largeBlockCount; i++) { + dataBlocks[smallBlockCount + i].codewords.push(codewords.shift()); + } + } + + // Add the rest of the codewords to the blocks. These are the error correction codewords. + while (codewords.length > 0) { + for (const dataBlock of dataBlocks) { + dataBlock.codewords.push(codewords.shift()); + } + } + + return dataBlocks; +} + +function decodeMatrix(matrix: BitMatrix) { + const version = readVersion(matrix); + if (!version) { + return null; + } + + const formatInfo = readFormatInformation(matrix); + if (!formatInfo) { + return null; + } + + const codewords = readCodewords(matrix, version, formatInfo); + const dataBlocks = getDataBlocks(codewords, version, formatInfo.errorCorrectionLevel); + if (!dataBlocks) { + return null; + } + + // Count total number of data bytes + const totalBytes = dataBlocks.reduce((a, b) => a + b.numDataCodewords, 0); + const resultBytes = new Uint8ClampedArray(totalBytes); + + let resultIndex = 0; + for (const dataBlock of dataBlocks) { + /*const correctedBytes = rsDecode(dataBlock.codewords, dataBlock.codewords.length - dataBlock.numDataCodewords); + if (!correctedBytes) { + return null; + }*/ + + if(resultIndex == 0) { + console.log(dataBlock.codewords[0]); + } + + for (let i = 0; i < dataBlock.numDataCodewords; i++) { + resultBytes[resultIndex++] = dataBlock.codewords[i]; + } + } + + try { + return decodeData(resultBytes, version.versionNumber); + } catch { + return null; + } +} + +export function decode(matrix: BitMatrix): DecodedQR { + if (matrix == null) { + return null; + } + const result = decodeMatrix(matrix); + if (result) { + return result; + } + // Decoding didn't work, try mirroring the QR across the topLeft -> bottomRight line. + for (let x = 0; x < matrix.width; x++) { + for (let y = x + 1; y < matrix.height; y++) { + if (matrix.get(x, y) !== matrix.get(y, x)) { + matrix.set(x, y, !matrix.get(x, y)); + matrix.set(y, x, !matrix.get(y, x)); + } + } + } + return decodeMatrix(matrix); +} diff --git a/jsQR/src/decoder/reedsolomon/GenericGF.ts b/jsQR/src/decoder/reedsolomon/GenericGF.ts new file mode 100644 index 0000000000000000000000000000000000000000..b5e6c2ad0ee80ef29ea9fd33ee54c394f9dc6b3f --- /dev/null +++ b/jsQR/src/decoder/reedsolomon/GenericGF.ts @@ -0,0 +1,76 @@ +import GenericGFPoly from "./GenericGFPoly"; + +export function addOrSubtractGF(a: number, b: number) { + return a ^ b; // tslint:disable-line:no-bitwise +} + +export default class GenericGF { + public primitive: number; + public size: number; + public generatorBase: number; + public zero: GenericGFPoly; + public one: GenericGFPoly; + + private expTable: number[]; + private logTable: number[]; + + constructor(primitive: number, size: number, genBase: number) { + this.primitive = primitive; + this.size = size; + this.generatorBase = genBase; + this.expTable = new Array(this.size); + this.logTable = new Array(this.size); + + let x = 1; + for (let i = 0; i < this.size; i++) { + this.expTable[i] = x; + x = x * 2; + if (x >= this.size) { + x = (x ^ this.primitive) & (this.size - 1); // tslint:disable-line:no-bitwise + } + } + + for (let i = 0; i < this.size - 1; i++) { + this.logTable[this.expTable[i]] = i; + } + this.zero = new GenericGFPoly(this, Uint8ClampedArray.from([0])); + this.one = new GenericGFPoly(this, Uint8ClampedArray.from([1])); + } + + public multiply(a: number, b: number) { + if (a === 0 || b === 0) { + return 0; + } + return this.expTable[(this.logTable[a] + this.logTable[b]) % (this.size - 1)]; + } + + public inverse(a: number) { + if (a === 0) { + throw new Error("Can't invert 0"); + } + return this.expTable[this.size - this.logTable[a] - 1]; + } + + public buildMonomial(degree: number, coefficient: number): GenericGFPoly { + if (degree < 0) { + throw new Error("Invalid monomial degree less than 0"); + } + if (coefficient === 0) { + return this.zero; + } + const coefficients = new Uint8ClampedArray(degree + 1); + coefficients[0] = coefficient; + return new GenericGFPoly(this, coefficients); + } + + public log(a: number) { + if (a === 0) { + throw new Error("Can't take log(0)"); + } + return this.logTable[a]; + } + + public exp(a: number) { + return this.expTable[a]; + } +} diff --git a/jsQR/src/decoder/reedsolomon/GenericGFPoly.ts b/jsQR/src/decoder/reedsolomon/GenericGFPoly.ts new file mode 100644 index 0000000000000000000000000000000000000000..23dac1c5f29e890ddeb4a4c2800e958dc1b21550 --- /dev/null +++ b/jsQR/src/decoder/reedsolomon/GenericGFPoly.ts @@ -0,0 +1,140 @@ +import GenericGF, { addOrSubtractGF } from "./GenericGF"; + +export default class GenericGFPoly { + private field: GenericGF; + private coefficients: Uint8ClampedArray; + + constructor(field: GenericGF, coefficients: Uint8ClampedArray) { + if (coefficients.length === 0) { + throw new Error("No coefficients."); + } + this.field = field; + const coefficientsLength = coefficients.length; + if (coefficientsLength > 1 && coefficients[0] === 0) { + // Leading term must be non-zero for anything except the constant polynomial "0" + let firstNonZero = 1; + while (firstNonZero < coefficientsLength && coefficients[firstNonZero] === 0) { + firstNonZero++; + } + if (firstNonZero === coefficientsLength) { + this.coefficients = field.zero.coefficients; + } else { + this.coefficients = new Uint8ClampedArray(coefficientsLength - firstNonZero); + for (let i = 0; i < this.coefficients.length; i++) { + this.coefficients[i] = coefficients[firstNonZero + i]; + } + } + } else { + this.coefficients = coefficients; + } + } + + public degree() { + return this.coefficients.length - 1; + } + + public isZero() { + return this.coefficients[0] === 0; + } + + public getCoefficient(degree: number) { + return this.coefficients[this.coefficients.length - 1 - degree]; + } + + public addOrSubtract(other: GenericGFPoly) { + if (this.isZero()) { + return other; + } + if (other.isZero()) { + return this; + } + + let smallerCoefficients = this.coefficients; + let largerCoefficients = other.coefficients; + if (smallerCoefficients.length > largerCoefficients.length) { + [smallerCoefficients, largerCoefficients] = [largerCoefficients, smallerCoefficients]; + } + const sumDiff = new Uint8ClampedArray(largerCoefficients.length); + const lengthDiff = largerCoefficients.length - smallerCoefficients.length; + for (let i = 0; i < lengthDiff; i++) { + sumDiff[i] = largerCoefficients[i]; + } + + for (let i = lengthDiff; i < largerCoefficients.length; i++) { + sumDiff[i] = addOrSubtractGF(smallerCoefficients[i - lengthDiff], largerCoefficients[i]); + } + + return new GenericGFPoly(this.field, sumDiff); + } + + public multiply(scalar: number) { + if (scalar === 0) { + return this.field.zero; + } + if (scalar === 1) { + return this; + } + const size = this.coefficients.length; + const product = new Uint8ClampedArray(size); + for (let i = 0; i < size; i++) { + product[i] = this.field.multiply(this.coefficients[i], scalar); + } + + return new GenericGFPoly(this.field, product); + } + + public multiplyPoly(other: GenericGFPoly): GenericGFPoly { + if (this.isZero() || other.isZero()) { + return this.field.zero; + } + const aCoefficients = this.coefficients; + const aLength = aCoefficients.length; + const bCoefficients = other.coefficients; + const bLength = bCoefficients.length; + const product = new Uint8ClampedArray(aLength + bLength - 1); + for (let i = 0; i < aLength; i++) { + const aCoeff = aCoefficients[i]; + for (let j = 0; j < bLength; j++) { + product[i + j] = addOrSubtractGF(product[i + j], + this.field.multiply(aCoeff, bCoefficients[j])); + } + } + return new GenericGFPoly(this.field, product); + } + + public multiplyByMonomial(degree: number, coefficient: number) { + if (degree < 0) { + throw new Error("Invalid degree less than 0"); + } + if (coefficient === 0) { + return this.field.zero; + } + const size = this.coefficients.length; + const product = new Uint8ClampedArray(size + degree); + for (let i = 0; i < size; i++) { + product[i] = this.field.multiply(this.coefficients[i], coefficient); + } + return new GenericGFPoly(this.field, product); + } + + public evaluateAt(a: number) { + let result = 0; + if (a === 0) { + // Just return the x^0 coefficient + return this.getCoefficient(0); + } + const size = this.coefficients.length; + if (a === 1) { + // Just the sum of the coefficients + this.coefficients.forEach((coefficient) => { + result = addOrSubtractGF(result, coefficient); + }); + return result; + } + result = this.coefficients[0]; + for (let i = 1; i < size; i++) { + result = addOrSubtractGF(this.field.multiply(a, result), this.coefficients[i]); + } + return result; + } +} diff --git a/jsQR/src/decoder/reedsolomon/index.ts b/jsQR/src/decoder/reedsolomon/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..f60cec7e8bfc8beb7313f5268dc2722653f7c59d --- /dev/null +++ b/jsQR/src/decoder/reedsolomon/index.ts @@ -0,0 +1,136 @@ +import GenericGF, { addOrSubtractGF } from "./GenericGF"; +import GenericGFPoly from "./GenericGFPoly"; + +function runEuclideanAlgorithm(field: GenericGF, a: GenericGFPoly, b: GenericGFPoly, R: number): GenericGFPoly[] { + // Assume a's degree is >= b's + if (a.degree() < b.degree()) { + [a, b] = [b, a]; + } + + let rLast = a; + let r = b; + let tLast = field.zero; + let t = field.one; + + // Run Euclidean algorithm until r's degree is less than R/2 + while (r.degree() >= R / 2) { + const rLastLast = rLast; + const tLastLast = tLast; + rLast = r; + tLast = t; + + // Divide rLastLast by rLast, with quotient in q and remainder in r + if (rLast.isZero()) { + // Euclidean algorithm already terminated? + return null; + } + r = rLastLast; + let q = field.zero; + const denominatorLeadingTerm = rLast.getCoefficient(rLast.degree()); + const dltInverse = field.inverse(denominatorLeadingTerm); + while (r.degree() >= rLast.degree() && !r.isZero()) { + const degreeDiff = r.degree() - rLast.degree(); + const scale = field.multiply(r.getCoefficient(r.degree()), dltInverse); + q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale)); + r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale)); + } + + t = q.multiplyPoly(tLast).addOrSubtract(tLastLast); + + if (r.degree() >= rLast.degree()) { + return null; + } + } + + const sigmaTildeAtZero = t.getCoefficient(0); + if (sigmaTildeAtZero === 0) { + return null; + } + + const inverse = field.inverse(sigmaTildeAtZero); + return [t.multiply(inverse), r.multiply(inverse)]; +} + +function findErrorLocations(field: GenericGF, errorLocator: GenericGFPoly): number[] { + // This is a direct application of Chien's search + const numErrors = errorLocator.degree(); + if (numErrors === 1) { + return [errorLocator.getCoefficient(1)]; + } + const result: number[] = new Array(numErrors); + let errorCount = 0; + for (let i = 1; i < field.size && errorCount < numErrors; i++) { + if (errorLocator.evaluateAt(i) === 0) { + result[errorCount] = field.inverse(i); + errorCount++; + } + } + if (errorCount !== numErrors) { + return null; + } + return result; +} + +function findErrorMagnitudes(field: GenericGF, errorEvaluator: GenericGFPoly, errorLocations: number[]): number[] { + // This is directly applying Forney's Formula + const s = errorLocations.length; + const result: number[] = new Array(s); + for (let i = 0; i < s; i++) { + const xiInverse = field.inverse(errorLocations[i]); + let denominator = 1; + for (let j = 0; j < s; j++) { + if (i !== j) { + denominator = field.multiply(denominator, addOrSubtractGF(1, field.multiply(errorLocations[j], xiInverse))); + } + } + result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse), field.inverse(denominator)); + if (field.generatorBase !== 0) { + result[i] = field.multiply(result[i], xiInverse); + } + } + return result; +} + +export function decode(bytes: number[], twoS: number) { + const outputBytes = new Uint8ClampedArray(bytes.length); + outputBytes.set(bytes); + + const field = new GenericGF(0x011D, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1 + const poly = new GenericGFPoly(field, outputBytes); + + const syndromeCoefficients = new Uint8ClampedArray(twoS); + let error = false; + for (let s = 0; s < twoS; s++) { + const evaluation = poly.evaluateAt(field.exp(s + field.generatorBase)); + syndromeCoefficients[syndromeCoefficients.length - 1 - s] = evaluation; + if (evaluation !== 0) { + error = true; + } + } + if (!error) { + return outputBytes; + } + + const syndrome = new GenericGFPoly(field, syndromeCoefficients); + + const sigmaOmega = runEuclideanAlgorithm(field, field.buildMonomial(twoS, 1), syndrome, twoS); + if (sigmaOmega === null) { + return null; + } + + const errorLocations = findErrorLocations(field, sigmaOmega[0]); + if (errorLocations == null) { + return null; + } + + const errorMagnitudes = findErrorMagnitudes(field, sigmaOmega[1], errorLocations); + for (let i = 0; i < errorLocations.length; i++) { + const position = outputBytes.length - 1 - field.log(errorLocations[i]); + if (position < 0) { + return null; + } + outputBytes[position] = addOrSubtractGF(outputBytes[position], errorMagnitudes[i]); + } + + return outputBytes; +} diff --git a/jsQR/src/decoder/test-data/alphanumeric.png b/jsQR/src/decoder/test-data/alphanumeric.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7eb7fa5e31c00f416073fe7a9b5da7fa078e06 Binary files /dev/null and b/jsQR/src/decoder/test-data/alphanumeric.png differ diff --git a/jsQR/src/decoder/test-data/byte.png b/jsQR/src/decoder/test-data/byte.png new file mode 100644 index 0000000000000000000000000000000000000000..be0ef138210426bb5e5fd28cabfc872ad137d03b Binary files /dev/null and b/jsQR/src/decoder/test-data/byte.png differ diff --git a/jsQR/src/decoder/test-data/eci.png b/jsQR/src/decoder/test-data/eci.png new file mode 100644 index 0000000000000000000000000000000000000000..cf0b3a9803c8bd7898a219990b0872da0c0d3c71 Binary files /dev/null and b/jsQR/src/decoder/test-data/eci.png differ diff --git a/jsQR/src/decoder/test-data/kanji.png b/jsQR/src/decoder/test-data/kanji.png new file mode 100644 index 0000000000000000000000000000000000000000..fa419c220a00cf2a91246442c387708d4fda0404 Binary files /dev/null and b/jsQR/src/decoder/test-data/kanji.png differ diff --git a/jsQR/src/decoder/test-data/mixed.png b/jsQR/src/decoder/test-data/mixed.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad55381a37c897af7f32062a03b488f67a72032 Binary files /dev/null and b/jsQR/src/decoder/test-data/mixed.png differ diff --git a/jsQR/src/decoder/test-data/no-termination-byte.png b/jsQR/src/decoder/test-data/no-termination-byte.png new file mode 100644 index 0000000000000000000000000000000000000000..21db962fe4ff19e4242f5b3d139508f82eea05a2 Binary files /dev/null and b/jsQR/src/decoder/test-data/no-termination-byte.png differ diff --git a/jsQR/src/decoder/test-data/numeric.png b/jsQR/src/decoder/test-data/numeric.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2ff8f650c4256b19cd0f73a8b3ca5eea8dd9f5 Binary files /dev/null and b/jsQR/src/decoder/test-data/numeric.png differ diff --git a/jsQR/src/decoder/test-data/truncated-corrupted.bin b/jsQR/src/decoder/test-data/truncated-corrupted.bin new file mode 100644 index 0000000000000000000000000000000000000000..33941a6d578dfb95be03f3cbb361410ad3b816af Binary files /dev/null and b/jsQR/src/decoder/test-data/truncated-corrupted.bin differ diff --git a/jsQR/src/decoder/test-data/truncated-null.bin b/jsQR/src/decoder/test-data/truncated-null.bin new file mode 100644 index 0000000000000000000000000000000000000000..6fcb7e6b4844698a9cb8530fdae5d1646df00198 Binary files /dev/null and b/jsQR/src/decoder/test-data/truncated-null.bin differ diff --git a/jsQR/src/decoder/test.ts b/jsQR/src/decoder/test.ts new file mode 100644 index 0000000000000000000000000000000000000000..e6822190c9e694042292f45b74b2a4404dfb903c --- /dev/null +++ b/jsQR/src/decoder/test.ts @@ -0,0 +1,132 @@ +import * as fs from "fs-extra"; +import { loadBinarized } from "../../tests/helpers"; +import { BitMatrix } from "../BitMatrix"; +import { decode } from "./decoder"; + +describe("decode", () => { + it("decodes a numeric code", async () => { + const data = await loadBinarized("./src/decoder/test-data/numeric.png"); + expect(decode(data)).toEqual({ + text: "123456789", + bytes: [49, 50, 51, 52, 53, 54, 55, 56, 57], + chunks: [{ type: "numeric", text: "123456789" }], + version: 1, + }); + }); + + it("decodes an alphanumeric code", async () => { + const data = await loadBinarized("./src/decoder/test-data/alphanumeric.png"); + expect(decode(data)).toEqual({ + text: "ABCD1234", + bytes: [65, 66, 67, 68, 49, 50, 51, 52], + chunks: [{ type: "alphanumeric", text: "ABCD1234" }], + version: 1, + }); + }); + + it("decodes a byte code", async () => { + const data = await loadBinarized("./src/decoder/test-data/byte.png"); + expect(decode(data)).toEqual({ + text: "Test", + bytes: [84, 101, 115, 116], + chunks: [{ type: "byte", bytes: [84, 101, 115, 116], text: "Test" }], + version: 1, + }); + }); + + it("decodes a kanji code", async () => { + const data = await loadBinarized("./src/decoder/test-data/kanji.png"); + expect(decode(data)).toEqual({ + text: "テスト", + bytes: [131, 101, 131, 88, 131, 103], + chunks: [{ type: "kanji", bytes: [131, 101, 131, 88, 131, 103], text: "テスト" }], + version: 1, + }); + }); + + it("decodes a mixed code", async () => { + const data = await loadBinarized("./src/decoder/test-data/mixed.png"); + expect(decode(data)).toEqual({ + text: "123456789ABCD1234Testテスト", + bytes: [49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 49, 50, 51, 52, 84, 101, 115, 116, 131, 101, 131, 88, 131, 103], + chunks: [ + { type: "numeric", text: "123456789" }, + { type: "alphanumeric", text: "ABCD1234" }, + { type: "byte", bytes: [84, 101, 115, 116], text: "Test" }, + { type: "kanji", bytes: [131, 101, 131, 88, 131, 103], text: "テスト" }, + ], + version: 2, + }); + }); + + it("decodes a mixed code", async () => { + const data = await loadBinarized("./src/decoder/test-data/mixed.png"); + expect(decode(data)).toEqual({ + text: "123456789ABCD1234Testテスト", + bytes: [49, 50, 51, 52, 53, 54, 55, 56, 57, 65, 66, 67, 68, 49, 50, 51, 52, 84, 101, 115, 116, 131, 101, 131, 88, 131, 103], + chunks: [ + { type: "numeric", text: "123456789" }, + { type: "alphanumeric", text: "ABCD1234" }, + { type: "byte", bytes: [84, 101, 115, 116], text: "Test" }, + { type: "kanji", bytes: [131, 101, 131, 88, 131, 103], text: "テスト" }, + ], + version: 2, + }); + }); + + it("returns null if there aren't enough codewords in the matrix", async () => { + // This matrix decodes to an empty byte array, but shouldn't decode at all + const d = Uint8ClampedArray.from(await fs.readFile("./src/decoder/test-data/truncated-null.bin")); + const matrix = new BitMatrix(d, Math.sqrt(d.length)); + expect(decode(matrix)).toBeNull(); + }); + + it("returns null if there aren't enough codewords in the matrix", async () => { + // This matrix decodes to random unicode characters but shouldn't decode at all. + const d = Uint8ClampedArray.from(await fs.readFile("./src/decoder/test-data/truncated-corrupted.bin")); + const matrix = new BitMatrix(d, Math.sqrt(d.length)); + expect(decode(matrix)).toBeNull(); + }); + + it("Supports ECI chunks", async () => { + const data = await loadBinarized("./src/decoder/test-data/eci.png"); + expect(decode(data)).toEqual({ + text: "7948,328,1019,149,12,12,15,4,14,11,32,4", + bytes: [55, 57, 52, 56, 44, 51, 50, 56, 44, 49, 48, 49, 57, 44, 49, 52, 57, 44, 49, 50, 44, 49, 50, 44, 49, 53, 44, + 52, 44, 49, 52, 44, 49, 49, 44, 51, 50, 44, 52], + chunks: [ + { + type: "eci", assignmentNumber: 26, + }, { + type: "byte", + bytes: [55, 57, 52, 56, 44, 51, 50, 56, 44, 49, 48, 49, 57, 44, 49, 52, 57, 44, 49, 50, 44, 49, 50, 44, 49, + 53, 44, 52, 44, 49, 52, 44, 49, 49, 44, 51, 50, 44, 52], + text: "7948,328,1019,149,12,12,15,4,14,11,32,4", + }, + ], + version: 3, + }); + }); + + it("Extracts a QR code that is missing the termination byte", async () => { + const data = await loadBinarized("./src/decoder/test-data/no-termination-byte.png"); + expect(decode(data)).toEqual({ + text: "1788c74b1c9262866c2071b65df7bfcb7911c2b064c931b580515c2d9d2cd7f8", + bytes: [ 49, 55, 56, 56, 99, 55, 52, 98, 49, 99, 57, 50, 54, 50, 56, 54, 54, 99, 50, 48, 55, 49, 98, 54, 53, 100, + 102, 55, 98, 102, 99, 98, 55, 57, 49, 49, 99, 50, 98, 48, 54, 52, 99, 57, 51, 49, 98, 53, 56, 48, 53, 49, 53, + 99, 50, 100, 57, 100, 50, 99, 100, 55, 102, 56 ], + chunks: [ + { type: "numeric", text: "1788" }, + { type: "byte", bytes: [99, 55, 52, 98, 49, 99], text: "c74b1c" }, + { type: "numeric", text: "9262866" }, + { type: "byte", + bytes: [99, 50, 48, 55, 49, 98, 54, 53, 100, 102, 55, 98, 102, 99, 98, 55, 57, 49, 49, 99, 50, 98, 48, 54, 52, + 99, 57, 51, 49, 98], + text: "c2071b65df7bfcb7911c2b064c931b" }, + { type: "numeric", text: "580515" }, + { type: "byte", bytes: [99, 50, 100, 57, 100, 50, 99, 100, 55, 102, 56], text: "c2d9d2cd7f8" }, + ], + version: 4, + }); + }); +}); diff --git a/jsQR/src/decoder/version.ts b/jsQR/src/decoder/version.ts new file mode 100644 index 0000000000000000000000000000000000000000..bb156e5177ab936d0e0c342d6ee6411abdf3ee45 --- /dev/null +++ b/jsQR/src/decoder/version.ts @@ -0,0 +1,1319 @@ +export interface Version { + infoBits: number; + versionNumber: number; + alignmentPatternCenters: number[]; + errorCorrectionLevels: Array<{ + ecCodewordsPerBlock: number; + ecBlocks: Array<{ + numBlocks: number; + dataCodewordsPerBlock: number; + }> + }>; +} + +export const VERSIONS: Version[] = [ + { + infoBits: null, + versionNumber: 1, + alignmentPatternCenters: [], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 7, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + { + ecCodewordsPerBlock: 13, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 13 }], + }, + { + ecCodewordsPerBlock: 17, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 2, + alignmentPatternCenters: [6, 18], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 10, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 34 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 28 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 22 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 16 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 3, + alignmentPatternCenters: [6, 22], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 15, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 55 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 44 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 17 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 4, + alignmentPatternCenters: [6, 26], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 80 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 32 }], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 24 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 9 }], + }, + ], + }, + { + infoBits: null, + versionNumber: 5, + alignmentPatternCenters: [6, 30], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 1, dataCodewordsPerBlock: 108 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 43 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 11 }, + { numBlocks: 2, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: null, + versionNumber: 6, + alignmentPatternCenters: [6, 34], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 68 }], + }, + { + ecCodewordsPerBlock: 16, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 27 }], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 19 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 15 }], + }, + ], + }, + { + infoBits: 0x07C94, + versionNumber: 7, + alignmentPatternCenters: [6, 22, 38], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 78 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 31 }], + }, + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + { numBlocks: 1, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x085BC, + versionNumber: 8, + alignmentPatternCenters: [6, 24, 42], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 97 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 38 }, + { numBlocks: 2, dataCodewordsPerBlock: 39 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 18 }, + { numBlocks: 2, dataCodewordsPerBlock: 19 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 14 }, + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x09A99, + versionNumber: 9, + alignmentPatternCenters: [6, 26, 46], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 2, dataCodewordsPerBlock: 116 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + { numBlocks: 4, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0A4D3, + versionNumber: 10, + alignmentPatternCenters: [6, 28, 50], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 18, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 68 }, + { numBlocks: 2, dataCodewordsPerBlock: 69 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 43 }, + { numBlocks: 1, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 15 }, + { numBlocks: 2, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x0BBF6, + versionNumber: 11, + alignmentPatternCenters: [6, 30, 54], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 20, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 81 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 50 }, + { numBlocks: 4, dataCodewordsPerBlock: 51 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + { numBlocks: 4, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 12 }, + { numBlocks: 8, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0C762, + versionNumber: 12, + alignmentPatternCenters: [6, 32, 58], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 92 }, + { numBlocks: 2, dataCodewordsPerBlock: 93 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 36 }, + { numBlocks: 2, dataCodewordsPerBlock: 37 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 20 }, + { numBlocks: 6, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 14 }, + { numBlocks: 4, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x0D847, + versionNumber: 13, + alignmentPatternCenters: [6, 34, 62], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 4, dataCodewordsPerBlock: 107 }], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 37 }, + { numBlocks: 1, dataCodewordsPerBlock: 38 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 20 }, + { numBlocks: 4, dataCodewordsPerBlock: 21 }, + ], + }, + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 11 }, + { numBlocks: 4, dataCodewordsPerBlock: 12 }, + ], + }, + ], + }, + { + infoBits: 0x0E60D, + versionNumber: 14, + alignmentPatternCenters: [6, 26, 46, 66], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 40 }, + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + ], + }, + { + ecCodewordsPerBlock: 20, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 16 }, + { numBlocks: 5, dataCodewordsPerBlock: 17 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 5, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x0F928, + versionNumber: 15, + alignmentPatternCenters: [6, 26, 48, 70], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 22, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 87 }, + { numBlocks: 1, dataCodewordsPerBlock: 88 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 41 }, + { numBlocks: 5, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 12 }, + { numBlocks: 7, dataCodewordsPerBlock: 13 }, + ], + }, + ], + }, + { + infoBits: 0x10B78, + versionNumber: 16, + alignmentPatternCenters: [6, 26, 50, 74], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 98 }, + { numBlocks: 1, dataCodewordsPerBlock: 99 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 19 }, + { numBlocks: 2, dataCodewordsPerBlock: 20 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1145D, + versionNumber: 17, + alignmentPatternCenters: [6, 30, 54, 78], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 1, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 22 }, + { numBlocks: 15, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 17, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x12A17, + versionNumber: 18, + alignmentPatternCenters: [6, 30, 56, 82], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 120 }, + { numBlocks: 1, dataCodewordsPerBlock: 121 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 43 }, + { numBlocks: 4, dataCodewordsPerBlock: 44 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 14 }, + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + ], + }, + ], + }, + { + infoBits: 0x13532, + versionNumber: 19, + alignmentPatternCenters: [6, 30, 58, 86], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 113 }, + { numBlocks: 4, dataCodewordsPerBlock: 114 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 44 }, + { numBlocks: 11, dataCodewordsPerBlock: 45 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 21 }, + { numBlocks: 4, dataCodewordsPerBlock: 22 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 9, dataCodewordsPerBlock: 13 }, + { numBlocks: 16, dataCodewordsPerBlock: 14 }, + ], + }, + ], + }, + { + infoBits: 0x149A6, + versionNumber: 20, + alignmentPatternCenters: [6, 34, 62, 90], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 107 }, + { numBlocks: 5, dataCodewordsPerBlock: 108 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 41 }, + { numBlocks: 13, dataCodewordsPerBlock: 42 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 5, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 15 }, + { numBlocks: 10, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x15683, + versionNumber: 21, + alignmentPatternCenters: [6, 28, 50, 72, 94], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 116 }, + { numBlocks: 4, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 26, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 42 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 16 }, + { numBlocks: 6, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x168C9, + versionNumber: 22, + alignmentPatternCenters: [6, 26, 50, 74, 98], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 111 }, + { numBlocks: 7, dataCodewordsPerBlock: 112 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 46 }], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 24, + ecBlocks: [{ numBlocks: 34, dataCodewordsPerBlock: 13 }], + }, + ], + }, + { + infoBits: 0x177EC, + versionNumber: 23, + alignmentPatternCenters: [6, 30, 54, 74, 102], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 121 }, + { numBlocks: 5, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + { numBlocks: 14, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 16, dataCodewordsPerBlock: 15 }, + { numBlocks: 14, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x18EC4, + versionNumber: 24, + alignmentPatternCenters: [6, 28, 54, 80, 106], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 45 }, + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 24 }, + { numBlocks: 16, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 30, dataCodewordsPerBlock: 16 }, + { numBlocks: 2, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x191E1, + versionNumber: 25, + alignmentPatternCenters: [6, 32, 58, 84, 110], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 26, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 106 }, + { numBlocks: 4, dataCodewordsPerBlock: 107 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 47 }, + { numBlocks: 13, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 13, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1AFAB, + versionNumber: 26, + alignmentPatternCenters: [6, 30, 58, 86, 114], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 114 }, + { numBlocks: 2, dataCodewordsPerBlock: 115 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 46 }, + { numBlocks: 4, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 28, dataCodewordsPerBlock: 22 }, + { numBlocks: 6, dataCodewordsPerBlock: 23 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 33, dataCodewordsPerBlock: 16 }, + { numBlocks: 4, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x1B08E, + versionNumber: 27, + alignmentPatternCenters: [6, 34, 62, 90, 118], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 45 }, + { numBlocks: 3, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 8, dataCodewordsPerBlock: 23 }, + { numBlocks: 26, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1CC1A, + versionNumber: 28, + alignmentPatternCenters: [6, 26, 50, 74, 98, 122], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 117 }, + { numBlocks: 10, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 3, dataCodewordsPerBlock: 45 }, + { numBlocks: 23, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 24 }, + { numBlocks: 31, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 31, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1D33F, + versionNumber: 29, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 7, dataCodewordsPerBlock: 116 }, + { numBlocks: 7, dataCodewordsPerBlock: 117 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 21, dataCodewordsPerBlock: 45 }, + { numBlocks: 7, dataCodewordsPerBlock: 46 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 1, dataCodewordsPerBlock: 23 }, + { numBlocks: 37, dataCodewordsPerBlock: 24 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 26, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1ED75, + versionNumber: 30, + alignmentPatternCenters: [6, 26, 52, 78, 104, 130], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 5, dataCodewordsPerBlock: 115 }, + { numBlocks: 10, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 47 }, + { numBlocks: 10, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 15, dataCodewordsPerBlock: 24 }, + { numBlocks: 25, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 25, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x1F250, + versionNumber: 31, + alignmentPatternCenters: [6, 30, 56, 82, 108, 134], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 3, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 46 }, + { numBlocks: 29, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 24 }, + { numBlocks: 1, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 23, dataCodewordsPerBlock: 15 }, + { numBlocks: 28, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x209D5, + versionNumber: 32, + alignmentPatternCenters: [6, 34, 60, 86, 112, 138], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [{ numBlocks: 17, dataCodewordsPerBlock: 115 }], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 24 }, + { numBlocks: 35, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 15 }, + { numBlocks: 35, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x216F0, + versionNumber: 33, + alignmentPatternCenters: [6, 30, 58, 86, 114, 142], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 115 }, + { numBlocks: 1, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 21, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 24 }, + { numBlocks: 19, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 11, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x228BA, + versionNumber: 34, + alignmentPatternCenters: [6, 34, 62, 90, 118, 146], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 115 }, + { numBlocks: 6, dataCodewordsPerBlock: 116 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 14, dataCodewordsPerBlock: 46 }, + { numBlocks: 23, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 44, dataCodewordsPerBlock: 24 }, + { numBlocks: 7, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 59, dataCodewordsPerBlock: 16 }, + { numBlocks: 1, dataCodewordsPerBlock: 17 }, + ], + }, + ], + }, + { + infoBits: 0x2379F, + versionNumber: 35, + alignmentPatternCenters: [6, 30, 54, 78, 102, 126, 150], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 121 }, + { numBlocks: 7, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 12, dataCodewordsPerBlock: 47 }, + { numBlocks: 26, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 39, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 22, dataCodewordsPerBlock: 15 }, + { numBlocks: 41, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x24B0B, + versionNumber: 36, + alignmentPatternCenters: [ 6, 24, 50, 76, 102, 128, 154 ], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 121 }, + { numBlocks: 14, dataCodewordsPerBlock: 122 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 6, dataCodewordsPerBlock: 47 }, + { numBlocks: 34, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 46, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 2, dataCodewordsPerBlock: 15 }, + { numBlocks: 64, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x2542E, + versionNumber: 37, + alignmentPatternCenters: [ 6, 28, 54, 80, 106, 132, 158 ], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 17, dataCodewordsPerBlock: 122 }, + { numBlocks: 4, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 29, dataCodewordsPerBlock: 46 }, + { numBlocks: 14, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 49, dataCodewordsPerBlock: 24 }, + { numBlocks: 10, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 24, dataCodewordsPerBlock: 15 }, + { numBlocks: 46, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x26A64, + versionNumber: 38, + alignmentPatternCenters: [ 6, 32, 58, 84, 110, 136, 162 ], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 4, dataCodewordsPerBlock: 122 }, + { numBlocks: 18, dataCodewordsPerBlock: 123 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 13, dataCodewordsPerBlock: 46 }, + { numBlocks: 32, dataCodewordsPerBlock: 47 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 48, dataCodewordsPerBlock: 24 }, + { numBlocks: 14, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 42, dataCodewordsPerBlock: 15 }, + { numBlocks: 32, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x27541, + versionNumber: 39, + alignmentPatternCenters: [ 6, 26, 54, 82, 110, 138, 166 ], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 117 }, + { numBlocks: 4, dataCodewordsPerBlock: 118 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 40, dataCodewordsPerBlock: 47 }, + { numBlocks: 7, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 43, dataCodewordsPerBlock: 24 }, + { numBlocks: 22, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 10, dataCodewordsPerBlock: 15 }, + { numBlocks: 67, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, + { + infoBits: 0x28C69, + versionNumber: 40, + alignmentPatternCenters: [ 6, 30, 58, 86, 114, 142, 170 ], + errorCorrectionLevels: [ + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 19, dataCodewordsPerBlock: 118 }, + { numBlocks: 6, dataCodewordsPerBlock: 119 }, + ], + }, + { + ecCodewordsPerBlock: 28, + ecBlocks: [ + { numBlocks: 18, dataCodewordsPerBlock: 47 }, + { numBlocks: 31, dataCodewordsPerBlock: 48 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 34, dataCodewordsPerBlock: 24 }, + { numBlocks: 34, dataCodewordsPerBlock: 25 }, + ], + }, + { + ecCodewordsPerBlock: 30, + ecBlocks: [ + { numBlocks: 20, dataCodewordsPerBlock: 15 }, + { numBlocks: 61, dataCodewordsPerBlock: 16 }, + ], + }, + ], + }, +]; diff --git a/jsQR/src/extractor/index.ts b/jsQR/src/extractor/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..71b85eaef79917197cb2ea8229250d7f6f98ad14 --- /dev/null +++ b/jsQR/src/extractor/index.ts @@ -0,0 +1,115 @@ +import {BitMatrix} from "../BitMatrix"; +import {Point, QRLocation} from "../locator"; + +interface PerspectiveTransform { + a11: number; + a21: number; + a31: number; + a12: number; + a22: number; + a32: number; + a13: number; + a23: number; + a33: number; +} + +function squareToQuadrilateral(p1: Point, p2: Point, p3: Point, p4: Point): PerspectiveTransform { + const dx3 = p1.x - p2.x + p3.x - p4.x; + const dy3 = p1.y - p2.y + p3.y - p4.y; + if (dx3 === 0 && dy3 === 0) { // Affine + return { + a11: p2.x - p1.x, + a12: p2.y - p1.y, + a13: 0, + a21: p3.x - p2.x, + a22: p3.y - p2.y, + a23: 0, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } else { + const dx1 = p2.x - p3.x; + const dx2 = p4.x - p3.x; + const dy1 = p2.y - p3.y; + const dy2 = p4.y - p3.y; + const denominator = dx1 * dy2 - dx2 * dy1; + const a13 = (dx3 * dy2 - dx2 * dy3) / denominator; + const a23 = (dx1 * dy3 - dx3 * dy1) / denominator; + return { + a11: p2.x - p1.x + a13 * p2.x, + a12: p2.y - p1.y + a13 * p2.y, + a13, + a21: p4.x - p1.x + a23 * p4.x, + a22: p4.y - p1.y + a23 * p4.y, + a23, + a31: p1.x, + a32: p1.y, + a33: 1, + }; + } +} + +function quadrilateralToSquare(p1: Point, p2: Point, p3: Point, p4: Point): PerspectiveTransform { + // Here, the adjoint serves as the inverse: + const sToQ = squareToQuadrilateral(p1, p2, p3, p4); + return { + a11: sToQ.a22 * sToQ.a33 - sToQ.a23 * sToQ.a32, + a12: sToQ.a13 * sToQ.a32 - sToQ.a12 * sToQ.a33, + a13: sToQ.a12 * sToQ.a23 - sToQ.a13 * sToQ.a22, + a21: sToQ.a23 * sToQ.a31 - sToQ.a21 * sToQ.a33, + a22: sToQ.a11 * sToQ.a33 - sToQ.a13 * sToQ.a31, + a23: sToQ.a13 * sToQ.a21 - sToQ.a11 * sToQ.a23, + a31: sToQ.a21 * sToQ.a32 - sToQ.a22 * sToQ.a31, + a32: sToQ.a12 * sToQ.a31 - sToQ.a11 * sToQ.a32, + a33: sToQ.a11 * sToQ.a22 - sToQ.a12 * sToQ.a21, + }; +} + +function times(a: PerspectiveTransform, b: PerspectiveTransform): PerspectiveTransform { + return { + a11: a.a11 * b.a11 + a.a21 * b.a12 + a.a31 * b.a13, + a12: a.a12 * b.a11 + a.a22 * b.a12 + a.a32 * b.a13, + a13: a.a13 * b.a11 + a.a23 * b.a12 + a.a33 * b.a13, + a21: a.a11 * b.a21 + a.a21 * b.a22 + a.a31 * b.a23, + a22: a.a12 * b.a21 + a.a22 * b.a22 + a.a32 * b.a23, + a23: a.a13 * b.a21 + a.a23 * b.a22 + a.a33 * b.a23, + a31: a.a11 * b.a31 + a.a21 * b.a32 + a.a31 * b.a33, + a32: a.a12 * b.a31 + a.a22 * b.a32 + a.a32 * b.a33, + a33: a.a13 * b.a31 + a.a23 * b.a32 + a.a33 * b.a33, + }; +} + +export function extract(image: BitMatrix, location: QRLocation) { + const qToS = quadrilateralToSquare( + {x: 3.5, y: 3.5}, + {x: location.dimension - 3.5, y: 3.5}, + {x: location.dimension - 6.5, y: location.dimension - 6.5}, + {x: 3.5, y: location.dimension - 3.5}, + ); + const sToQ = squareToQuadrilateral(location.topLeft, location.topRight, location.alignmentPattern, location.bottomLeft); + const transform = times(sToQ, qToS); + + const matrix = BitMatrix.createEmpty(location.dimension, location.dimension); + const mappingFunction = (x: number, y: number) => { + const denominator = transform.a13 * x + transform.a23 * y + transform.a33; + return { + x: (transform.a11 * x + transform.a21 * y + transform.a31) / denominator, + y: (transform.a12 * x + transform.a22 * y + transform.a32) / denominator, + }; + }; + + for (let y = 0; y < location.dimension; y++) { + for (let x = 0; x < location.dimension; x++) { + const xValue = x + 0.5; + const yValue = y + 0.5; + const sourcePixel = mappingFunction(xValue, yValue); + matrix.set(x, y, image.get(Math.floor(sourcePixel.x), Math.floor(sourcePixel.y))); + } + } + + return { + matrix, + mappingFunction, + }; +} diff --git a/jsQR/src/extractor/test-data/input.png b/jsQR/src/extractor/test-data/input.png new file mode 100644 index 0000000000000000000000000000000000000000..db8ccbab00ada48bdca8a62ab79244d0ec344ab2 Binary files /dev/null and b/jsQR/src/extractor/test-data/input.png differ diff --git a/jsQR/src/extractor/test-data/output.png b/jsQR/src/extractor/test-data/output.png new file mode 100644 index 0000000000000000000000000000000000000000..91b605197d3e61ff9b94ddcb9d72fec003335eef Binary files /dev/null and b/jsQR/src/extractor/test-data/output.png differ diff --git a/jsQR/src/extractor/test.ts b/jsQR/src/extractor/test.ts new file mode 100644 index 0000000000000000000000000000000000000000..c3929072a90d6913dfe1404fdc3cbb0e8b09868a --- /dev/null +++ b/jsQR/src/extractor/test.ts @@ -0,0 +1,44 @@ +import { loadBinarized } from "../../tests/helpers"; +import { BitMatrix } from "../BitMatrix"; +import { extract } from "./"; + +function matricCompare(a: BitMatrix, b: BitMatrix) { + if (!(a.height === b.height && a.width === b.width)) { + return false; + } + for (let x = 0; x < a.width; x++) { + for (let y = 0; y < a.height; y++) { + if (a.get(x, y) !== b.get(x, y)) { + return false; + } + } + } + return true; +} + +describe("extract", () => { + it("is a no-op when applied to an already extracted code", async () => { + const data = await loadBinarized("./src/extractor/test-data/output.png"); + const extracted = extract(data, { + topLeft: { x: 3.5, y: 3.5 }, + bottomLeft: { x: 3.5, y: 21.5 }, + topRight: { x: 21.5, y: 3.5 }, + alignmentPattern: { x: 18.5, y: 18.5 }, + dimension: 25, + }); + expect(matricCompare(extracted.matrix, data)).toBeTruthy(); + }); + + it("extracts a distorted QR code", async () => { + const input = await loadBinarized("./src/extractor/test-data/input.png"); + const expected = await loadBinarized("./src/extractor/test-data/output.png"); + const extracted = extract(input, { + topLeft: { x: 56, y: 94 }, + bottomLeft: { x: 88, y: 268 }, + topRight: { x: 275, y: 175 }, + alignmentPattern: { x: 197, y: 315 }, + dimension: 25, + }); + expect(matricCompare(extracted.matrix, expected)).toBeTruthy(); + }); +}); diff --git a/jsQR/src/index.ts b/jsQR/src/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..832ea652653d32cc3ed58c0d1eb51e349d10d007 --- /dev/null +++ b/jsQR/src/index.ts @@ -0,0 +1,87 @@ +import {binarize} from "./binarizer"; +import {BitMatrix} from "./BitMatrix"; +import {Chunks} from "./decoder/decodeData"; +import {decode} from "./decoder/decoder"; +import { Version } from "./decoder/version"; +import {extract} from "./extractor"; +import {locate, Point} from "./locator"; + +export interface QRCode { + binaryData: number[]; + data: string; + chunks: Chunks; + version: number; + location: { + topRightCorner: Point; + topLeftCorner: Point; + bottomRightCorner: Point; + bottomLeftCorner: Point; + + topRightFinderPattern: Point; + topLeftFinderPattern: Point; + bottomLeftFinderPattern: Point; + + bottomRightAlignmentPattern?: Point; + }; +} + +function scan(matrix: BitMatrix): QRCode | null { + const locations = locate(matrix); + if (!locations) { + return null; + } + + for (const location of locations) { + const extracted = extract(matrix, location); + const decoded = decode(extracted.matrix); + if (decoded) { + return { + binaryData: decoded.bytes, + data: decoded.text, + chunks: decoded.chunks, + version: decoded.version, + location: { + topRightCorner: extracted.mappingFunction(location.dimension, 0), + topLeftCorner: extracted.mappingFunction(0, 0), + bottomRightCorner: extracted.mappingFunction(location.dimension, location.dimension), + bottomLeftCorner: extracted.mappingFunction(0, location.dimension), + + topRightFinderPattern: location.topRight, + topLeftFinderPattern: location.topLeft, + bottomLeftFinderPattern: location.bottomLeft, + + bottomRightAlignmentPattern: location.alignmentPattern, + }, + }; + } + } + return null; +} + +export interface Options { + inversionAttempts?: "dontInvert" | "onlyInvert" | "attemptBoth" | "invertFirst"; +} + +const defaultOptions: Options = { + inversionAttempts: "attemptBoth", +}; + +function jsQR(data: Uint8ClampedArray, width: number, height: number, providedOptions: Options = {}): QRCode | null { + + const options = defaultOptions; + Object.keys(options || {}).forEach(opt => { // Sad implementation of Object.assign since we target es5 not es6 + (options as any)[opt] = (providedOptions as any)[opt] || (options as any)[opt]; + }); + + const shouldInvert = options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst"; + const tryInvertedFirst = options.inversionAttempts === "onlyInvert" || options.inversionAttempts === "invertFirst"; + const {binarized, inverted} = binarize(data, width, height, shouldInvert); + let result = scan(tryInvertedFirst ? inverted : binarized); + if (!result && (options.inversionAttempts === "attemptBoth" || options.inversionAttempts === "invertFirst")) { + result = scan(tryInvertedFirst ? binarized : inverted); + } + return result; +} + +(jsQR as any).default = jsQR; +export default jsQR; diff --git a/jsQR/src/locator/index.ts b/jsQR/src/locator/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..7138fe361f67b7ffe1e2db0d714f08c17aad72d8 --- /dev/null +++ b/jsQR/src/locator/index.ts @@ -0,0 +1,469 @@ +import { BitMatrix } from "../BitMatrix"; + +const MAX_FINDERPATTERNS_TO_SEARCH = 4; +const MIN_QUAD_RATIO = 0.5; +const MAX_QUAD_RATIO = 1.5; + +export interface Point { + x: number; + y: number; +} + +export interface QRLocation { + topRight: Point; + bottomLeft: Point; + topLeft: Point; + alignmentPattern: Point; + dimension: number; +} + +const distance = (a: Point, b: Point) => Math.sqrt((b.x - a.x) ** 2 + (b.y - a.y) ** 2); + +function sum(values: number[]) { + return values.reduce((a, b) => a + b); +} + +// Takes three finder patterns and organizes them into topLeft, topRight, etc +function reorderFinderPatterns(pattern1: Point, pattern2: Point, pattern3: Point) { + // Find distances between pattern centers + const oneTwoDistance = distance(pattern1, pattern2); + const twoThreeDistance = distance(pattern2, pattern3); + const oneThreeDistance = distance(pattern1, pattern3); + + let bottomLeft: Point; + let topLeft: Point; + let topRight: Point; + + // Assume one closest to other two is B; A and C will just be guesses at first + if (twoThreeDistance >= oneTwoDistance && twoThreeDistance >= oneThreeDistance) { + [bottomLeft, topLeft, topRight] = [pattern2, pattern1, pattern3]; + } else if (oneThreeDistance >= twoThreeDistance && oneThreeDistance >= oneTwoDistance) { + [bottomLeft, topLeft, topRight] = [pattern1, pattern2, pattern3]; + } else { + [bottomLeft, topLeft, topRight] = [pattern1, pattern3, pattern2]; + } + + // Use cross product to figure out whether bottomLeft (A) and topRight (C) are correct or flipped in relation to topLeft (B) + // This asks whether BC x BA has a positive z component, which is the arrangement we want. If it's negative, then + // we've got it flipped around and should swap topRight and bottomLeft. + if (((topRight.x - topLeft.x) * (bottomLeft.y - topLeft.y)) - ((topRight.y - topLeft.y) * (bottomLeft.x - topLeft.x)) < 0) { + [bottomLeft, topRight] = [topRight, bottomLeft]; + } + + return { bottomLeft, topLeft, topRight }; +} + +// Computes the dimension (number of modules on a side) of the QR Code based on the position of the finder patterns +function computeDimension(topLeft: Point, topRight: Point, bottomLeft: Point, matrix: BitMatrix) { + const moduleSize = ( + sum(countBlackWhiteRun(topLeft, bottomLeft, matrix, 5)) / 7 + // Divide by 7 since the ratio is 1:1:3:1:1 + sum(countBlackWhiteRun(topLeft, topRight, matrix, 5)) / 7 + + sum(countBlackWhiteRun(bottomLeft, topLeft, matrix, 5)) / 7 + + sum(countBlackWhiteRun(topRight, topLeft, matrix, 5)) / 7 + ) / 4; + + if (moduleSize < 1) { + throw new Error("Invalid module size"); + } + + const topDimension = Math.round(distance(topLeft, topRight) / moduleSize); + const sideDimension = Math.round(distance(topLeft, bottomLeft) / moduleSize); + let dimension = Math.floor((topDimension + sideDimension) / 2) + 7; + switch (dimension % 4) { + case 0: + dimension++; + break; + case 2: + dimension--; + break; + } + return { dimension, moduleSize }; +} + +// Takes an origin point and an end point and counts the sizes of the black white run from the origin towards the end point. +// Returns an array of elements, representing the pixel size of the black white run. +// Uses a variant of http://en.wikipedia.org/wiki/Bresenham's_line_algorithm +function countBlackWhiteRunTowardsPoint(origin: Point, end: Point, matrix: BitMatrix, length: number) { + const switchPoints: Point[] = [{x: Math.floor(origin.x), y: Math.floor(origin.y)}]; + const steep = Math.abs(end.y - origin.y) > Math.abs(end.x - origin.x); + + let fromX: number; + let fromY: number; + let toX: number; + let toY: number; + if (steep) { + fromX = Math.floor(origin.y); + fromY = Math.floor(origin.x); + toX = Math.floor(end.y); + toY = Math.floor(end.x); + } else { + fromX = Math.floor(origin.x); + fromY = Math.floor(origin.y); + toX = Math.floor(end.x); + toY = Math.floor(end.y); + } + + const dx = Math.abs(toX - fromX); + const dy = Math.abs(toY - fromY); + let error = Math.floor(-dx / 2); + const xStep = fromX < toX ? 1 : -1; + const yStep = fromY < toY ? 1 : -1; + + let currentPixel = true; + // Loop up until x == toX, but not beyond + for (let x = fromX, y = fromY; x !== toX + xStep; x += xStep) { + // Does current pixel mean we have moved white to black or vice versa? + // Scanning black in state 0,2 and white in state 1, so if we find the wrong + // color, advance to next state or end if we are in state 2 already + const realX = steep ? y : x; + const realY = steep ? x : y; + if (matrix.get(realX, realY) !== currentPixel) { + currentPixel = !currentPixel; + switchPoints.push({x: realX, y: realY}); + if (switchPoints.length === length + 1) { + break; + } + } + error += dy; + if (error > 0) { + if (y === toY) { + break; + } + y += yStep; + error -= dx; + } + } + const distances: number[] = []; + for (let i = 0; i < length; i++) { + if (switchPoints[i] && switchPoints[i + 1]) { + distances.push(distance(switchPoints[i], switchPoints[i + 1])); + } else { + distances.push(0); + } + } + return distances; +} + +// Takes an origin point and an end point and counts the sizes of the black white run in the origin point +// along the line that intersects with the end point. Returns an array of elements, representing the pixel sizes +// of the black white run. Takes a length which represents the number of switches from black to white to look for. +function countBlackWhiteRun(origin: Point, end: Point, matrix: BitMatrix, length: number) { + const rise = end.y - origin.y; + const run = end.x - origin.x; + + const towardsEnd = countBlackWhiteRunTowardsPoint(origin, end, matrix, Math.ceil(length / 2)); + const awayFromEnd = countBlackWhiteRunTowardsPoint(origin, {x: origin.x - run, y: origin.y - rise}, matrix, Math.ceil(length / 2)); + + const middleValue = towardsEnd.shift() + awayFromEnd.shift() - 1; // Substract one so we don't double count a pixel + return awayFromEnd.concat(middleValue).concat(...towardsEnd); +} + +// Takes in a black white run and an array of expected ratios. Returns the average size of the run as well as the "error" - +// that is the amount the run diverges from the expected ratio +function scoreBlackWhiteRun(sequence: number[], ratios: number[]) { + const averageSize = sum(sequence) / sum(ratios); + let error = 0; + ratios.forEach((ratio, i) => { + error += (sequence[i] - ratio * averageSize) ** 2; + }); + + return { averageSize, error }; +} + +// Takes an X,Y point and an array of sizes and scores the point against those ratios. +// For example for a finder pattern takes the ratio list of 1:1:3:1:1 and checks horizontal, vertical and diagonal ratios +// against that. +function scorePattern(point: Point, ratios: number[], matrix: BitMatrix) { + try { + const horizontalRun = countBlackWhiteRun(point, {x: -1, y: point.y}, matrix, ratios.length); + const verticalRun = countBlackWhiteRun(point, {x: point.x, y: -1}, matrix, ratios.length); + + const topLeftPoint = { + x: Math.max(0, point.x - point.y) - 1, + y: Math.max(0, point.y - point.x) - 1, + }; + const topLeftBottomRightRun = countBlackWhiteRun(point, topLeftPoint, matrix, ratios.length); + + const bottomLeftPoint = { + x: Math.min(matrix.width, point.x + point.y) + 1, + y: Math.min(matrix.height, point.y + point.x) + 1, + }; + const bottomLeftTopRightRun = countBlackWhiteRun(point, bottomLeftPoint, matrix, ratios.length); + + const horzError = scoreBlackWhiteRun(horizontalRun, ratios); + const vertError = scoreBlackWhiteRun(verticalRun, ratios); + const diagDownError = scoreBlackWhiteRun(topLeftBottomRightRun, ratios); + const diagUpError = scoreBlackWhiteRun(bottomLeftTopRightRun, ratios); + + const ratioError = Math.sqrt(horzError.error * horzError.error + + vertError.error * vertError.error + + diagDownError.error * diagDownError.error + + diagUpError.error * diagUpError.error); + + const avgSize = (horzError.averageSize + vertError.averageSize + diagDownError.averageSize + diagUpError.averageSize) / 4; + + const sizeError = ((horzError.averageSize - avgSize) ** 2 + + (vertError.averageSize - avgSize) ** 2 + + (diagDownError.averageSize - avgSize) ** 2 + + (diagUpError.averageSize - avgSize) ** 2) / avgSize; + return ratioError + sizeError; + } catch { + return Infinity; + } +} + +function recenterLocation(matrix: BitMatrix, p: Point): Point { + let leftX = Math.round(p.x); + while (matrix.get(leftX, Math.round(p.y))) { + leftX--; + } + let rightX = Math.round(p.x); + while (matrix.get(rightX, Math.round(p.y))) { + rightX++; + } + const x = (leftX + rightX) / 2; + + let topY = Math.round(p.y); + while (matrix.get(Math.round(x), topY)) { + topY--; + } + let bottomY = Math.round(p.y); + while (matrix.get(Math.round(x), bottomY)) { + bottomY++; + } + const y = (topY + bottomY) / 2; + + return { x, y }; +} + +interface Quad { + top: { + startX: number; + endX: number; + y: number; + }; + bottom: { + startX: number; + endX: number; + y: number; + }; +} + +export function locate(matrix: BitMatrix): QRLocation[] { + const finderPatternQuads: Quad[] = []; + let activeFinderPatternQuads: Quad[] = []; + const alignmentPatternQuads: Quad[] = []; + let activeAlignmentPatternQuads: Quad[] = []; + + for (let y = 0; y <= matrix.height; y++) { + let length = 0; + let lastBit = false; + let scans = [0, 0, 0, 0, 0]; + + for (let x = -1; x <= matrix.width; x++) { + const v = matrix.get(x, y); + if (v === lastBit) { + length++; + } else { + scans = [scans[1], scans[2], scans[3], scans[4], length]; + length = 1; + lastBit = v; + + // Do the last 5 color changes ~ match the expected ratio for a finder pattern? 1:1:3:1:1 of b:w:b:w:b + const averageFinderPatternBlocksize = sum(scans) / 7; + const validFinderPattern = + Math.abs(scans[0] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[1] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[2] - 3 * averageFinderPatternBlocksize) < 3 * averageFinderPatternBlocksize && + Math.abs(scans[3] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + Math.abs(scans[4] - averageFinderPatternBlocksize) < averageFinderPatternBlocksize && + !v; // And make sure the current pixel is white since finder patterns are bordered in white + + // Do the last 3 color changes ~ match the expected ratio for an alignment pattern? 1:1:1 of w:b:w + const averageAlignmentPatternBlocksize = sum(scans.slice(-3)) / 3; + const validAlignmentPattern = + Math.abs(scans[2] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[3] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + Math.abs(scans[4] - averageAlignmentPatternBlocksize) < averageAlignmentPatternBlocksize && + v; // Is the current pixel black since alignment patterns are bordered in black + + if (validFinderPattern) { + // Compute the start and end x values of the large center black square + const endX = x - scans[3] - scans[4]; + const startX = endX - scans[2]; + + const line = { startX, endX, y }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + const matchingQuads = activeFinderPatternQuads.filter(q => + (startX >= q.bottom.startX && startX <= q.bottom.endX) || + (endX >= q.bottom.startX && startX <= q.bottom.endX) || + (startX <= q.bottom.startX && endX >= q.bottom.endX && ( + (scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO + )), + ); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } else { + activeFinderPatternQuads.push({ top: line, bottom: line }); + } + } + if (validAlignmentPattern) { + // Compute the start and end x values of the center black square + const endX = x - scans[4]; + const startX = endX - scans[3]; + + const line = { startX, y, endX }; + // Is there a quad directly above the current spot? If so, extend it with the new line. Otherwise, create a new quad with + // that line as the starting point. + const matchingQuads = activeAlignmentPatternQuads.filter(q => + (startX >= q.bottom.startX && startX <= q.bottom.endX) || + (endX >= q.bottom.startX && startX <= q.bottom.endX) || + (startX <= q.bottom.startX && endX >= q.bottom.endX && ( + (scans[2] / (q.bottom.endX - q.bottom.startX)) < MAX_QUAD_RATIO && + (scans[2] / (q.bottom.endX - q.bottom.startX)) > MIN_QUAD_RATIO + )), + ); + if (matchingQuads.length > 0) { + matchingQuads[0].bottom = line; + } else { + activeAlignmentPatternQuads.push({ top: line, bottom: line }); + } + } + } + } + finderPatternQuads.push(...activeFinderPatternQuads.filter(q => q.bottom.y !== y && q.bottom.y - q.top.y >= 2)); + activeFinderPatternQuads = activeFinderPatternQuads.filter(q => q.bottom.y === y); + + alignmentPatternQuads.push(...activeAlignmentPatternQuads.filter(q => q.bottom.y !== y)); + activeAlignmentPatternQuads = activeAlignmentPatternQuads.filter(q => q.bottom.y === y); + + } + + finderPatternQuads.push(...activeFinderPatternQuads.filter(q => q.bottom.y - q.top.y >= 2)); + alignmentPatternQuads.push(...activeAlignmentPatternQuads); + + const finderPatternGroups = finderPatternQuads + .filter(q => q.bottom.y - q.top.y >= 2) // All quads must be at least 2px tall since the center square is larger than a block + .map(q => { // Initial scoring of finder pattern quads by looking at their ratios, not taking into account position + const x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + const y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.round(x), Math.round(y))) { + return; + } + + const lengths = [q.top.endX - q.top.startX, q.bottom.endX - q.bottom.startX, q.bottom.y - q.top.y + 1]; + const size = sum(lengths) / lengths.length; + const score = scorePattern({x: Math.round(x), y: Math.round(y)}, [1, 1, 3, 1, 1], matrix); + return { score, x, y, size }; + }) + .filter(q => !!q) // Filter out any rejected quads from above + .sort((a, b) => a.score - b.score) + // Now take the top finder pattern options and try to find 2 other options with a similar size. + .map((point, i, finderPatterns) => { + if (i > MAX_FINDERPATTERNS_TO_SEARCH) { + return null; + } + const otherPoints = finderPatterns + .filter((p, ii) => i !== ii) + .map(p => ({ x: p.x, y: p.y, score: p.score + ((p.size - point.size) ** 2) / point.size, size: p.size })) + .sort((a, b) => a.score - b.score); + if (otherPoints.length < 2) { + return null; + } + const score = point.score + otherPoints[0].score + otherPoints[1].score; + return {points: [point].concat(otherPoints.slice(0, 2)), score}; + }) + .filter(q => !!q) // Filter out any rejected finder patterns from above + .sort((a, b) => a.score - b.score); + + if (finderPatternGroups.length === 0) { + return null; + } + + const { topRight, topLeft, bottomLeft } = reorderFinderPatterns( + finderPatternGroups[0].points[0], finderPatternGroups[0].points[1], finderPatternGroups[0].points[2], + ); + const alignment = findAlignmentPattern(matrix, alignmentPatternQuads, topRight, topLeft, bottomLeft); + const result: QRLocation[] = []; + if (alignment) { + result.push({ + alignmentPattern: { x: alignment.alignmentPattern.x, y: alignment.alignmentPattern.y }, + bottomLeft: {x: bottomLeft.x, y: bottomLeft.y }, + dimension: alignment.dimension, + topLeft: {x: topLeft.x, y: topLeft.y }, + topRight: {x: topRight.x, y: topRight.y }, + }); + } + + // We normally use the center of the quads as the location of the tracking points, which is optimal for most cases and will account + // for a skew in the image. However, In some cases, a slight skew might not be real and instead be caused by image compression + // errors and/or low resolution. For those cases, we'd be better off centering the point exactly in the middle of the black area. We + // compute and return the location data for the naively centered points as it is little additional work and allows for multiple + // attempts at decoding harder images. + const midTopRight = recenterLocation(matrix, topRight); + const midTopLeft = recenterLocation(matrix, topLeft); + const midBottomLeft = recenterLocation(matrix, bottomLeft); + const centeredAlignment = findAlignmentPattern(matrix, alignmentPatternQuads, midTopRight, midTopLeft, midBottomLeft); + if (centeredAlignment) { + result.push({ + alignmentPattern: { x: centeredAlignment.alignmentPattern.x, y: centeredAlignment.alignmentPattern.y }, + bottomLeft: { x: midBottomLeft.x, y: midBottomLeft. y }, + topLeft: { x: midTopLeft.x, y: midTopLeft. y }, + topRight: { x: midTopRight.x, y: midTopRight. y }, + dimension: centeredAlignment.dimension, + }); + } + + if (result.length === 0) { + return null; + } + + return result; +} + +function findAlignmentPattern(matrix: BitMatrix, alignmentPatternQuads: Quad[], topRight: Point, topLeft: Point, bottomLeft: Point) { + // Now that we've found the three finder patterns we can determine the blockSize and the size of the QR code. + // We'll use these to help find the alignment pattern but also later when we do the extraction. + let dimension: number; + let moduleSize: number; + try { + ({ dimension, moduleSize } = computeDimension(topLeft, topRight, bottomLeft, matrix)); + } catch (e) { + return null; + } + + // Now find the alignment pattern + const bottomRightFinderPattern = { // Best guess at where a bottomRight finder pattern would be + x: topRight.x - topLeft.x + bottomLeft.x, + y: topRight.y - topLeft.y + bottomLeft.y, + }; + const modulesBetweenFinderPatterns = ((distance(topLeft, bottomLeft) + distance(topLeft, topRight)) / 2 / moduleSize); + const correctionToTopLeft = 1 - (3 / modulesBetweenFinderPatterns); + const expectedAlignmentPattern = { + x: topLeft.x + correctionToTopLeft * (bottomRightFinderPattern.x - topLeft.x), + y: topLeft.y + correctionToTopLeft * (bottomRightFinderPattern.y - topLeft.y), + }; + + const alignmentPatterns = alignmentPatternQuads + .map(q => { + const x = (q.top.startX + q.top.endX + q.bottom.startX + q.bottom.endX) / 4; + const y = (q.top.y + q.bottom.y + 1) / 2; + if (!matrix.get(Math.floor(x), Math.floor(y))) { + return; + } + + const sizeScore = scorePattern({x: Math.floor(x), y: Math.floor(y)}, [1, 1, 1], matrix); + const score = sizeScore + distance({x, y}, expectedAlignmentPattern); + return { x, y, score }; + }) + .filter(v => !!v) + .sort((a, b) => a.score - b.score); + + // If there are less than 15 modules between finder patterns it's a version 1 QR code and as such has no alignmemnt pattern + // so we can only use our best guess. + const alignmentPattern = modulesBetweenFinderPatterns >= 15 && alignmentPatterns.length ? alignmentPatterns[0] : expectedAlignmentPattern; + + return { alignmentPattern, dimension }; +} diff --git a/jsQR/src/locator/test-data/damaged.png b/jsQR/src/locator/test-data/damaged.png new file mode 100644 index 0000000000000000000000000000000000000000..70288a5c37231d6fcda248e35e6e44434c66565e Binary files /dev/null and b/jsQR/src/locator/test-data/damaged.png differ diff --git a/jsQR/src/locator/test-data/distorted-extreme.png b/jsQR/src/locator/test-data/distorted-extreme.png new file mode 100644 index 0000000000000000000000000000000000000000..c692fe509c7a649ac42e1d9bb1482d8ee29f3a2d Binary files /dev/null and b/jsQR/src/locator/test-data/distorted-extreme.png differ diff --git a/jsQR/src/locator/test-data/malformed-infinity.png b/jsQR/src/locator/test-data/malformed-infinity.png new file mode 100644 index 0000000000000000000000000000000000000000..6dbfceef73aa85dae1b3cd2ff939459147dab358 Binary files /dev/null and b/jsQR/src/locator/test-data/malformed-infinity.png differ diff --git a/jsQR/src/locator/test-data/missing-finder-patterns.png b/jsQR/src/locator/test-data/missing-finder-patterns.png new file mode 100644 index 0000000000000000000000000000000000000000..5cd2b991e2a647bd141f8017a0ae6f388e9b1d76 Binary files /dev/null and b/jsQR/src/locator/test-data/missing-finder-patterns.png differ diff --git a/jsQR/src/locator/test-data/odd-skew.png b/jsQR/src/locator/test-data/odd-skew.png new file mode 100644 index 0000000000000000000000000000000000000000..ce0ccd5cc998b0bbe694497b54004d983b76f6ec Binary files /dev/null and b/jsQR/src/locator/test-data/odd-skew.png differ diff --git a/jsQR/src/locator/test-data/perfect.png b/jsQR/src/locator/test-data/perfect.png new file mode 100644 index 0000000000000000000000000000000000000000..8b73eaece39050dc83cfedac0cb4dcb4ad32e097 Binary files /dev/null and b/jsQR/src/locator/test-data/perfect.png differ diff --git a/jsQR/src/locator/test-data/real-world.png b/jsQR/src/locator/test-data/real-world.png new file mode 100644 index 0000000000000000000000000000000000000000..1e19a80b4dce54654a03dfe1af6ed84a77195892 Binary files /dev/null and b/jsQR/src/locator/test-data/real-world.png differ diff --git a/jsQR/src/locator/test-data/small-photo.png b/jsQR/src/locator/test-data/small-photo.png new file mode 100644 index 0000000000000000000000000000000000000000..5c29a64b2ec60e386738adb6beb9b53fd98eda87 Binary files /dev/null and b/jsQR/src/locator/test-data/small-photo.png differ diff --git a/jsQR/src/locator/test.ts b/jsQR/src/locator/test.ts new file mode 100644 index 0000000000000000000000000000000000000000..cf61035093528b19ade9109d052652452eb2b6c6 --- /dev/null +++ b/jsQR/src/locator/test.ts @@ -0,0 +1,93 @@ +import {loadBinarized} from "../../tests/helpers"; +import {locate} from "./"; + +describe("locate", () => { + it("handles images with missing finder patterns", async () => { + const binarized = await loadBinarized("./src/locator/test-data/missing-finder-patterns.png"); + expect(() => locate(binarized)).not.toThrow(); + expect(locate(binarized)).toEqual(null); + }); + + it('locates a "perfect" image', async () => { + const binarized = await loadBinarized("./src/locator/test-data/perfect.png"); + expect(locate(binarized)[0]).toEqual({ + alignmentPattern: {x: 170.5, y: 170.5}, + bottomLeft: {x: 3.5, y: 173.5}, + dimension: 177, + topLeft: {x: 3.5, y: 3.5}, + topRight: {x: 173.5, y: 3.5}, + }); + }); + + it("locates a QR in a real world image", async () => { + const binarized = await loadBinarized("./src/locator/test-data/real-world.png"); + expect(locate(binarized)[0]).toEqual({ + alignmentPattern: { x: 264.25, y: 177 }, + bottomLeft: { x: 195.5, y: 191.5 }, + dimension: 33, + topLeft: { x: 191.75, y: 113.5 }, + topRight: { x: 270.75, y: 107.5 }, + }); + }); + + it("locates a small QR code in real world photo", async () => { + const binarized = await loadBinarized("./src/locator/test-data/small-photo.png"); + expect(locate(binarized)[0]).toEqual({ + alignmentPattern: { x: 103, y: 147.5 }, + bottomLeft: { x: 73.5, y: 152 }, + dimension: 29, + topLeft: { x: 74, y: 117.5 }, + topRight: { x: 108, y: 118 }, + }); + }); + + it("locates a extremely distored QR code", async () => { + const binarized = await loadBinarized("./src/locator/test-data/distorted-extreme.png"); + expect(locate(binarized)[0]).toEqual({ + alignmentPattern: { x: 164.5, y: 39 }, + bottomLeft: { x: 221.5, y: 18.5 }, + dimension: 25, + topLeft: { x: 180.5, y: 101 }, + topRight: { x: 122.75, y: 105 }, + }); + }); + + it("locates a damaged QR code and guesses the finder pattern location", async () => { + const binarized = await loadBinarized("./src/locator/test-data/damaged.png"); + expect(locate(binarized)[0]).toEqual({ + alignmentPattern: { x: 219.75, y: 221 }, + bottomLeft: { x: 81.5, y: 215.5 }, + dimension: 29, + topLeft: { x: 82, y: 75.5 }, + topRight: { x: 221.75, y: 76 }, + }); + }); + + it("locates a damaged QR code and guesses the finder pattern location", async () => { + const binarized = await loadBinarized("./src/locator/test-data/damaged.png"); + expect(locate(binarized)[0]).toEqual({ + alignmentPattern: { x: 219.75, y: 221 }, + bottomLeft: { x: 81.5, y: 215.5 }, + dimension: 29, + topLeft: { x: 82, y: 75.5 }, + topRight: { x: 221.75, y: 76 }, + }); + }); + + it("doesn't locate a QR code in a malformed image", async () => { + // This image was created to be basically noise, but locator orignally found a QR code with size=Infinity within it + const binarized = await loadBinarized("./src/locator/test-data/malformed-infinity.png"); + expect(locate(binarized)).toEqual(null); + }); + + it("returns a centered alignment as a fallback", async () => { + const binarized = await loadBinarized("./src/locator/test-data/odd-skew.png"); + expect(locate(binarized)[1]).toEqual({ + alignmentPattern: { x: 163.5, y: 170 }, + bottomLeft: { x: 56.5, y: 185.5 }, + dimension: 29, + topLeft: { x: 57, y: 60 }, + topRight: { x: 185.5, y: 57.5 }, + }); + }); +}); diff --git a/jsQR/tests/end-to-end-test.ts b/jsQR/tests/end-to-end-test.ts new file mode 100644 index 0000000000000000000000000000000000000000..a29d278fc2145d5cccc243a712ec719ffd3eea54 --- /dev/null +++ b/jsQR/tests/end-to-end-test.ts @@ -0,0 +1,16 @@ +import * as fs from "fs-extra"; +import * as path from "path"; +import jsQR from "../src"; +import { loadPng } from "../tests/helpers"; +import * as helpers from "./helpers"; + +describe("end to end", async () => { + const tests = fs.readdirSync(path.join("tests", "end-to-end")).filter((n) => !n.includes(".")); + for (const t of tests) { + it(t, async () => { + const inputImage = await helpers.loadPng(path.join("tests", "end-to-end", t, "input.png")); + const expectedOutput = JSON.parse(await fs.readFile(path.join("tests", "end-to-end", t, "output.json"), "utf8")); + expect(jsQR(inputImage.data, inputImage.width, inputImage.height)).toEqual(expectedOutput); + }); + } +}); diff --git a/jsQR/tests/end-to-end/0/input.png b/jsQR/tests/end-to-end/0/input.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2cf42fba44eaa3ca37b53f099d4bc5b5ab9088 Binary files /dev/null and b/jsQR/tests/end-to-end/0/input.png differ diff --git a/jsQR/tests/end-to-end/0/output.json b/jsQR/tests/end-to-end/0/output.json new file mode 100644 index 0000000000000000000000000000000000000000..70685e91a88bf281e166268f5ca405f857ff3341 --- /dev/null +++ b/jsQR/tests/end-to-end/0/output.json @@ -0,0 +1,156 @@ +{ + "binaryData": [ + 72, + 97, + 112, + 112, + 121, + 32, + 49, + 115, + 116, + 32, + 66, + 105, + 114, + 116, + 104, + 100, + 97, + 121, + 32, + 71, + 101, + 101, + 107, + 85, + 112, + 32, + 76, + 101, + 101, + 100, + 115, + 33, + 32, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 103, + 101, + 101, + 107, + 117, + 112, + 46, + 111, + 114, + 103 + ], + "data": "Happy 1st Birthday GeekUp Leeds! http://www.geekup.org", + "chunks": [ + { + "type": "byte", + "bytes": [ + 72, + 97, + 112, + 112, + 121, + 32, + 49, + 115, + 116, + 32, + 66, + 105, + 114, + 116, + 104, + 100, + 97, + 121, + 32, + 71, + 101, + 101, + 107, + 85, + 112, + 32, + 76, + 101, + 101, + 100, + 115, + 33, + 32, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 103, + 101, + 101, + 107, + 117, + 112, + 46, + 111, + 114, + 103 + ], + "text": "Happy 1st Birthday GeekUp Leeds! http://www.geekup.org" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 85.6589952404445, + "y": 152.95701493173004 + }, + "topLeftCorner": { + "x": 198.49511301678757, + "y": 155.7757992624642 + }, + "bottomRightCorner": { + "x": 88.94963836398668, + "y": 39.94221579273518 + }, + "bottomLeftCorner": { + "x": 200.82807352747398, + "y": 45.02369025435685 + }, + "topRightFinderPattern": { + "x": 95.75, + "y": 143.5 + }, + "topLeftFinderPattern": { + "x": 189.25, + "y": 146 + }, + "bottomLeftFinderPattern": { + "x": 191.25, + "y": 54 + }, + "bottomRightAlignmentPattern": { + "x": 106.5, + "y": 58.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/1/input.png b/jsQR/tests/end-to-end/1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..b4302bd590fea8560fe2ae9b52b295f8a2d563f5 Binary files /dev/null and b/jsQR/tests/end-to-end/1/input.png differ diff --git a/jsQR/tests/end-to-end/1/output.json b/jsQR/tests/end-to-end/1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..7cd0098204de58b82f66603b58b8bbfc7d1a59d0 --- /dev/null +++ b/jsQR/tests/end-to-end/1/output.json @@ -0,0 +1,104 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 100, + 115, + 105, + 116, + 101, + 115, + 46, + 99, + 111, + 109, + 46, + 97, + 117, + 47, + 63, + 69, + 61, + 50, + 56, + 48 + ], + "data": "http://adsites.com.au/?E=280", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 100, + 115, + 105, + 116, + 101, + 115, + 46, + 99, + 111, + 109, + 46, + 97, + 117, + 47, + 63, + 69, + 61, + 50, + 56, + 48 + ], + "text": "http://adsites.com.au/?E=280" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 113.42608710225241, + "y": 112.6525518412585 + }, + "topLeftCorner": { + "x": 68.61663289156108, + "y": 111.93099954299421 + }, + "bottomRightCorner": { + "x": 112.83506232554757, + "y": 157.67420240573884 + }, + "bottomLeftCorner": { + "x": 67.94799307253464, + "y": 157.47154305895137 + }, + "topRightFinderPattern": { + "x": 108, + "y": 118 + }, + "topLeftFinderPattern": { + "x": 74, + "y": 117.5 + }, + "bottomLeftFinderPattern": { + "x": 73.5, + "y": 152 + }, + "bottomRightAlignmentPattern": { + "x": 103, + "y": 147.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/10/input.png b/jsQR/tests/end-to-end/10/input.png new file mode 100644 index 0000000000000000000000000000000000000000..922e1bf5ee7c39587e0a09cd43b7dd8ce165055c Binary files /dev/null and b/jsQR/tests/end-to-end/10/input.png differ diff --git a/jsQR/tests/end-to-end/10/output.json b/jsQR/tests/end-to-end/10/output.json new file mode 100644 index 0000000000000000000000000000000000000000..3b3ce09d3e70d84c88d16cd5d05ff59bfb1654f4 --- /dev/null +++ b/jsQR/tests/end-to-end/10/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 46, + 98, + 121, + 47, + 119, + 107, + 69, + 116, + 99, + 111 + ], + "data": "http://goo.by/wkEtco", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 46, + 98, + 121, + 47, + 119, + 107, + 69, + 116, + 99, + 111 + ], + "text": "http://goo.by/wkEtco" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 154.85921217173825, + "y": 86.89078782826178 + }, + "topLeftCorner": { + "x": 66.39929838307573, + "y": 90.77826055986894 + }, + "bottomRightCorner": { + "x": 154.69686500102117, + "y": 167.88317788821564 + }, + "bottomLeftCorner": { + "x": 68.0534742570113, + "y": 173.69652574298868 + }, + "topRightFinderPattern": { + "x": 142.75, + "y": 99 + }, + "topLeftFinderPattern": { + "x": 79.25, + "y": 102 + }, + "bottomLeftFinderPattern": { + "x": 80.25, + "y": 161.5 + }, + "bottomRightAlignmentPattern": { + "x": 132.5, + "y": 148.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/100/input.png b/jsQR/tests/end-to-end/100/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a68653aaa92e0d133c2a7250868f2f09341ba105 Binary files /dev/null and b/jsQR/tests/end-to-end/100/input.png differ diff --git a/jsQR/tests/end-to-end/100/output.json b/jsQR/tests/end-to-end/100/output.json new file mode 100644 index 0000000000000000000000000000000000000000..71c066b9c438ecc634af1ef0bfe1c8d0dd0c5ead --- /dev/null +++ b/jsQR/tests/end-to-end/100/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 197.5677712942401, + "y": 48.10435501705025 + }, + "topLeftCorner": { + "x": 56.68428350077624, + "y": 45.85172967337695 + }, + "bottomRightCorner": { + "x": 199.19066847712892, + "y": 194.66370690532045 + }, + "bottomLeftCorner": { + "x": 52.42520481178057, + "y": 188.38568721540824 + }, + "topRightFinderPattern": { + "x": 177.5, + "y": 67.5 + }, + "topLeftFinderPattern": { + "x": 75.5, + "y": 65.5 + }, + "bottomLeftFinderPattern": { + "x": 73, + "y": 168.5 + }, + "bottomRightAlignmentPattern": { + "x": 160.25, + "y": 154 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/101/input.png b/jsQR/tests/end-to-end/101/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d243afeaceafa1ede89caf7aa65c2272a6dcebb1 Binary files /dev/null and b/jsQR/tests/end-to-end/101/input.png differ diff --git a/jsQR/tests/end-to-end/101/output.json b/jsQR/tests/end-to-end/101/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d9b277c7bb3a7b6a92e347ba1a79f9f17259678e --- /dev/null +++ b/jsQR/tests/end-to-end/101/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 159.73217768147347, + "y": 78.1715059588299 + }, + "topLeftCorner": { + "x": 72.00950689796476, + "y": 78.50950689796476 + }, + "bottomRightCorner": { + "x": 162.80750777710506, + "y": 169.30750777710506 + }, + "bottomLeftCorner": { + "x": 71.53647316538883, + "y": 167.06166484118293 + }, + "topRightFinderPattern": { + "x": 147.5, + "y": 90.5 + }, + "topLeftFinderPattern": { + "x": 84, + "y": 90.5 + }, + "bottomLeftFinderPattern": { + "x": 84, + "y": 154.5 + }, + "bottomRightAlignmentPattern": { + "x": 138, + "y": 144.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/102/input.png b/jsQR/tests/end-to-end/102/input.png new file mode 100755 index 0000000000000000000000000000000000000000..4b35768f7c2a8521260223e4fbd5a8aeedad8b28 Binary files /dev/null and b/jsQR/tests/end-to-end/102/input.png differ diff --git a/jsQR/tests/end-to-end/102/output.json b/jsQR/tests/end-to-end/102/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e3896a4ce4e38f99b90d1e63230e28ddc3e83d20 --- /dev/null +++ b/jsQR/tests/end-to-end/102/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 148.87214934818655, + "y": 96.23478543244248 + }, + "topLeftCorner": { + "x": 62.19948595694537, + "y": 100.66548991872958 + }, + "bottomRightCorner": { + "x": 157.4014596473444, + "y": 183.8113184692964 + }, + "bottomLeftCorner": { + "x": 69.68203402110966, + "y": 191.40185385182437 + }, + "topRightFinderPattern": { + "x": 138.25, + "y": 109 + }, + "topLeftFinderPattern": { + "x": 75.75, + "y": 112.5 + }, + "bottomLeftFinderPattern": { + "x": 81.25, + "y": 177.5 + }, + "bottomRightAlignmentPattern": { + "x": 133, + "y": 162.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/103/input.png b/jsQR/tests/end-to-end/103/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1511411517e4584cdf94c1b0d28900a35362b528 Binary files /dev/null and b/jsQR/tests/end-to-end/103/input.png differ diff --git a/jsQR/tests/end-to-end/103/output.json b/jsQR/tests/end-to-end/103/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e76cab0e154170226ebbc75225cfc83cab0b4cbe --- /dev/null +++ b/jsQR/tests/end-to-end/103/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 182.3493957207536, + "y": 63.7916331970206 + }, + "topLeftCorner": { + "x": 76.60162257512272, + "y": 58.34922489051993 + }, + "bottomRightCorner": { + "x": 173.13902278419997, + "y": 164.7878969159128 + }, + "bottomLeftCorner": { + "x": 73.31325655084022, + "y": 163.1048045428653 + }, + "topRightFinderPattern": { + "x": 166.75, + "y": 78 + }, + "topLeftFinderPattern": { + "x": 91.25, + "y": 74.5 + }, + "bottomLeftFinderPattern": { + "x": 88.25, + "y": 149.5 + }, + "bottomRightAlignmentPattern": { + "x": 149.75, + "y": 139 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/104/input.png b/jsQR/tests/end-to-end/104/input.png new file mode 100755 index 0000000000000000000000000000000000000000..5666aaa7981dcba137dad68a49f83bebc22f3ef0 Binary files /dev/null and b/jsQR/tests/end-to-end/104/input.png differ diff --git a/jsQR/tests/end-to-end/104/output.json b/jsQR/tests/end-to-end/104/output.json new file mode 100644 index 0000000000000000000000000000000000000000..b6fdcffd67dba500aeee25f04e17b64be8db5604 --- /dev/null +++ b/jsQR/tests/end-to-end/104/output.json @@ -0,0 +1,249 @@ +{ + "binaryData": [ + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 13, + 10, + 57, + 49, + 55, + 45, + 51, + 54, + 52, + 45, + 50, + 57, + 49, + 56, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 119, + 101, + 115, + 111, + 109, + 101, + 45, + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115, + 46, + 99, + 111, + 109 + ], + "data": "Sean Owen\r\nsrowen@google.com\r\n917-364-2918\r\nhttp://awesome-thoughts.com", + "chunks": [ + { + "type": "alphanumeric", + "text": "S" + }, + { + "type": "byte", + "bytes": [ + 101, + 97, + 110 + ], + "text": "ean" + }, + { + "type": "alphanumeric", + "text": " O" + }, + { + "type": "byte", + "bytes": [ + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101 + ], + "text": "wen\r\nsrowen@google" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109, + 13, + 10 + ], + "text": "com\r\n" + }, + { + "type": "numeric", + "text": "917" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "364" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "2918" + }, + { + "type": "byte", + "bytes": [ + 13, + 10, + 104, + 116, + 116, + 112 + ], + "text": "\r\nhttp" + }, + { + "type": "alphanumeric", + "text": "://" + }, + { + "type": "byte", + "bytes": [ + 97, + 119, + 101, + 115, + 111, + 109, + 101 + ], + "text": "awesome" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "byte", + "bytes": [ + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115 + ], + "text": "thoughts" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109 + ], + "text": "com" + } + ], + "version": 10, + "location": { + "topRightCorner": { + "x": 434.3684090700159, + "y": 372.64054806690245 + }, + "topLeftCorner": { + "x": 442.0267592966126, + "y": 111.63470013251761 + }, + "bottomRightCorner": { + "x": 159.84156966262614, + "y": 371.41462792861245 + }, + "bottomLeftCorner": { + "x": 158.75338098037034, + "y": 109.2814105748316 + }, + "topRightFinderPattern": { + "x": 418, + "y": 357 + }, + "topLeftFinderPattern": { + "x": 424.25, + "y": 128 + }, + "bottomLeftFinderPattern": { + "x": 176.25, + "y": 126 + }, + "bottomRightAlignmentPattern": { + "x": 191.25, + "y": 342.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/105/input.png b/jsQR/tests/end-to-end/105/input.png new file mode 100755 index 0000000000000000000000000000000000000000..fcdbf1a455ecdb595c0ec39074b410b3a74f41b9 Binary files /dev/null and b/jsQR/tests/end-to-end/105/input.png differ diff --git a/jsQR/tests/end-to-end/105/output.json b/jsQR/tests/end-to-end/105/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ed4be84dee1fe90e41036c0a12a07906fe744617 --- /dev/null +++ b/jsQR/tests/end-to-end/105/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 166.01939090836572, + "y": 55.588145221984455 + }, + "topLeftCorner": { + "x": 65.55633060777205, + "y": 40.300460013728156 + }, + "bottomRightCorner": { + "x": 152.58710763821122, + "y": 151.36830879543146 + }, + "bottomLeftCorner": { + "x": 57.63373060182759, + "y": 136.18261057812822 + }, + "topRightFinderPattern": { + "x": 150, + "y": 67.5 + }, + "topLeftFinderPattern": { + "x": 78.25, + "y": 56.5 + }, + "bottomLeftFinderPattern": { + "x": 72, + "y": 125.5 + }, + "bottomRightAlignmentPattern": { + "x": 130.75, + "y": 123.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/106/input.png b/jsQR/tests/end-to-end/106/input.png new file mode 100755 index 0000000000000000000000000000000000000000..798dbe8f4ba3af1795b753c5fa46023834205af4 Binary files /dev/null and b/jsQR/tests/end-to-end/106/input.png differ diff --git a/jsQR/tests/end-to-end/106/output.json b/jsQR/tests/end-to-end/106/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8096570ef03dbd0e066af5b95dd9c463f98f9adf --- /dev/null +++ b/jsQR/tests/end-to-end/106/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 188.32137902348023, + "y": 69.17143020820102 + }, + "topLeftCorner": { + "x": 83.70619890899266, + "y": 75.64949657640803 + }, + "bottomRightCorner": { + "x": 185.73056945785052, + "y": 167.72026999854805 + }, + "bottomLeftCorner": { + "x": 86.53280164801451, + "y": 172.69701402352106 + }, + "topRightFinderPattern": { + "x": 173.25, + "y": 84.5 + }, + "topLeftFinderPattern": { + "x": 98.5, + "y": 89 + }, + "bottomLeftFinderPattern": { + "x": 100, + "y": 159 + }, + "bottomRightAlignmentPattern": { + "x": 160, + "y": 144.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/107/input.png b/jsQR/tests/end-to-end/107/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d060a1624334a5b8401c912dc3aa80fafa8aa0ff Binary files /dev/null and b/jsQR/tests/end-to-end/107/input.png differ diff --git a/jsQR/tests/end-to-end/107/output.json b/jsQR/tests/end-to-end/107/output.json new file mode 100644 index 0000000000000000000000000000000000000000..dcc191de41d7d81a7f23c2c88c0d9a361c497f09 --- /dev/null +++ b/jsQR/tests/end-to-end/107/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 169.0240609231919, + "y": 66.21248364791626 + }, + "topLeftCorner": { + "x": 66.91016811829046, + "y": 72.99442981567752 + }, + "bottomRightCorner": { + "x": 172.04020871700428, + "y": 163.1058931860037 + }, + "bottomLeftCorner": { + "x": 72.44961410278898, + "y": 166.2608314330819 + }, + "topRightFinderPattern": { + "x": 154.75, + "y": 81 + }, + "topLeftFinderPattern": { + "x": 81.5, + "y": 85.5 + }, + "bottomLeftFinderPattern": { + "x": 85.25, + "y": 153 + }, + "bottomRightAlignmentPattern": { + "x": 144.5, + "y": 139.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/108/input.png b/jsQR/tests/end-to-end/108/input.png new file mode 100755 index 0000000000000000000000000000000000000000..8e389ad839a6b88134bef1be6234e59835011a83 Binary files /dev/null and b/jsQR/tests/end-to-end/108/input.png differ diff --git a/jsQR/tests/end-to-end/108/output.json b/jsQR/tests/end-to-end/108/output.json new file mode 100644 index 0000000000000000000000000000000000000000..3c4281b2e01646e2e65c89908001262786b4bc39 --- /dev/null +++ b/jsQR/tests/end-to-end/108/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 170.53536763643123, + "y": 64.6749916375875 + }, + "topLeftCorner": { + "x": 71.81802141019044, + "y": 66.8021723108595 + }, + "bottomRightCorner": { + "x": 170.92883700440532, + "y": 164.24725991189428 + }, + "bottomLeftCorner": { + "x": 72.96459355655887, + "y": 166.0652622116897 + }, + "topRightFinderPattern": { + "x": 156.75, + "y": 79 + }, + "topLeftFinderPattern": { + "x": 85.75, + "y": 80.5 + }, + "bottomLeftFinderPattern": { + "x": 86.5, + "y": 152 + }, + "bottomRightAlignmentPattern": { + "x": 145.25, + "y": 139 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/109/input.png b/jsQR/tests/end-to-end/109/input.png new file mode 100755 index 0000000000000000000000000000000000000000..57313f01b7e827fe1418ceb67426fb8c00637f8b Binary files /dev/null and b/jsQR/tests/end-to-end/109/input.png differ diff --git a/jsQR/tests/end-to-end/109/output.json b/jsQR/tests/end-to-end/109/output.json new file mode 100644 index 0000000000000000000000000000000000000000..bedf2be9de6d4f0fde1af8d2663c06169d884026 --- /dev/null +++ b/jsQR/tests/end-to-end/109/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 185.88491480894797, + "y": 73.2732681682958 + }, + "topLeftCorner": { + "x": 75.9547329614408, + "y": 51.43338058476192 + }, + "bottomRightCorner": { + "x": 163.39710157674966, + "y": 180.12214949031082 + }, + "bottomLeftCorner": { + "x": 57.064009284906184, + "y": 164.94097452502638 + }, + "topRightFinderPattern": { + "x": 168, + "y": 86 + }, + "topLeftFinderPattern": { + "x": 89.25, + "y": 71 + }, + "bottomLeftFinderPattern": { + "x": 75.25, + "y": 152 + }, + "bottomRightAlignmentPattern": { + "x": 142.25, + "y": 149 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/11/input.png b/jsQR/tests/end-to-end/11/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a8bea69c963fdaa3ad7a9488f88faa6db2159a39 Binary files /dev/null and b/jsQR/tests/end-to-end/11/input.png differ diff --git a/jsQR/tests/end-to-end/11/output.json b/jsQR/tests/end-to-end/11/output.json new file mode 100644 index 0000000000000000000000000000000000000000..74f2586b843612f89fec2226eb766bedeae1863d --- /dev/null +++ b/jsQR/tests/end-to-end/11/output.json @@ -0,0 +1,248 @@ +{ + "binaryData": [ + 66, + 73, + 90, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 84, + 111, + 100, + 100, + 59, + 88, + 58, + 79, + 103, + 97, + 115, + 97, + 119, + 97, + 114, + 97, + 59, + 84, + 58, + 84, + 101, + 99, + 104, + 32, + 71, + 101, + 101, + 107, + 59, + 67, + 58, + 77, + 111, + 98, + 105, + 108, + 101, + 86, + 105, + 101, + 119, + 115, + 46, + 99, + 111, + 109, + 59, + 65, + 58, + 77, + 111, + 98, + 105, + 108, + 101, + 84, + 111, + 119, + 110, + 32, + 85, + 83, + 65, + 59, + 69, + 58, + 101, + 100, + 105, + 116, + 111, + 114, + 64, + 109, + 111, + 98, + 105, + 108, + 101, + 118, + 105, + 101, + 119, + 115, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "BIZCARD:N:Todd;X:Ogasawara;T:Tech Geek;C:MobileViews.com;A:MobileTown USA;E:editor@mobileviews.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 66, + 73, + 90, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 84, + 111, + 100, + 100, + 59, + 88, + 58, + 79, + 103, + 97, + 115, + 97, + 119, + 97, + 114, + 97, + 59, + 84, + 58, + 84, + 101, + 99, + 104, + 32, + 71, + 101, + 101, + 107, + 59, + 67, + 58, + 77, + 111, + 98, + 105, + 108, + 101, + 86, + 105, + 101, + 119, + 115, + 46, + 99, + 111, + 109, + 59, + 65, + 58, + 77, + 111, + 98, + 105, + 108, + 101, + 84, + 111, + 119, + 110, + 32, + 85, + 83, + 65, + 59, + 69, + 58, + 101, + 100, + 105, + 116, + 111, + 114, + 64, + 109, + 111, + 98, + 105, + 108, + 101, + 118, + 105, + 101, + 119, + 115, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "BIZCARD:N:Todd;X:Ogasawara;T:Tech Geek;C:MobileViews.com;A:MobileTown USA;E:editor@mobileviews.com;;" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 194.80882352941174, + "y": 197.19117647058823 + }, + "topLeftCorner": { + "x": 27.15209825145711, + "y": 197.15209825145712 + }, + "bottomRightCorner": { + "x": 194.3924028619696, + "y": 364.39240286196963 + }, + "bottomLeftCorner": { + "x": 27.19117647058823, + "y": 364.80882352941177 + }, + "topRightFinderPattern": { + "x": 180.5, + "y": 211.5 + }, + "topLeftFinderPattern": { + "x": 41.5, + "y": 211.5 + }, + "bottomLeftFinderPattern": { + "x": 41.5, + "y": 350.5 + }, + "bottomRightAlignmentPattern": { + "x": 168, + "y": 338 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/110/input.png b/jsQR/tests/end-to-end/110/input.png new file mode 100755 index 0000000000000000000000000000000000000000..008c27165b6d8aaf14dc5776e885a1b391b49975 Binary files /dev/null and b/jsQR/tests/end-to-end/110/input.png differ diff --git a/jsQR/tests/end-to-end/110/output.json b/jsQR/tests/end-to-end/110/output.json new file mode 100644 index 0000000000000000000000000000000000000000..98a5b01f22742ab050edeb9d2d2f1954f37797f2 --- /dev/null +++ b/jsQR/tests/end-to-end/110/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 192.29645687188014, + "y": 64.54059914334923 + }, + "topLeftCorner": { + "x": 36.442384064000265, + "y": 64.84151908310231 + }, + "bottomRightCorner": { + "x": 184.66602108611372, + "y": 210.04018392109097 + }, + "bottomLeftCorner": { + "x": 41.296350906375515, + "y": 212.90314867277513 + }, + "topRightFinderPattern": { + "x": 173, + "y": 83.5 + }, + "topLeftFinderPattern": { + "x": 56, + "y": 84 + }, + "bottomLeftFinderPattern": { + "x": 58.5, + "y": 196 + }, + "bottomRightAlignmentPattern": { + "x": 154, + "y": 180 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/111/input.png b/jsQR/tests/end-to-end/111/input.png new file mode 100755 index 0000000000000000000000000000000000000000..65cd1b77c6540fcfa3f2e665dede461ac1bdb2f0 Binary files /dev/null and b/jsQR/tests/end-to-end/111/input.png differ diff --git a/jsQR/tests/end-to-end/111/output.json b/jsQR/tests/end-to-end/111/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1a8bf0abe7bc61ee198c37babf41a576f93e74a5 --- /dev/null +++ b/jsQR/tests/end-to-end/111/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 167.18381547345982, + "y": 57.045845589227405 + }, + "topLeftCorner": { + "x": 56.54554422678816, + "y": 70.36183159881142 + }, + "bottomRightCorner": { + "x": 176.6080253723111, + "y": 163.60623276337563 + }, + "bottomLeftCorner": { + "x": 72.04379592272957, + "y": 180.65842573543165 + }, + "topRightFinderPattern": { + "x": 153.75, + "y": 74.5 + }, + "topLeftFinderPattern": { + "x": 74.75, + "y": 84.5 + }, + "bottomLeftFinderPattern": { + "x": 85.25, + "y": 163.5 + }, + "bottomRightAlignmentPattern": { + "x": 147.5, + "y": 141 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/112/input.png b/jsQR/tests/end-to-end/112/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e6b2cfca59c6bbd75c2e0861ba56fb066fc1dfb0 Binary files /dev/null and b/jsQR/tests/end-to-end/112/input.png differ diff --git a/jsQR/tests/end-to-end/112/output.json b/jsQR/tests/end-to-end/112/output.json new file mode 100644 index 0000000000000000000000000000000000000000..5129dfdeaca8056a16dbc0f269577effa4d67b99 --- /dev/null +++ b/jsQR/tests/end-to-end/112/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 172.9974580887248, + "y": 50.4806027961024 + }, + "topLeftCorner": { + "x": 69.10836106121423, + "y": 50.69366576973603 + }, + "bottomRightCorner": { + "x": 179.1016110784594, + "y": 158.16798639727327 + }, + "bottomLeftCorner": { + "x": 70.5571004388054, + "y": 156.74077039229 + }, + "topRightFinderPattern": { + "x": 159, + "y": 65 + }, + "topLeftFinderPattern": { + "x": 83.75, + "y": 65 + }, + "bottomLeftFinderPattern": { + "x": 85.25, + "y": 141.5 + }, + "bottomRightAlignmentPattern": { + "x": 149.25, + "y": 129 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/113/input.png b/jsQR/tests/end-to-end/113/input.png new file mode 100755 index 0000000000000000000000000000000000000000..98957e6d9c7aa4368d1d6232fa5beafa3a86640d Binary files /dev/null and b/jsQR/tests/end-to-end/113/input.png differ diff --git a/jsQR/tests/end-to-end/113/output.json b/jsQR/tests/end-to-end/113/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f766d2f44af2ba50d053757098e388e3800b0366 --- /dev/null +++ b/jsQR/tests/end-to-end/113/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 200.4358819138471, + "y": 42.090188512506884 + }, + "topLeftCorner": { + "x": 35.16481714973237, + "y": 24.03517557973341 + }, + "bottomRightCorner": { + "x": 195.226647512039, + "y": 210.00501839536238 + }, + "bottomLeftCorner": { + "x": 29.388402071295257, + "y": 218.22458225372196 + }, + "topRightFinderPattern": { + "x": 184.5, + "y": 58.5 + }, + "topLeftFinderPattern": { + "x": 54.5, + "y": 46.5 + }, + "bottomLeftFinderPattern": { + "x": 50, + "y": 197 + }, + "bottomRightAlignmentPattern": { + "x": 167.25, + "y": 177.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/114/input.png b/jsQR/tests/end-to-end/114/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ca77f8e3a3a268fe85b713317565950a2081e87d Binary files /dev/null and b/jsQR/tests/end-to-end/114/input.png differ diff --git a/jsQR/tests/end-to-end/114/output.json b/jsQR/tests/end-to-end/114/output.json new file mode 100644 index 0000000000000000000000000000000000000000..a285c35873711c172eaf308c0e96f83439a02291 --- /dev/null +++ b/jsQR/tests/end-to-end/114/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 201.71716691463885, + "y": 46.77662831637149 + }, + "topLeftCorner": { + "x": 31.335168559474422, + "y": 46.52999978536716 + }, + "bottomRightCorner": { + "x": 202.70538787179436, + "y": 216.1113859107109 + }, + "bottomLeftCorner": { + "x": 35.13047753822854, + "y": 218.12293738925067 + }, + "topRightFinderPattern": { + "x": 184, + "y": 65 + }, + "topLeftFinderPattern": { + "x": 50, + "y": 65 + }, + "bottomLeftFinderPattern": { + "x": 52.75, + "y": 200 + }, + "bottomRightAlignmentPattern": { + "x": 169.75, + "y": 183.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/115/input.png b/jsQR/tests/end-to-end/115/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e5e468a3e489a1acac9f058babe5ffc50261c012 Binary files /dev/null and b/jsQR/tests/end-to-end/115/input.png differ diff --git a/jsQR/tests/end-to-end/115/output.json b/jsQR/tests/end-to-end/115/output.json new file mode 100644 index 0000000000000000000000000000000000000000..7e32a24d56d90cae136469c61480c1d2008efd4f --- /dev/null +++ b/jsQR/tests/end-to-end/115/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 209.25585261866343, + "y": 47.62520041449068 + }, + "topLeftCorner": { + "x": 53.51097183797822, + "y": 34.46469779904034 + }, + "bottomRightCorner": { + "x": 194.12755101460715, + "y": 200.0639179461364 + }, + "bottomLeftCorner": { + "x": 43.619000402441436, + "y": 191.0502142109128 + }, + "topRightFinderPattern": { + "x": 191.5, + "y": 63 + }, + "topLeftFinderPattern": { + "x": 69.25, + "y": 53 + }, + "bottomLeftFinderPattern": { + "x": 61, + "y": 176 + }, + "bottomRightAlignmentPattern": { + "x": 167.75, + "y": 169 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/116/input.png b/jsQR/tests/end-to-end/116/input.png new file mode 100755 index 0000000000000000000000000000000000000000..62d86d19524eb34016d37bee35d0abf5b2000fa2 Binary files /dev/null and b/jsQR/tests/end-to-end/116/input.png differ diff --git a/jsQR/tests/end-to-end/116/output.json b/jsQR/tests/end-to-end/116/output.json new file mode 100644 index 0000000000000000000000000000000000000000..9c76182f5a17fd7ea1f405d72336dd23ecdf9c01 --- /dev/null +++ b/jsQR/tests/end-to-end/116/output.json @@ -0,0 +1,249 @@ +{ + "binaryData": [ + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 13, + 10, + 57, + 49, + 55, + 45, + 51, + 54, + 52, + 45, + 50, + 57, + 49, + 56, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 119, + 101, + 115, + 111, + 109, + 101, + 45, + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115, + 46, + 99, + 111, + 109 + ], + "data": "Sean Owen\r\nsrowen@google.com\r\n917-364-2918\r\nhttp://awesome-thoughts.com", + "chunks": [ + { + "type": "alphanumeric", + "text": "S" + }, + { + "type": "byte", + "bytes": [ + 101, + 97, + 110 + ], + "text": "ean" + }, + { + "type": "alphanumeric", + "text": " O" + }, + { + "type": "byte", + "bytes": [ + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101 + ], + "text": "wen\r\nsrowen@google" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109, + 13, + 10 + ], + "text": "com\r\n" + }, + { + "type": "numeric", + "text": "917" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "364" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "2918" + }, + { + "type": "byte", + "bytes": [ + 13, + 10, + 104, + 116, + 116, + 112 + ], + "text": "\r\nhttp" + }, + { + "type": "alphanumeric", + "text": "://" + }, + { + "type": "byte", + "bytes": [ + 97, + 119, + 101, + 115, + 111, + 109, + 101 + ], + "text": "awesome" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "byte", + "bytes": [ + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115 + ], + "text": "thoughts" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109 + ], + "text": "com" + } + ], + "version": 10, + "location": { + "topRightCorner": { + "x": 404.9866617711879, + "y": 367.88980925980576 + }, + "topLeftCorner": { + "x": 406.9758137890142, + "y": 168.54334701290014 + }, + "bottomRightCorner": { + "x": 193.32164308484184, + "y": 369.7722397044895 + }, + "bottomLeftCorner": { + "x": 190.6516377631536, + "y": 167.80578418847577 + }, + "topRightFinderPattern": { + "x": 392.25, + "y": 356 + }, + "topLeftFinderPattern": { + "x": 393.75, + "y": 181 + }, + "bottomLeftFinderPattern": { + "x": 204.25, + "y": 180.5 + }, + "bottomRightAlignmentPattern": { + "x": 217.5, + "y": 347 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/117/input.png b/jsQR/tests/end-to-end/117/input.png new file mode 100755 index 0000000000000000000000000000000000000000..efc4d8fc27e8a8243f9f65df586973ec93546927 Binary files /dev/null and b/jsQR/tests/end-to-end/117/input.png differ diff --git a/jsQR/tests/end-to-end/117/output.json b/jsQR/tests/end-to-end/117/output.json new file mode 100644 index 0000000000000000000000000000000000000000..304df28eff761b1ada08030caffa047ad06aa90e --- /dev/null +++ b/jsQR/tests/end-to-end/117/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 232.62005353364228, + "y": 52.98033054395096 + }, + "topLeftCorner": { + "x": 45.81623844201406, + "y": 33.26678770802556 + }, + "bottomRightCorner": { + "x": 212.85013315832734, + "y": 235.55943631968 + }, + "bottomLeftCorner": { + "x": 30.477738577481194, + "y": 227.51451143231608 + }, + "topRightFinderPattern": { + "x": 211.75, + "y": 71 + }, + "topLeftFinderPattern": { + "x": 65, + "y": 56.5 + }, + "bottomLeftFinderPattern": { + "x": 52.5, + "y": 208.5 + }, + "bottomRightAlignmentPattern": { + "x": 182.25, + "y": 198.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/118/input.png b/jsQR/tests/end-to-end/118/input.png new file mode 100755 index 0000000000000000000000000000000000000000..34ca8c50c8571d63dbdb48118ed6cec402968c5f Binary files /dev/null and b/jsQR/tests/end-to-end/118/input.png differ diff --git a/jsQR/tests/end-to-end/118/output.json b/jsQR/tests/end-to-end/118/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1c7fbba461e850877bde54fbe1a2879152f10eeb --- /dev/null +++ b/jsQR/tests/end-to-end/118/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 207.61047055569247, + "y": 41.91723271877147 + }, + "topLeftCorner": { + "x": 47.997261473525306, + "y": 36.3481146443457 + }, + "bottomRightCorner": { + "x": 211.94894191009882, + "y": 201.73796771632772 + }, + "bottomLeftCorner": { + "x": 42.79884001633489, + "y": 201.33040907861246 + }, + "topRightFinderPattern": { + "x": 191.5, + "y": 57.5 + }, + "topLeftFinderPattern": { + "x": 65, + "y": 53.5 + }, + "bottomLeftFinderPattern": { + "x": 61.75, + "y": 183 + }, + "bottomRightAlignmentPattern": { + "x": 179, + "y": 168.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/119/input.png b/jsQR/tests/end-to-end/119/input.png new file mode 100755 index 0000000000000000000000000000000000000000..993d4173fd163c24c45c348567a667d1a3c34050 Binary files /dev/null and b/jsQR/tests/end-to-end/119/input.png differ diff --git a/jsQR/tests/end-to-end/119/output.json b/jsQR/tests/end-to-end/119/output.json new file mode 100644 index 0000000000000000000000000000000000000000..311b26c1f0a4b6336412195aeae7bd8b22d8b70a --- /dev/null +++ b/jsQR/tests/end-to-end/119/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 228.006405462245, + "y": 41.70827476276491 + }, + "topLeftCorner": { + "x": 15.238704573448189, + "y": 39.492784157078795 + }, + "bottomRightCorner": { + "x": 199.98636675704861, + "y": 188.84817389171366 + }, + "bottomLeftCorner": { + "x": 30.164820454761347, + "y": 184.66477489720472 + }, + "topRightFinderPattern": { + "x": 202, + "y": 60.5 + }, + "topLeftFinderPattern": { + "x": 38.75, + "y": 58.5 + }, + "bottomLeftFinderPattern": { + "x": 47, + "y": 172.5 + }, + "bottomRightAlignmentPattern": { + "x": 169.25, + "y": 164 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/12/input.png b/jsQR/tests/end-to-end/12/input.png new file mode 100755 index 0000000000000000000000000000000000000000..f2aeaeb140083cede251eb8afa7d03fe02e0e1c4 Binary files /dev/null and b/jsQR/tests/end-to-end/12/input.png differ diff --git a/jsQR/tests/end-to-end/12/output.json b/jsQR/tests/end-to-end/12/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d47a268c354121f220a061d77a3d3b10ecd9fad0 --- /dev/null +++ b/jsQR/tests/end-to-end/12/output.json @@ -0,0 +1,96 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 115, + 116, + 97, + 116, + 105, + 99, + 114, + 111, + 111, + 115, + 116, + 101, + 114, + 46, + 99, + 111, + 109 + ], + "data": "http://staticrooster.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 115, + 116, + 97, + 116, + 105, + 99, + 114, + 111, + 111, + 115, + 116, + 101, + 114, + 46, + 99, + 111, + 109 + ], + "text": "http://staticrooster.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 237.76428896399324, + "y": 74.93672169504744 + }, + "topLeftCorner": { + "x": 100.11746724286891, + "y": 74.91405697047993 + }, + "bottomRightCorner": { + "x": 236.135297409147, + "y": 210.55088481136232 + }, + "bottomLeftCorner": { + "x": 100.34166250857605, + "y": 210.71159483565148 + }, + "topRightFinderPattern": { + "x": 221, + "y": 91.5 + }, + "topLeftFinderPattern": { + "x": 116.75, + "y": 91.5 + }, + "bottomLeftFinderPattern": { + "x": 116.75, + "y": 194.5 + }, + "bottomRightAlignmentPattern": { + "x": 206, + "y": 180.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/120/input.png b/jsQR/tests/end-to-end/120/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2be78b6c2d81fdf904af71d74abb0bdf92181736 Binary files /dev/null and b/jsQR/tests/end-to-end/120/input.png differ diff --git a/jsQR/tests/end-to-end/120/output.json b/jsQR/tests/end-to-end/120/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ac94541370348aa73c25a8d630d96f4d97168ec5 --- /dev/null +++ b/jsQR/tests/end-to-end/120/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 211.44894794656636, + "y": 63.466001413517084 + }, + "topLeftCorner": { + "x": 54.679349724011075, + "y": 56.29705943972001 + }, + "bottomRightCorner": { + "x": 203.03066317257787, + "y": 226.35832119783322 + }, + "bottomLeftCorner": { + "x": 36.910052985365624, + "y": 214.52148141630175 + }, + "topRightFinderPattern": { + "x": 193.5, + "y": 79 + }, + "topLeftFinderPattern": { + "x": 69.25, + "y": 73 + }, + "bottomLeftFinderPattern": { + "x": 56, + "y": 198 + }, + "bottomRightAlignmentPattern": { + "x": 171.75, + "y": 190.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/121/input.png b/jsQR/tests/end-to-end/121/input.png new file mode 100755 index 0000000000000000000000000000000000000000..38a5be2170b7a2886c0dc78285f353c4dcc214d0 Binary files /dev/null and b/jsQR/tests/end-to-end/121/input.png differ diff --git a/jsQR/tests/end-to-end/121/output.json b/jsQR/tests/end-to-end/121/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d31cb7402a4157d0a662ae97b3cdab89316c93c3 --- /dev/null +++ b/jsQR/tests/end-to-end/121/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 197.90580369916088, + "y": 43.82486985953479 + }, + "topLeftCorner": { + "x": 41.90432276554271, + "y": 44.45571835949273 + }, + "bottomRightCorner": { + "x": 189.3657175008132, + "y": 191.53997397779318 + }, + "bottomLeftCorner": { + "x": 44.00766737802927, + "y": 202.0071084765438 + }, + "topRightFinderPattern": { + "x": 179.25, + "y": 63 + }, + "topLeftFinderPattern": { + "x": 62, + "y": 64.5 + }, + "bottomLeftFinderPattern": { + "x": 62.5, + "y": 183 + }, + "bottomRightAlignmentPattern": { + "x": 159.75, + "y": 162 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/122/input.png b/jsQR/tests/end-to-end/122/input.png new file mode 100755 index 0000000000000000000000000000000000000000..77f8e24c54c33bd050235cfcaab9048882740e5b Binary files /dev/null and b/jsQR/tests/end-to-end/122/input.png differ diff --git a/jsQR/tests/end-to-end/122/output.json b/jsQR/tests/end-to-end/122/output.json new file mode 100644 index 0000000000000000000000000000000000000000..0ac9383ef11b643d6563eea40940547e6eb896cc --- /dev/null +++ b/jsQR/tests/end-to-end/122/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 193.29370536010302, + "y": 47.91592042492408 + }, + "topLeftCorner": { + "x": 38.05158736896713, + "y": 50.29248218443501 + }, + "bottomRightCorner": { + "x": 201.96882526387853, + "y": 204.48276310536264 + }, + "bottomLeftCorner": { + "x": 38.06982944242615, + "y": 208.53612740722363 + }, + "topRightFinderPattern": { + "x": 177.75, + "y": 64 + }, + "topLeftFinderPattern": { + "x": 54.75, + "y": 66 + }, + "bottomLeftFinderPattern": { + "x": 55.5, + "y": 190.5 + }, + "bottomRightAlignmentPattern": { + "x": 168.5, + "y": 173 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/123/input.png b/jsQR/tests/end-to-end/123/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1d3eee5a8c3477c6155b84d7884df511ddd02020 Binary files /dev/null and b/jsQR/tests/end-to-end/123/input.png differ diff --git a/jsQR/tests/end-to-end/123/output.json b/jsQR/tests/end-to-end/123/output.json new file mode 100644 index 0000000000000000000000000000000000000000..b177e593b1013cfea7215f94ea9567fc6304410f --- /dev/null +++ b/jsQR/tests/end-to-end/123/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 203.29428716166203, + "y": 40.35806502797496 + }, + "topLeftCorner": { + "x": 31.863788707457424, + "y": 45.704247209303745 + }, + "bottomRightCorner": { + "x": 221.09148841604627, + "y": 213.98689618678927 + }, + "bottomLeftCorner": { + "x": 34.306628951019405, + "y": 223.32214609814443 + }, + "topRightFinderPattern": { + "x": 187, + "y": 58 + }, + "topLeftFinderPattern": { + "x": 50.75, + "y": 62.5 + }, + "bottomLeftFinderPattern": { + "x": 54, + "y": 202 + }, + "bottomRightAlignmentPattern": { + "x": 181.75, + "y": 179 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/124/input.png b/jsQR/tests/end-to-end/124/input.png new file mode 100755 index 0000000000000000000000000000000000000000..8f1b71a043c90a2b13686246bcec95291503d03c Binary files /dev/null and b/jsQR/tests/end-to-end/124/input.png differ diff --git a/jsQR/tests/end-to-end/124/output.json b/jsQR/tests/end-to-end/124/output.json new file mode 100644 index 0000000000000000000000000000000000000000..23f1420a60401064b0790191f562baea4ff9d551 --- /dev/null +++ b/jsQR/tests/end-to-end/124/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 197.38498102772766, + "y": 25.47208194100413 + }, + "topLeftCorner": { + "x": 31.971343900349794, + "y": 40.745015391375404 + }, + "bottomRightCorner": { + "x": 226.88772324641022, + "y": 188.01516867506547 + }, + "bottomLeftCorner": { + "x": 46.13598991534154, + "y": 209.76707111155858 + }, + "topRightFinderPattern": { + "x": 183, + "y": 43 + }, + "topLeftFinderPattern": { + "x": 51.5, + "y": 55.5 + }, + "bottomLeftFinderPattern": { + "x": 64, + "y": 188 + }, + "bottomRightAlignmentPattern": { + "x": 186.5, + "y": 157.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/125/input.png b/jsQR/tests/end-to-end/125/input.png new file mode 100755 index 0000000000000000000000000000000000000000..79d403f3c7e75842388134bc061dc6ce15f2c0cb Binary files /dev/null and b/jsQR/tests/end-to-end/125/input.png differ diff --git a/jsQR/tests/end-to-end/125/output.json b/jsQR/tests/end-to-end/125/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1046cd6b863735173320688124200a774c3a1d78 --- /dev/null +++ b/jsQR/tests/end-to-end/125/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 207.17104036939773, + "y": 47.07721601021036 + }, + "topLeftCorner": { + "x": 50.490412397423, + "y": 48.15324396619081 + }, + "bottomRightCorner": { + "x": 215.95798255406783, + "y": 204.60841923412949 + }, + "bottomLeftCorner": { + "x": 49.06651826948636, + "y": 207.72156979044158 + }, + "topRightFinderPattern": { + "x": 191.5, + "y": 63 + }, + "topLeftFinderPattern": { + "x": 67.25, + "y": 64 + }, + "bottomLeftFinderPattern": { + "x": 67, + "y": 189.5 + }, + "bottomRightAlignmentPattern": { + "x": 182, + "y": 172.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/126/input.png b/jsQR/tests/end-to-end/126/input.png new file mode 100755 index 0000000000000000000000000000000000000000..75758fdfe014b34448a7234b90403aad1b69fdbf Binary files /dev/null and b/jsQR/tests/end-to-end/126/input.png differ diff --git a/jsQR/tests/end-to-end/126/output.json b/jsQR/tests/end-to-end/126/output.json new file mode 100644 index 0000000000000000000000000000000000000000..0585aaf559f31417cbe31ec70d1589041a728a60 --- /dev/null +++ b/jsQR/tests/end-to-end/126/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 192.70360643856932, + "y": 37.36012631872994 + }, + "topLeftCorner": { + "x": 26.216172319702984, + "y": 28.951948067185548 + }, + "bottomRightCorner": { + "x": 192.78099538391237, + "y": 202.29349840809715 + }, + "bottomLeftCorner": { + "x": 24.399193135136187, + "y": 207.56987260295656 + }, + "topRightFinderPattern": { + "x": 176.25, + "y": 54 + }, + "topLeftFinderPattern": { + "x": 45, + "y": 48.5 + }, + "bottomLeftFinderPattern": { + "x": 43.75, + "y": 188 + }, + "bottomRightAlignmentPattern": { + "x": 161.75, + "y": 170 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/127/input.png b/jsQR/tests/end-to-end/127/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ea965f7f9f1ac1724cbcaa576bd0122f07fefd09 Binary files /dev/null and b/jsQR/tests/end-to-end/127/input.png differ diff --git a/jsQR/tests/end-to-end/127/output.json b/jsQR/tests/end-to-end/127/output.json new file mode 100644 index 0000000000000000000000000000000000000000..495685ea181468072d7d47b925d950a85b984b73 --- /dev/null +++ b/jsQR/tests/end-to-end/127/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 193.89907566860802, + "y": 61.17464242928666 + }, + "topLeftCorner": { + "x": 52.425511170736435, + "y": 59.74553322786215 + }, + "bottomRightCorner": { + "x": 203.24125071847863, + "y": 199.29551873709832 + }, + "bottomLeftCorner": { + "x": 40.93984944949137, + "y": 199.82375392935919 + }, + "topRightFinderPattern": { + "x": 179.75, + "y": 74 + }, + "topLeftFinderPattern": { + "x": 66.75, + "y": 73 + }, + "bottomLeftFinderPattern": { + "x": 59.5, + "y": 183 + }, + "bottomRightAlignmentPattern": { + "x": 170.5, + "y": 169 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/128/input.png b/jsQR/tests/end-to-end/128/input.png new file mode 100755 index 0000000000000000000000000000000000000000..3839f58d5004bff90505670ab9409bd9f2d3c1d0 Binary files /dev/null and b/jsQR/tests/end-to-end/128/input.png differ diff --git a/jsQR/tests/end-to-end/128/output.json b/jsQR/tests/end-to-end/128/output.json new file mode 100644 index 0000000000000000000000000000000000000000..a091bbda95669b02e9756ca92972c5e135c8efda --- /dev/null +++ b/jsQR/tests/end-to-end/128/output.json @@ -0,0 +1,249 @@ +{ + "binaryData": [ + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 13, + 10, + 57, + 49, + 55, + 45, + 51, + 54, + 52, + 45, + 50, + 57, + 49, + 56, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 119, + 101, + 115, + 111, + 109, + 101, + 45, + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115, + 46, + 99, + 111, + 109 + ], + "data": "Sean Owen\r\nsrowen@google.com\r\n917-364-2918\r\nhttp://awesome-thoughts.com", + "chunks": [ + { + "type": "alphanumeric", + "text": "S" + }, + { + "type": "byte", + "bytes": [ + 101, + 97, + 110 + ], + "text": "ean" + }, + { + "type": "alphanumeric", + "text": " O" + }, + { + "type": "byte", + "bytes": [ + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101 + ], + "text": "wen\r\nsrowen@google" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109, + 13, + 10 + ], + "text": "com\r\n" + }, + { + "type": "numeric", + "text": "917" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "364" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "2918" + }, + { + "type": "byte", + "bytes": [ + 13, + 10, + 104, + 116, + 116, + 112 + ], + "text": "\r\nhttp" + }, + { + "type": "alphanumeric", + "text": "://" + }, + { + "type": "byte", + "bytes": [ + 97, + 119, + 101, + 115, + 111, + 109, + 101 + ], + "text": "awesome" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "byte", + "bytes": [ + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115 + ], + "text": "thoughts" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109 + ], + "text": "com" + } + ], + "version": 10, + "location": { + "topRightCorner": { + "x": 397.82997128043587, + "y": 383.73646571938275 + }, + "topLeftCorner": { + "x": 402.80308287983877, + "y": 217.9486634886723 + }, + "bottomRightCorner": { + "x": 219.4104117049376, + "y": 381.03173306238614 + }, + "bottomLeftCorner": { + "x": 222.265937067751, + "y": 213.87256248762918 + }, + "topRightFinderPattern": { + "x": 387.25, + "y": 373.5 + }, + "topLeftFinderPattern": { + "x": 391.5, + "y": 228 + }, + "bottomLeftFinderPattern": { + "x": 233.25, + "y": 224.5 + }, + "bottomRightAlignmentPattern": { + "x": 240.25, + "y": 362.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/129/input.png b/jsQR/tests/end-to-end/129/input.png new file mode 100755 index 0000000000000000000000000000000000000000..011b4e1cf0ee7060306e23e01060daf86b81d8b1 Binary files /dev/null and b/jsQR/tests/end-to-end/129/input.png differ diff --git a/jsQR/tests/end-to-end/129/output.json b/jsQR/tests/end-to-end/129/output.json new file mode 100644 index 0000000000000000000000000000000000000000..bc22f5337670d03b8a8351020f822de85f104db0 --- /dev/null +++ b/jsQR/tests/end-to-end/129/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 202.8118057778982, + "y": 36.57667167450682 + }, + "topLeftCorner": { + "x": 29.66977717175011, + "y": 37.3363365796208 + }, + "bottomRightCorner": { + "x": 205.93689626043604, + "y": 207.52527914800717 + }, + "bottomLeftCorner": { + "x": 34.63391214783702, + "y": 213.00480159585396 + }, + "topRightFinderPattern": { + "x": 185.25, + "y": 55 + }, + "topLeftFinderPattern": { + "x": 49, + "y": 56 + }, + "bottomLeftFinderPattern": { + "x": 52.75, + "y": 194 + }, + "bottomRightAlignmentPattern": { + "x": 172.25, + "y": 175 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/13/input.png b/jsQR/tests/end-to-end/13/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e026f485c3954d6cc8ac17d4a4d0ced5c4e790ca Binary files /dev/null and b/jsQR/tests/end-to-end/13/input.png differ diff --git a/jsQR/tests/end-to-end/13/output.json b/jsQR/tests/end-to-end/13/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e4e348cb62681f71fc43a640834408fce084b7e2 --- /dev/null +++ b/jsQR/tests/end-to-end/13/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 175.85197283344482, + "y": 55.626182992077744 + }, + "topLeftCorner": { + "x": 54.15868823332431, + "y": 54.797900515923665 + }, + "bottomRightCorner": { + "x": 175.85352842287247, + "y": 179.5542461190454 + }, + "bottomLeftCorner": { + "x": 49.271255206963, + "y": 180.2290769056458 + }, + "topRightFinderPattern": { + "x": 161.25, + "y": 70 + }, + "topLeftFinderPattern": { + "x": 68.5, + "y": 69.5 + }, + "bottomLeftFinderPattern": { + "x": 65.25, + "y": 164.5 + }, + "bottomRightAlignmentPattern": { + "x": 148, + "y": 151 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/130/input.png b/jsQR/tests/end-to-end/130/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a6d4ddc186e0caeb566438b042e3ec87397a746b Binary files /dev/null and b/jsQR/tests/end-to-end/130/input.png differ diff --git a/jsQR/tests/end-to-end/130/output.json b/jsQR/tests/end-to-end/130/output.json new file mode 100644 index 0000000000000000000000000000000000000000..85fae167552d361d9ca532e6da2c7d164b10ac15 --- /dev/null +++ b/jsQR/tests/end-to-end/130/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 214.07443228245083, + "y": 45.70430777551128 + }, + "topLeftCorner": { + "x": 38.75607388006861, + "y": 33.77935332371121 + }, + "bottomRightCorner": { + "x": 207.48605841143691, + "y": 217.84842735793123 + }, + "bottomLeftCorner": { + "x": 33.16382884583253, + "y": 216.45852645779314 + }, + "topRightFinderPattern": { + "x": 195.75, + "y": 63 + }, + "topLeftFinderPattern": { + "x": 57.75, + "y": 54.5 + }, + "bottomLeftFinderPattern": { + "x": 53.25, + "y": 197.5 + }, + "bottomRightAlignmentPattern": { + "x": 176, + "y": 183.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/131/input.png b/jsQR/tests/end-to-end/131/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ceabbad03491aa7bd4acf0ed4679b0fc6c2630f4 Binary files /dev/null and b/jsQR/tests/end-to-end/131/input.png differ diff --git a/jsQR/tests/end-to-end/131/output.json b/jsQR/tests/end-to-end/131/output.json new file mode 100644 index 0000000000000000000000000000000000000000..c1637df66e74979edc7f7fa35c59a3d035498b5c --- /dev/null +++ b/jsQR/tests/end-to-end/131/output.json @@ -0,0 +1,5954 @@ +{ + "binaryData": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 108, + 101, + 46, + 10, + 10, + 39, + 79, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 119, + 105, + 99, + 107, + 101, + 100, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 33, + 39, + 32, + 99, + 114, + 105, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 44, + 32, + 99, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 103, + 105, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 97, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 107, + 105, + 115, + 115, + 32, + 116, + 111, + 32, + 109, + 97, + 107, + 101, + 32, + 105, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 105, + 110, + 32, + 100, + 105, + 115, + 103, + 114, + 97, + 99, + 101, + 46, + 10, + 39, + 82, + 101, + 97, + 108, + 108, + 121, + 44, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 111, + 117, + 103, + 104, + 116, + 32, + 116, + 111, + 32, + 104, + 97, + 118, + 101, + 32, + 116, + 97, + 117, + 103, + 104, + 116, + 32, + 121, + 111, + 117, + 32, + 98, + 101, + 116, + 116, + 101, + 114, + 32, + 109, + 97, + 110, + 110, + 101, + 114, + 115, + 33, + 32, + 89, + 111, + 117, + 32, + 79, + 85, + 71, + 72, + 84, + 44, + 10, + 68, + 105, + 110, + 97, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 103, + 104, + 116, + 33, + 39, + 32, + 115, + 104, + 101, + 32, + 97, + 100, + 100, + 101, + 100, + 44, + 32, + 108, + 111, + 111, + 107, + 105, + 110, + 103, + 32, + 114, + 101, + 112, + 114, + 111, + 97, + 99, + 104, + 102, + 117, + 108, + 108, + 121, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 10, + 99, + 97, + 116, + 44, + 32, + 97, + 110, + 100, + 32, + 115, + 112, + 101, + 97, + 107, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 97, + 115, + 32, + 99, + 114, + 111, + 115, + 115, + 32, + 97, + 32, + 118, + 111, + 105, + 99, + 101, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 99, + 111, + 117, + 108, + 100, + 32, + 109, + 97, + 110, + 97, + 103, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 115, + 104, + 101, + 10, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 100, + 32, + 98, + 97, + 99, + 107, + 32, + 105, + 110, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 116, + 97, + 107, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 10, + 119, + 105, + 116, + 104, + 32, + 104, + 101, + 114, + 44, + 32, + 97, + 110, + 100, + 32, + 98, + 101, + 103, + 97, + 110, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 97, + 103, + 97, + 105, + 110, + 46, + 32, + 66, + 117, + 116, + 32, + 115, + 104, + 101, + 32, + 100, + 105, + 100, + 110, + 39, + 116, + 32, + 103, + 101, + 116, + 32, + 111, + 110, + 10, + 118, + 101, + 114, + 121, + 32, + 102, + 97, + 115, + 116, + 44, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 97, + 108, + 108, + 32, + 116, + 104, + 101, + 32, + 116, + 105, + 109, + 101, + 44, + 32, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 46, + 32, + 75, + 105, + 116, + 116, + 121, + 32, + 115, + 97, + 116, + 32, + 118, + 101, + 114, + 121, + 32, + 100, + 101, + 109, + 117, + 114, + 101, + 108, + 121, + 32, + 111, + 110, + 32, + 104, + 101, + 114, + 32, + 107, + 110, + 101, + 101, + 44, + 32, + 112, + 114, + 101, + 116, + 101, + 110, + 100, + 105, + 110, + 103, + 32, + 116, + 111, + 10, + 119, + 97, + 116, + 99, + 104, + 32, + 116, + 104, + 101, + 32, + 112, + 114, + 111, + 103, + 114, + 101, + 115, + 115, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 44, + 32, + 97, + 110, + 100, + 32, + 110, + 111, + 119, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 112, + 117, + 116, + 116, + 105, + 110, + 103, + 32, + 111, + 117, + 116, + 32, + 111, + 110, + 101, + 10, + 112, + 97, + 119, + 32, + 97, + 110, + 100, + 32, + 103, + 101, + 110, + 116, + 108, + 121, + 32, + 116, + 111, + 117, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 44, + 32, + 97, + 115, + 32, + 105, + 102, + 32, + 105, + 116, + 32, + 119, + 111, + 117, + 108, + 100, + 32, + 98, + 101, + 32, + 103, + 108, + 97, + 100, + 32, + 116, + 111, + 32, + 104, + 101, + 108, + 112, + 44, + 32, + 105, + 102, + 32, + 105, + 116, + 10, + 109, + 105, + 103, + 104, + 116, + 46, + 10, + 10, + 39, + 68, + 111, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 119, + 104, + 97, + 116, + 32, + 116, + 111, + 45, + 109, + 111, + 114, + 114, + 111, + 119, + 32, + 105, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 63, + 39, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 98, + 101, + 103, + 97, + 110, + 46, + 32, + 39, + 89, + 111, + 117, + 39, + 100, + 32, + 104, + 97, + 118, + 101, + 32, + 103, + 117, + 101, + 115, + 115, + 101, + 100, + 10, + 105, + 102, + 32, + 121, + 111, + 117, + 39, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 111, + 119, + 32, + 119, + 105, + 116, + 104, + 32, + 109, + 101, + 45, + 45, + 111, + 110, + 108, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 32, + 109, + 97, + 107, + 105, + 110, + 103, + 32, + 121, + 111, + 117, + 32, + 116, + 105, + 100, + 121, + 44, + 10, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 99, + 111, + 117, + 108, + 100, + 110, + 39, + 116, + 46, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 119, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 111, + 121, + 115, + 32, + 103, + 101, + 116, + 116, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 10, + 98, + 111, + 110, + 102, + 105, + 114, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 105, + 116, + 32, + 119, + 97, + 110, + 116, + 115, + 32, + 112, + 108, + 101, + 110, + 116, + 121, + 32, + 111, + 102, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 33, + 32, + 79, + 110, + 108, + 121, + 32, + 105, + 116, + 32, + 103, + 111, + 116, + 32, + 115, + 111, + 32, + 99, + 111, + 108, + 100, + 44, + 32, + 97, + 110, + 100, + 10, + 105, + 116, + 32, + 115, + 110, + 111, + 119, + 101, + 100, + 32, + 115, + 111, + 44, + 32, + 116, + 104, + 101, + 121, + 32, + 104, + 97, + 100, + 32, + 116, + 111, + 32, + 108, + 101, + 97, + 118, + 101, + 32, + 111, + 102, + 102, + 46, + 32, + 78, + 101, + 118, + 101, + 114, + 32, + 109, + 105, + 110, + 100, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 44, + 32, + 119, + 101, + 39, + 108, + 108, + 32, + 103, + 111, + 32, + 97, + 110, + 100, + 10, + 115, + 101, + 101, + 32, + 116, + 104, + 101, + 32, + 98, + 111, + 110, + 102, + 105, + 114, + 101, + 32, + 116, + 111, + 45, + 109, + 111, + 114, + 114, + 111, + 119, + 46, + 39, + 32, + 72, + 101, + 114, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 111, + 117, + 110, + 100, + 32, + 116, + 119, + 111, + 32, + 111, + 114, + 32, + 116, + 104, + 114, + 101, + 101, + 32, + 116, + 117, + 114, + 110, + 115, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 10, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 114, + 111, + 117, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 110, + 101, + 99, + 107, + 44, + 32, + 106, + 117, + 115, + 116, + 32, + 116, + 111, + 32, + 115, + 101, + 101, + 32, + 104, + 111, + 119, + 32, + 105, + 116, + 32, + 119, + 111, + 117, + 108, + 100, + 32, + 108, + 111, + 111, + 107, + 58, + 32, + 116, + 104, + 105, + 115, + 32, + 108, + 101, + 100, + 10, + 116, + 111, + 32, + 97, + 32, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 44, + 32, + 105, + 110, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 114, + 111, + 108, + 108, + 101, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 117, + 112, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 102, + 108, + 111, + 111, + 114, + 44, + 32, + 97, + 110, + 100, + 32, + 121, + 97, + 114, + 100, + 115, + 10, + 97, + 110, + 100, + 32, + 121, + 97, + 114, + 100, + 115, + 32, + 111, + 102, + 32, + 105, + 116, + 32, + 103, + 111, + 116, + 32, + 117, + 110, + 119, + 111, + 117, + 110, + 100, + 32, + 97, + 103, + 97, + 105, + 110, + 46, + 10, + 10, + 39, + 68, + 111, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 44, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 115, + 111, + 32, + 97, + 110, + 103, + 114, + 121, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 44, + 39, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 101, + 110, + 116, + 32, + 111, + 110, + 32, + 97, + 115, + 32, + 115, + 111, + 111, + 110, + 32, + 97, + 115, + 32, + 116, + 104, + 101, + 121, + 32, + 119, + 101, + 114, + 101, + 10, + 99, + 111, + 109, + 102, + 111, + 114, + 116, + 97, + 98, + 108, + 121, + 32, + 115, + 101, + 116, + 116, + 108, + 101, + 100, + 32, + 97, + 103, + 97, + 105, + 110, + 44, + 32, + 39, + 119, + 104, + 101, + 110, + 32, + 73, + 32, + 115, + 97, + 119, + 32, + 97, + 108, + 108, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 32, + 121, + 111, + 117, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 100, + 111, + 105, + 110, + 103, + 44, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 118, + 101, + 114, + 121, + 32, + 110, + 101, + 97, + 114, + 108, + 121, + 32, + 111, + 112, + 101, + 110, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 111, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 112, + 117, + 116, + 116, + 105, + 110, + 103, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 116, + 32, + 105, + 110, + 116, + 111, + 10, + 116, + 104, + 101, + 32, + 115, + 110, + 111, + 119, + 33, + 32, + 65, + 110, + 100, + 32, + 121, + 111, + 117, + 39, + 100, + 32, + 104, + 97, + 118, + 101, + 32, + 100, + 101, + 115, + 101, + 114, + 118, + 101, + 100, + 32, + 105, + 116, + 44, + 32, + 121, + 111, + 117, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 118, + 111, + 117, + 115, + 32, + 100, + 97, + 114, + 108, + 105, + 110, + 103, + 33, + 10, + 87, + 104, + 97, + 10 + ], + "data": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmiddle.\n\n'Oh, you wicked little thing!' cried Alice, catching up the kitten, and\ngiving it a little kiss to make it understand that it was in disgrace.\n'Really, Dinah ought to have taught you better manners! You OUGHT,\nDinah, you know you ought!' she added, looking reproachfully at the old\ncat, and speaking in as cross a voice as she could manage--and then she\nscrambled back into the arm-chair, taking the kitten and the worsted\nwith her, and began winding up the ball again. But she didn't get on\nvery fast, as she was talking all the time, sometimes to the kitten, and\nsometimes to herself. Kitty sat very demurely on her knee, pretending to\nwatch the progress of the winding, and now and then putting out one\npaw and gently touching the ball, as if it would be glad to help, if it\nmight.\n\n'Do you know what to-morrow is, Kitty?' Alice began. 'You'd have guessed\nif you'd been up in the window with me--only Dinah was making you tidy,\nso you couldn't. I was watching the boys getting in sticks for the\nbonfire--and it wants plenty of sticks, Kitty! Only it got so cold, and\nit snowed so, they had to leave off. Never mind, Kitty, we'll go and\nsee the bonfire to-morrow.' Here Alice wound two or three turns of the\nworsted round the kitten's neck, just to see how it would look: this led\nto a scramble, in which the ball rolled down upon the floor, and yards\nand yards of it got unwound again.\n\n'Do you know, I was so angry, Kitty,' Alice went on as soon as they were\ncomfortably settled again, 'when I saw all the mischief you had been\ndoing, I was very nearly opening the window, and putting you out into\nthe snow! And you'd have deserved it, you little mischievous darling!\nWha\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 108, + 101, + 46, + 10, + 10, + 39, + 79, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 119, + 105, + 99, + 107, + 101, + 100, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 33, + 39, + 32, + 99, + 114, + 105, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 44, + 32, + 99, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 103, + 105, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 97, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 107, + 105, + 115, + 115, + 32, + 116, + 111, + 32, + 109, + 97, + 107, + 101, + 32, + 105, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 105, + 110, + 32, + 100, + 105, + 115, + 103, + 114, + 97, + 99, + 101, + 46, + 10, + 39, + 82, + 101, + 97, + 108, + 108, + 121, + 44, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 111, + 117, + 103, + 104, + 116, + 32, + 116, + 111, + 32, + 104, + 97, + 118, + 101, + 32, + 116, + 97, + 117, + 103, + 104, + 116, + 32, + 121, + 111, + 117, + 32, + 98, + 101, + 116, + 116, + 101, + 114, + 32, + 109, + 97, + 110, + 110, + 101, + 114, + 115, + 33, + 32, + 89, + 111, + 117, + 32, + 79, + 85, + 71, + 72, + 84, + 44, + 10, + 68, + 105, + 110, + 97, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 103, + 104, + 116, + 33, + 39, + 32, + 115, + 104, + 101, + 32, + 97, + 100, + 100, + 101, + 100, + 44, + 32, + 108, + 111, + 111, + 107, + 105, + 110, + 103, + 32, + 114, + 101, + 112, + 114, + 111, + 97, + 99, + 104, + 102, + 117, + 108, + 108, + 121, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 10, + 99, + 97, + 116, + 44, + 32, + 97, + 110, + 100, + 32, + 115, + 112, + 101, + 97, + 107, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 97, + 115, + 32, + 99, + 114, + 111, + 115, + 115, + 32, + 97, + 32, + 118, + 111, + 105, + 99, + 101, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 99, + 111, + 117, + 108, + 100, + 32, + 109, + 97, + 110, + 97, + 103, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 115, + 104, + 101, + 10, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 100, + 32, + 98, + 97, + 99, + 107, + 32, + 105, + 110, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 116, + 97, + 107, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 10, + 119, + 105, + 116, + 104, + 32, + 104, + 101, + 114, + 44, + 32, + 97, + 110, + 100, + 32, + 98, + 101, + 103, + 97, + 110, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 97, + 103, + 97, + 105, + 110, + 46, + 32, + 66, + 117, + 116, + 32, + 115, + 104, + 101, + 32, + 100, + 105, + 100, + 110, + 39, + 116, + 32, + 103, + 101, + 116, + 32, + 111, + 110, + 10, + 118, + 101, + 114, + 121, + 32, + 102, + 97, + 115, + 116, + 44, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 97, + 108, + 108, + 32, + 116, + 104, + 101, + 32, + 116, + 105, + 109, + 101, + 44, + 32, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 46, + 32, + 75, + 105, + 116, + 116, + 121, + 32, + 115, + 97, + 116, + 32, + 118, + 101, + 114, + 121, + 32, + 100, + 101, + 109, + 117, + 114, + 101, + 108, + 121, + 32, + 111, + 110, + 32, + 104, + 101, + 114, + 32, + 107, + 110, + 101, + 101, + 44, + 32, + 112, + 114, + 101, + 116, + 101, + 110, + 100, + 105, + 110, + 103, + 32, + 116, + 111, + 10, + 119, + 97, + 116, + 99, + 104, + 32, + 116, + 104, + 101, + 32, + 112, + 114, + 111, + 103, + 114, + 101, + 115, + 115, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 44, + 32, + 97, + 110, + 100, + 32, + 110, + 111, + 119, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 112, + 117, + 116, + 116, + 105, + 110, + 103, + 32, + 111, + 117, + 116, + 32, + 111, + 110, + 101, + 10, + 112, + 97, + 119, + 32, + 97, + 110, + 100, + 32, + 103, + 101, + 110, + 116, + 108, + 121, + 32, + 116, + 111, + 117, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 44, + 32, + 97, + 115, + 32, + 105, + 102, + 32, + 105, + 116, + 32, + 119, + 111, + 117, + 108, + 100, + 32, + 98, + 101, + 32, + 103, + 108, + 97, + 100, + 32, + 116, + 111, + 32, + 104, + 101, + 108, + 112, + 44, + 32, + 105, + 102, + 32, + 105, + 116, + 10, + 109, + 105, + 103, + 104, + 116, + 46, + 10, + 10, + 39, + 68, + 111, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 119, + 104, + 97, + 116, + 32, + 116, + 111, + 45, + 109, + 111, + 114, + 114, + 111, + 119, + 32, + 105, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 63, + 39, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 98, + 101, + 103, + 97, + 110, + 46, + 32, + 39, + 89, + 111, + 117, + 39, + 100, + 32, + 104, + 97, + 118, + 101, + 32, + 103, + 117, + 101, + 115, + 115, + 101, + 100, + 10, + 105, + 102, + 32, + 121, + 111, + 117, + 39, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 111, + 119, + 32, + 119, + 105, + 116, + 104, + 32, + 109, + 101, + 45, + 45, + 111, + 110, + 108, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 32, + 109, + 97, + 107, + 105, + 110, + 103, + 32, + 121, + 111, + 117, + 32, + 116, + 105, + 100, + 121, + 44, + 10, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 99, + 111, + 117, + 108, + 100, + 110, + 39, + 116, + 46, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 119, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 111, + 121, + 115, + 32, + 103, + 101, + 116, + 116, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 10, + 98, + 111, + 110, + 102, + 105, + 114, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 105, + 116, + 32, + 119, + 97, + 110, + 116, + 115, + 32, + 112, + 108, + 101, + 110, + 116, + 121, + 32, + 111, + 102, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 33, + 32, + 79, + 110, + 108, + 121, + 32, + 105, + 116, + 32, + 103, + 111, + 116, + 32, + 115, + 111, + 32, + 99, + 111, + 108, + 100, + 44, + 32, + 97, + 110, + 100, + 10, + 105, + 116, + 32, + 115, + 110, + 111, + 119, + 101, + 100, + 32, + 115, + 111, + 44, + 32, + 116, + 104, + 101, + 121, + 32, + 104, + 97, + 100, + 32, + 116, + 111, + 32, + 108, + 101, + 97, + 118, + 101, + 32, + 111, + 102, + 102, + 46, + 32, + 78, + 101, + 118, + 101, + 114, + 32, + 109, + 105, + 110, + 100, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 44, + 32, + 119, + 101, + 39, + 108, + 108, + 32, + 103, + 111, + 32, + 97, + 110, + 100, + 10, + 115, + 101, + 101, + 32, + 116, + 104, + 101, + 32, + 98, + 111, + 110, + 102, + 105, + 114, + 101, + 32, + 116, + 111, + 45, + 109, + 111, + 114, + 114, + 111, + 119, + 46, + 39, + 32, + 72, + 101, + 114, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 111, + 117, + 110, + 100, + 32, + 116, + 119, + 111, + 32, + 111, + 114, + 32, + 116, + 104, + 114, + 101, + 101, + 32, + 116, + 117, + 114, + 110, + 115, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 10, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 114, + 111, + 117, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 110, + 101, + 99, + 107, + 44, + 32, + 106, + 117, + 115, + 116, + 32, + 116, + 111, + 32, + 115, + 101, + 101, + 32, + 104, + 111, + 119, + 32, + 105, + 116, + 32, + 119, + 111, + 117, + 108, + 100, + 32, + 108, + 111, + 111, + 107, + 58, + 32, + 116, + 104, + 105, + 115, + 32, + 108, + 101, + 100, + 10, + 116, + 111, + 32, + 97, + 32, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 44, + 32, + 105, + 110, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 114, + 111, + 108, + 108, + 101, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 117, + 112, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 102, + 108, + 111, + 111, + 114, + 44, + 32, + 97, + 110, + 100, + 32, + 121, + 97, + 114, + 100, + 115, + 10, + 97, + 110, + 100, + 32, + 121, + 97, + 114, + 100, + 115, + 32, + 111, + 102, + 32, + 105, + 116, + 32, + 103, + 111, + 116, + 32, + 117, + 110, + 119, + 111, + 117, + 110, + 100, + 32, + 97, + 103, + 97, + 105, + 110, + 46, + 10, + 10, + 39, + 68, + 111, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 44, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 115, + 111, + 32, + 97, + 110, + 103, + 114, + 121, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 44, + 39, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 101, + 110, + 116, + 32, + 111, + 110, + 32, + 97, + 115, + 32, + 115, + 111, + 111, + 110, + 32, + 97, + 115, + 32, + 116, + 104, + 101, + 121, + 32, + 119, + 101, + 114, + 101, + 10, + 99, + 111, + 109, + 102, + 111, + 114, + 116, + 97, + 98, + 108, + 121, + 32, + 115, + 101, + 116, + 116, + 108, + 101, + 100, + 32, + 97, + 103, + 97, + 105, + 110, + 44, + 32, + 39, + 119, + 104, + 101, + 110, + 32, + 73, + 32, + 115, + 97, + 119, + 32, + 97, + 108, + 108, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 32, + 121, + 111, + 117, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 100, + 111, + 105, + 110, + 103, + 44, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 118, + 101, + 114, + 121, + 32, + 110, + 101, + 97, + 114, + 108, + 121, + 32, + 111, + 112, + 101, + 110, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 111, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 112, + 117, + 116, + 116, + 105, + 110, + 103, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 116, + 32, + 105, + 110, + 116, + 111, + 10, + 116, + 104, + 101, + 32, + 115, + 110, + 111, + 119, + 33, + 32, + 65, + 110, + 100, + 32, + 121, + 111, + 117, + 39, + 100, + 32, + 104, + 97, + 118, + 101, + 32, + 100, + 101, + 115, + 101, + 114, + 118, + 101, + 100, + 32, + 105, + 116, + 44, + 32, + 121, + 111, + 117, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 118, + 111, + 117, + 115, + 32, + 100, + 97, + 114, + 108, + 105, + 110, + 103, + 33, + 10, + 87, + 104, + 97, + 10 + ], + "text": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmiddle.\n\n'Oh, you wicked little thing!' cried Alice, catching up the kitten, and\ngiving it a little kiss to make it understand that it was in disgrace.\n'Really, Dinah ought to have taught you better manners! You OUGHT,\nDinah, you know you ought!' she added, looking reproachfully at the old\ncat, and speaking in as cross a voice as she could manage--and then she\nscrambled back into the arm-chair, taking the kitten and the worsted\nwith her, and began winding up the ball again. But she didn't get on\nvery fast, as she was talking all the time, sometimes to the kitten, and\nsometimes to herself. Kitty sat very demurely on her knee, pretending to\nwatch the progress of the winding, and now and then putting out one\npaw and gently touching the ball, as if it would be glad to help, if it\nmight.\n\n'Do you know what to-morrow is, Kitty?' Alice began. 'You'd have guessed\nif you'd been up in the window with me--only Dinah was making you tidy,\nso you couldn't. I was watching the boys getting in sticks for the\nbonfire--and it wants plenty of sticks, Kitty! Only it got so cold, and\nit snowed so, they had to leave off. Never mind, Kitty, we'll go and\nsee the bonfire to-morrow.' Here Alice wound two or three turns of the\nworsted round the kitten's neck, just to see how it would look: this led\nto a scramble, in which the ball rolled down upon the floor, and yards\nand yards of it got unwound again.\n\n'Do you know, I was so angry, Kitty,' Alice went on as soon as they were\ncomfortably settled again, 'when I saw all the mischief you had been\ndoing, I was very nearly opening the window, and putting you out into\nthe snow! And you'd have deserved it, you little mischievous darling!\nWha\n" + } + ], + "version": 40, + "location": { + "topRightCorner": { + "x": 177.00000000000003, + "y": -9.711963975382757e-16 + }, + "topLeftCorner": { + "x": -9.711963975382757e-16, + "y": -9.711963975382757e-16 + }, + "bottomRightCorner": { + "x": 177.00000000000003, + "y": 177.00000000000003 + }, + "bottomLeftCorner": { + "x": -9.711963975382757e-16, + "y": 177.00000000000003 + }, + "topRightFinderPattern": { + "x": 173.5, + "y": 3.5 + }, + "topLeftFinderPattern": { + "x": 3.5, + "y": 3.5 + }, + "bottomLeftFinderPattern": { + "x": 3.5, + "y": 173.5 + }, + "bottomRightAlignmentPattern": { + "x": 170.5, + "y": 170.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/132/input.png b/jsQR/tests/end-to-end/132/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c40df6a4a9375b0e2655c26966c43267ad3f85e9 Binary files /dev/null and b/jsQR/tests/end-to-end/132/input.png differ diff --git a/jsQR/tests/end-to-end/132/output.json b/jsQR/tests/end-to-end/132/output.json new file mode 100644 index 0000000000000000000000000000000000000000..b895a64ca7bbb98ab3fcdbd632c60735df3e10a5 --- /dev/null +++ b/jsQR/tests/end-to-end/132/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 204.88723166738666, + "y": 43.43296781825449 + }, + "topLeftCorner": { + "x": 44.54772719056792, + "y": 39.95657080000206 + }, + "bottomRightCorner": { + "x": 190.936852255263, + "y": 200.7570605083718 + }, + "bottomLeftCorner": { + "x": 44.505930536998555, + "y": 193.91418863195193 + }, + "topRightFinderPattern": { + "x": 183.5, + "y": 63.5 + }, + "topLeftFinderPattern": { + "x": 63.25, + "y": 60.5 + }, + "bottomLeftFinderPattern": { + "x": 62, + "y": 177.5 + }, + "bottomRightAlignmentPattern": { + "x": 159.75, + "y": 166.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/133/input.png b/jsQR/tests/end-to-end/133/input.png new file mode 100755 index 0000000000000000000000000000000000000000..8446be036f86e7d90facf57c374df0ee4efa0dbe Binary files /dev/null and b/jsQR/tests/end-to-end/133/input.png differ diff --git a/jsQR/tests/end-to-end/133/output.json b/jsQR/tests/end-to-end/133/output.json new file mode 100644 index 0000000000000000000000000000000000000000..b9c5d47c6d711571e97d751a542f628e2ef19976 --- /dev/null +++ b/jsQR/tests/end-to-end/133/output.json @@ -0,0 +1,4710 @@ +{ + "binaryData": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 108, + 101, + 46, + 10, + 10, + 39, + 79, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 119, + 105, + 99, + 107, + 101, + 100, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 33, + 39, + 32, + 99, + 114, + 105, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 44, + 32, + 99, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 103, + 105, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 97, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 107, + 105, + 115, + 115, + 32, + 116, + 111, + 32, + 109, + 97, + 107, + 101, + 32, + 105, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 105, + 110, + 32, + 100, + 105, + 115, + 103, + 114, + 97, + 99, + 101, + 46, + 10, + 39, + 82, + 101, + 97, + 108, + 108, + 121, + 44, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 111, + 117, + 103, + 104, + 116, + 32, + 116, + 111, + 32, + 104, + 97, + 118, + 101, + 32, + 116, + 97, + 117, + 103, + 104, + 116, + 32, + 121, + 111, + 117, + 32, + 98, + 101, + 116, + 116, + 101, + 114, + 32, + 109, + 97, + 110, + 110, + 101, + 114, + 115, + 33, + 32, + 89, + 111, + 117, + 32, + 79, + 85, + 71, + 72, + 84, + 44, + 10, + 68, + 105, + 110, + 97, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 103, + 104, + 116, + 33, + 39, + 32, + 115, + 104, + 101, + 32, + 97, + 100, + 100, + 101, + 100, + 44, + 32, + 108, + 111, + 111, + 107, + 105, + 110, + 103, + 32, + 114, + 101, + 112, + 114, + 111, + 97, + 99, + 104, + 102, + 117, + 108, + 108, + 121, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 10, + 99, + 97, + 116, + 44, + 32, + 97, + 110, + 100, + 32, + 115, + 112, + 101, + 97, + 107, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 97, + 115, + 32, + 99, + 114, + 111, + 115, + 115, + 32, + 97, + 32, + 118, + 111, + 105, + 99, + 101, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 99, + 111, + 117, + 108, + 100, + 32, + 109, + 97, + 110, + 97, + 103, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 115, + 104, + 101, + 10, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 100, + 32, + 98, + 97, + 99, + 107, + 32, + 105, + 110, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 116, + 97, + 107, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 10, + 119, + 105, + 116, + 104, + 32, + 104, + 101, + 114, + 44, + 32, + 97, + 110, + 100, + 32, + 98, + 101, + 103, + 97, + 110, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 97, + 103, + 97, + 105, + 110, + 46, + 32, + 66, + 117, + 116, + 32, + 115, + 104, + 101, + 32, + 100, + 105, + 100, + 110, + 39, + 116, + 32, + 103, + 101, + 116, + 32, + 111, + 110, + 10, + 118, + 101, + 114, + 121, + 32, + 102, + 97, + 115, + 116, + 44, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 97, + 108, + 108, + 32, + 116, + 104, + 101, + 32, + 116, + 105, + 109, + 101, + 44, + 32, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 46, + 32, + 75, + 105, + 116, + 116, + 121, + 32, + 115, + 97, + 116, + 32, + 118, + 101, + 114, + 121, + 32, + 100, + 101, + 109, + 117, + 114, + 101, + 108, + 121, + 32, + 111, + 110, + 32, + 104, + 101, + 114, + 32, + 107, + 110, + 101, + 101, + 44, + 32, + 112, + 114, + 101, + 116, + 101, + 110, + 100, + 105, + 110, + 103, + 32, + 116, + 111, + 10, + 119, + 97, + 116, + 99, + 104, + 32, + 116, + 104, + 101, + 32, + 112, + 114, + 111, + 103, + 114, + 101, + 115, + 115, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 44, + 32, + 97, + 110, + 100, + 32, + 110, + 111, + 119, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 112, + 117, + 116, + 116, + 105, + 110, + 103, + 32, + 111, + 117, + 116, + 32, + 111, + 110, + 101, + 10, + 112, + 97, + 119, + 32, + 97, + 110, + 100, + 32, + 103, + 101, + 110, + 116, + 108, + 121, + 32, + 116, + 111, + 117, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 44, + 32, + 97, + 115, + 32, + 105, + 102, + 32, + 105, + 116, + 32, + 119, + 111, + 117, + 108, + 100, + 32, + 98, + 101, + 32, + 103, + 108, + 97, + 100, + 32, + 116, + 111, + 32, + 104, + 101, + 108, + 112, + 44, + 32, + 105, + 102, + 32, + 105, + 116, + 10, + 109, + 105, + 103, + 104, + 116, + 46, + 10, + 10, + 39, + 68, + 111, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 119, + 104, + 97, + 116, + 32, + 116, + 111, + 45, + 109, + 111, + 114, + 114, + 111, + 119, + 32, + 105, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 63, + 39, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 98, + 101, + 103, + 97, + 110, + 46, + 32, + 39, + 89, + 111, + 117, + 39, + 100, + 32, + 104, + 97, + 118, + 101, + 32, + 103, + 117, + 101, + 115, + 115, + 101, + 100, + 10, + 105, + 102, + 32, + 121, + 111, + 117, + 39, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 111, + 119, + 32, + 119, + 105, + 116, + 104, + 32, + 109, + 101, + 45, + 45, + 111, + 110, + 108, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 32, + 109, + 97, + 107, + 105, + 110, + 103, + 32, + 121, + 111, + 117, + 32, + 116, + 105, + 100, + 121, + 44, + 10, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 99, + 111, + 117, + 108, + 100, + 110, + 39, + 116, + 46, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 119, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 111, + 121, + 115, + 32, + 103, + 101, + 116, + 116, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 10, + 98, + 111, + 110, + 102, + 105, + 114, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 105, + 116, + 32, + 119, + 97, + 110, + 116, + 115, + 32, + 112, + 108, + 101, + 110, + 116, + 121, + 32, + 111, + 102, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 33, + 32, + 79, + 110, + 108, + 121, + 32, + 105, + 116, + 32, + 10 + ], + "data": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmiddle.\n\n'Oh, you wicked little thing!' cried Alice, catching up the kitten, and\ngiving it a little kiss to make it understand that it was in disgrace.\n'Really, Dinah ought to have taught you better manners! You OUGHT,\nDinah, you know you ought!' she added, looking reproachfully at the old\ncat, and speaking in as cross a voice as she could manage--and then she\nscrambled back into the arm-chair, taking the kitten and the worsted\nwith her, and began winding up the ball again. But she didn't get on\nvery fast, as she was talking all the time, sometimes to the kitten, and\nsometimes to herself. Kitty sat very demurely on her knee, pretending to\nwatch the progress of the winding, and now and then putting out one\npaw and gently touching the ball, as if it would be glad to help, if it\nmight.\n\n'Do you know what to-morrow is, Kitty?' Alice began. 'You'd have guessed\nif you'd been up in the window with me--only Dinah was making you tidy,\nso you couldn't. I was watching the boys getting in sticks for the\nbonfire--and it wants plenty of sticks, Kitty! Only it \n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 108, + 101, + 46, + 10, + 10, + 39, + 79, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 119, + 105, + 99, + 107, + 101, + 100, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 33, + 39, + 32, + 99, + 114, + 105, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 44, + 32, + 99, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 103, + 105, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 97, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 107, + 105, + 115, + 115, + 32, + 116, + 111, + 32, + 109, + 97, + 107, + 101, + 32, + 105, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 105, + 110, + 32, + 100, + 105, + 115, + 103, + 114, + 97, + 99, + 101, + 46, + 10, + 39, + 82, + 101, + 97, + 108, + 108, + 121, + 44, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 111, + 117, + 103, + 104, + 116, + 32, + 116, + 111, + 32, + 104, + 97, + 118, + 101, + 32, + 116, + 97, + 117, + 103, + 104, + 116, + 32, + 121, + 111, + 117, + 32, + 98, + 101, + 116, + 116, + 101, + 114, + 32, + 109, + 97, + 110, + 110, + 101, + 114, + 115, + 33, + 32, + 89, + 111, + 117, + 32, + 79, + 85, + 71, + 72, + 84, + 44, + 10, + 68, + 105, + 110, + 97, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 103, + 104, + 116, + 33, + 39, + 32, + 115, + 104, + 101, + 32, + 97, + 100, + 100, + 101, + 100, + 44, + 32, + 108, + 111, + 111, + 107, + 105, + 110, + 103, + 32, + 114, + 101, + 112, + 114, + 111, + 97, + 99, + 104, + 102, + 117, + 108, + 108, + 121, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 10, + 99, + 97, + 116, + 44, + 32, + 97, + 110, + 100, + 32, + 115, + 112, + 101, + 97, + 107, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 97, + 115, + 32, + 99, + 114, + 111, + 115, + 115, + 32, + 97, + 32, + 118, + 111, + 105, + 99, + 101, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 99, + 111, + 117, + 108, + 100, + 32, + 109, + 97, + 110, + 97, + 103, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 115, + 104, + 101, + 10, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 100, + 32, + 98, + 97, + 99, + 107, + 32, + 105, + 110, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 116, + 97, + 107, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 10, + 119, + 105, + 116, + 104, + 32, + 104, + 101, + 114, + 44, + 32, + 97, + 110, + 100, + 32, + 98, + 101, + 103, + 97, + 110, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 97, + 103, + 97, + 105, + 110, + 46, + 32, + 66, + 117, + 116, + 32, + 115, + 104, + 101, + 32, + 100, + 105, + 100, + 110, + 39, + 116, + 32, + 103, + 101, + 116, + 32, + 111, + 110, + 10, + 118, + 101, + 114, + 121, + 32, + 102, + 97, + 115, + 116, + 44, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 97, + 108, + 108, + 32, + 116, + 104, + 101, + 32, + 116, + 105, + 109, + 101, + 44, + 32, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 115, + 111, + 109, + 101, + 116, + 105, + 109, + 101, + 115, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 46, + 32, + 75, + 105, + 116, + 116, + 121, + 32, + 115, + 97, + 116, + 32, + 118, + 101, + 114, + 121, + 32, + 100, + 101, + 109, + 117, + 114, + 101, + 108, + 121, + 32, + 111, + 110, + 32, + 104, + 101, + 114, + 32, + 107, + 110, + 101, + 101, + 44, + 32, + 112, + 114, + 101, + 116, + 101, + 110, + 100, + 105, + 110, + 103, + 32, + 116, + 111, + 10, + 119, + 97, + 116, + 99, + 104, + 32, + 116, + 104, + 101, + 32, + 112, + 114, + 111, + 103, + 114, + 101, + 115, + 115, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 105, + 110, + 103, + 44, + 32, + 97, + 110, + 100, + 32, + 110, + 111, + 119, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 112, + 117, + 116, + 116, + 105, + 110, + 103, + 32, + 111, + 117, + 116, + 32, + 111, + 110, + 101, + 10, + 112, + 97, + 119, + 32, + 97, + 110, + 100, + 32, + 103, + 101, + 110, + 116, + 108, + 121, + 32, + 116, + 111, + 117, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 44, + 32, + 97, + 115, + 32, + 105, + 102, + 32, + 105, + 116, + 32, + 119, + 111, + 117, + 108, + 100, + 32, + 98, + 101, + 32, + 103, + 108, + 97, + 100, + 32, + 116, + 111, + 32, + 104, + 101, + 108, + 112, + 44, + 32, + 105, + 102, + 32, + 105, + 116, + 10, + 109, + 105, + 103, + 104, + 116, + 46, + 10, + 10, + 39, + 68, + 111, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 119, + 104, + 97, + 116, + 32, + 116, + 111, + 45, + 109, + 111, + 114, + 114, + 111, + 119, + 32, + 105, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 63, + 39, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 98, + 101, + 103, + 97, + 110, + 46, + 32, + 39, + 89, + 111, + 117, + 39, + 100, + 32, + 104, + 97, + 118, + 101, + 32, + 103, + 117, + 101, + 115, + 115, + 101, + 100, + 10, + 105, + 102, + 32, + 121, + 111, + 117, + 39, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 105, + 110, + 100, + 111, + 119, + 32, + 119, + 105, + 116, + 104, + 32, + 109, + 101, + 45, + 45, + 111, + 110, + 108, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 32, + 109, + 97, + 107, + 105, + 110, + 103, + 32, + 121, + 111, + 117, + 32, + 116, + 105, + 100, + 121, + 44, + 10, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 99, + 111, + 117, + 108, + 100, + 110, + 39, + 116, + 46, + 32, + 73, + 32, + 119, + 97, + 115, + 32, + 119, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 116, + 104, + 101, + 32, + 98, + 111, + 121, + 115, + 32, + 103, + 101, + 116, + 116, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 10, + 98, + 111, + 110, + 102, + 105, + 114, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 105, + 116, + 32, + 119, + 97, + 110, + 116, + 115, + 32, + 112, + 108, + 101, + 110, + 116, + 121, + 32, + 111, + 102, + 32, + 115, + 116, + 105, + 99, + 107, + 115, + 44, + 32, + 75, + 105, + 116, + 116, + 121, + 33, + 32, + 79, + 110, + 108, + 121, + 32, + 105, + 116, + 32, + 10 + ], + "text": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmiddle.\n\n'Oh, you wicked little thing!' cried Alice, catching up the kitten, and\ngiving it a little kiss to make it understand that it was in disgrace.\n'Really, Dinah ought to have taught you better manners! You OUGHT,\nDinah, you know you ought!' she added, looking reproachfully at the old\ncat, and speaking in as cross a voice as she could manage--and then she\nscrambled back into the arm-chair, taking the kitten and the worsted\nwith her, and began winding up the ball again. But she didn't get on\nvery fast, as she was talking all the time, sometimes to the kitten, and\nsometimes to herself. Kitty sat very demurely on her knee, pretending to\nwatch the progress of the winding, and now and then putting out one\npaw and gently touching the ball, as if it would be glad to help, if it\nmight.\n\n'Do you know what to-morrow is, Kitty?' Alice began. 'You'd have guessed\nif you'd been up in the window with me--only Dinah was making you tidy,\nso you couldn't. I was watching the boys getting in sticks for the\nbonfire--and it wants plenty of sticks, Kitty! Only it \n" + } + ], + "version": 40, + "location": { + "topRightCorner": { + "x": 177.00000000000003, + "y": -9.711963975382757e-16 + }, + "topLeftCorner": { + "x": -9.711963975382757e-16, + "y": -9.711963975382757e-16 + }, + "bottomRightCorner": { + "x": 177.00000000000003, + "y": 177.00000000000003 + }, + "bottomLeftCorner": { + "x": -9.711963975382757e-16, + "y": 177.00000000000003 + }, + "topRightFinderPattern": { + "x": 173.5, + "y": 3.5 + }, + "topLeftFinderPattern": { + "x": 3.5, + "y": 3.5 + }, + "bottomLeftFinderPattern": { + "x": 3.5, + "y": 173.5 + }, + "bottomRightAlignmentPattern": { + "x": 170.5, + "y": 170.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/134/input.png b/jsQR/tests/end-to-end/134/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a52cb39182d816da6d8a7b344192709981a6e909 Binary files /dev/null and b/jsQR/tests/end-to-end/134/input.png differ diff --git a/jsQR/tests/end-to-end/134/output.json b/jsQR/tests/end-to-end/134/output.json new file mode 100644 index 0000000000000000000000000000000000000000..0b0e77bad1de0554aca5547a1212de9092b1281f --- /dev/null +++ b/jsQR/tests/end-to-end/134/output.json @@ -0,0 +1,3374 @@ +{ + "binaryData": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 108, + 101, + 46, + 10, + 10, + 39, + 79, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 119, + 105, + 99, + 107, + 101, + 100, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 33, + 39, + 32, + 99, + 114, + 105, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 44, + 32, + 99, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 103, + 105, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 97, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 107, + 105, + 115, + 115, + 32, + 116, + 111, + 32, + 109, + 97, + 107, + 101, + 32, + 105, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 105, + 110, + 32, + 100, + 105, + 115, + 103, + 114, + 97, + 99, + 101, + 46, + 10, + 39, + 82, + 101, + 97, + 108, + 108, + 121, + 44, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 111, + 117, + 103, + 104, + 116, + 32, + 116, + 111, + 32, + 104, + 97, + 118, + 101, + 32, + 116, + 97, + 117, + 103, + 104, + 116, + 32, + 121, + 111, + 117, + 32, + 98, + 101, + 116, + 116, + 101, + 114, + 32, + 109, + 97, + 110, + 110, + 101, + 114, + 115, + 33, + 32, + 89, + 111, + 117, + 32, + 79, + 85, + 71, + 72, + 84, + 44, + 10, + 68, + 105, + 110, + 97, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 103, + 104, + 116, + 33, + 39, + 32, + 115, + 104, + 101, + 32, + 97, + 100, + 100, + 101, + 100, + 44, + 32, + 108, + 111, + 111, + 107, + 105, + 110, + 103, + 32, + 114, + 101, + 112, + 114, + 111, + 97, + 99, + 104, + 102, + 117, + 108, + 108, + 121, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 10, + 99, + 97, + 116, + 44, + 32, + 97, + 110, + 100, + 32, + 115, + 112, + 101, + 97, + 107, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 97, + 115, + 32, + 99, + 114, + 111, + 115, + 115, + 32, + 97, + 32, + 118, + 111, + 105, + 99, + 101, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 99, + 111, + 117, + 108, + 100, + 32, + 109, + 97, + 110, + 97, + 103, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 115, + 104, + 101, + 10, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 100, + 32, + 98, + 97, + 99, + 107, + 32, + 105, + 110, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 97, + 114, + 109, + 45, + 99, + 104, + 10, + 10 + ], + "data": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmiddle.\n\n'Oh, you wicked little thing!' cried Alice, catching up the kitten, and\ngiving it a little kiss to make it understand that it was in disgrace.\n'Really, Dinah ought to have taught you better manners! You OUGHT,\nDinah, you know you ought!' she added, looking reproachfully at the old\ncat, and speaking in as cross a voice as she could manage--and then she\nscrambled back into the arm-ch\n\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 108, + 101, + 46, + 10, + 10, + 39, + 79, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 119, + 105, + 99, + 107, + 101, + 100, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 33, + 39, + 32, + 99, + 114, + 105, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 44, + 32, + 99, + 97, + 116, + 99, + 104, + 105, + 110, + 103, + 32, + 117, + 112, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 97, + 110, + 100, + 10, + 103, + 105, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 97, + 32, + 108, + 105, + 116, + 116, + 108, + 101, + 32, + 107, + 105, + 115, + 115, + 32, + 116, + 111, + 32, + 109, + 97, + 107, + 101, + 32, + 105, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 105, + 110, + 32, + 100, + 105, + 115, + 103, + 114, + 97, + 99, + 101, + 46, + 10, + 39, + 82, + 101, + 97, + 108, + 108, + 121, + 44, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 111, + 117, + 103, + 104, + 116, + 32, + 116, + 111, + 32, + 104, + 97, + 118, + 101, + 32, + 116, + 97, + 117, + 103, + 104, + 116, + 32, + 121, + 111, + 117, + 32, + 98, + 101, + 116, + 116, + 101, + 114, + 32, + 109, + 97, + 110, + 110, + 101, + 114, + 115, + 33, + 32, + 89, + 111, + 117, + 32, + 79, + 85, + 71, + 72, + 84, + 44, + 10, + 68, + 105, + 110, + 97, + 104, + 44, + 32, + 121, + 111, + 117, + 32, + 107, + 110, + 111, + 119, + 32, + 121, + 111, + 117, + 32, + 111, + 117, + 103, + 104, + 116, + 33, + 39, + 32, + 115, + 104, + 101, + 32, + 97, + 100, + 100, + 101, + 100, + 44, + 32, + 108, + 111, + 111, + 107, + 105, + 110, + 103, + 32, + 114, + 101, + 112, + 114, + 111, + 97, + 99, + 104, + 102, + 117, + 108, + 108, + 121, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 10, + 99, + 97, + 116, + 44, + 32, + 97, + 110, + 100, + 32, + 115, + 112, + 101, + 97, + 107, + 105, + 110, + 103, + 32, + 105, + 110, + 32, + 97, + 115, + 32, + 99, + 114, + 111, + 115, + 115, + 32, + 97, + 32, + 118, + 111, + 105, + 99, + 101, + 32, + 97, + 115, + 32, + 115, + 104, + 101, + 32, + 99, + 111, + 117, + 108, + 100, + 32, + 109, + 97, + 110, + 97, + 103, + 101, + 45, + 45, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 115, + 104, + 101, + 10, + 115, + 99, + 114, + 97, + 109, + 98, + 108, + 101, + 100, + 32, + 98, + 97, + 99, + 107, + 32, + 105, + 110, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 97, + 114, + 109, + 45, + 99, + 104, + 10, + 10 + ], + "text": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmiddle.\n\n'Oh, you wicked little thing!' cried Alice, catching up the kitten, and\ngiving it a little kiss to make it understand that it was in disgrace.\n'Really, Dinah ought to have taught you better manners! You OUGHT,\nDinah, you know you ought!' she added, looking reproachfully at the old\ncat, and speaking in as cross a voice as she could manage--and then she\nscrambled back into the arm-ch\n\n" + } + ], + "version": 40, + "location": { + "topRightCorner": { + "x": 177.00000000000003, + "y": -9.711963975382757e-16 + }, + "topLeftCorner": { + "x": -9.711963975382757e-16, + "y": -9.711963975382757e-16 + }, + "bottomRightCorner": { + "x": 177.00000000000003, + "y": 177.00000000000003 + }, + "bottomLeftCorner": { + "x": -9.711963975382757e-16, + "y": 177.00000000000003 + }, + "topRightFinderPattern": { + "x": 173.5, + "y": 3.5 + }, + "topLeftFinderPattern": { + "x": 3.5, + "y": 3.5 + }, + "bottomLeftFinderPattern": { + "x": 3.5, + "y": 173.5 + }, + "bottomRightAlignmentPattern": { + "x": 170.5, + "y": 170.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/135/input.png b/jsQR/tests/end-to-end/135/input.png new file mode 100755 index 0000000000000000000000000000000000000000..4ed10c64e1cc36b09502caea698571a65ed08242 Binary files /dev/null and b/jsQR/tests/end-to-end/135/input.png differ diff --git a/jsQR/tests/end-to-end/135/output.json b/jsQR/tests/end-to-end/135/output.json new file mode 100644 index 0000000000000000000000000000000000000000..0b197f81232836d630e604574086eb877969b680 --- /dev/null +++ b/jsQR/tests/end-to-end/135/output.json @@ -0,0 +1,2594 @@ +{ + "binaryData": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 10 + ], + "data": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmidd\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 84, + 72, + 82, + 79, + 85, + 71, + 72, + 32, + 84, + 72, + 69, + 32, + 76, + 79, + 79, + 75, + 73, + 78, + 71, + 45, + 71, + 76, + 65, + 83, + 83, + 10, + 10, + 66, + 121, + 32, + 76, + 101, + 119, + 105, + 115, + 32, + 67, + 97, + 114, + 114, + 111, + 108, + 108, + 10, + 10, + 10, + 67, + 72, + 65, + 80, + 84, + 69, + 82, + 32, + 73, + 46, + 32, + 76, + 111, + 111, + 107, + 105, + 110, + 103, + 45, + 71, + 108, + 97, + 115, + 115, + 32, + 104, + 111, + 117, + 115, + 101, + 10, + 10, + 79, + 110, + 101, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 119, + 97, + 115, + 32, + 99, + 101, + 114, + 116, + 97, + 105, + 110, + 44, + 32, + 116, + 104, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 87, + 72, + 73, + 84, + 69, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 104, + 97, + 100, + 32, + 110, + 111, + 116, + 104, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 100, + 111, + 32, + 119, + 105, + 116, + 104, + 10, + 105, + 116, + 58, + 45, + 45, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 117, + 108, + 116, + 32, + 101, + 110, + 116, + 105, + 114, + 101, + 108, + 121, + 46, + 32, + 70, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 10, + 98, + 101, + 101, + 110, + 32, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 98, + 121, + 32, + 116, + 104, + 101, + 32, + 111, + 108, + 100, + 32, + 99, + 97, + 116, + 32, + 102, + 111, + 114, + 32, + 116, + 104, + 101, + 32, + 108, + 97, + 115, + 116, + 32, + 113, + 117, + 97, + 114, + 116, + 101, + 114, + 32, + 111, + 102, + 10, + 97, + 110, + 32, + 104, + 111, + 117, + 114, + 32, + 40, + 97, + 110, + 100, + 32, + 98, + 101, + 97, + 114, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 112, + 114, + 101, + 116, + 116, + 121, + 32, + 119, + 101, + 108, + 108, + 44, + 32, + 99, + 111, + 110, + 115, + 105, + 100, + 101, + 114, + 105, + 110, + 103, + 41, + 59, + 32, + 115, + 111, + 32, + 121, + 111, + 117, + 32, + 115, + 101, + 101, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 10, + 67, + 79, + 85, + 76, + 68, + 78, + 39, + 84, + 32, + 104, + 97, + 118, + 101, + 32, + 104, + 97, + 100, + 32, + 97, + 110, + 121, + 32, + 104, + 97, + 110, + 100, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 109, + 105, + 115, + 99, + 104, + 105, + 101, + 102, + 46, + 10, + 10, + 84, + 104, + 101, + 32, + 119, + 97, + 121, + 32, + 68, + 105, + 110, + 97, + 104, + 32, + 119, + 97, + 115, + 104, + 101, + 100, + 32, + 104, + 101, + 114, + 32, + 99, + 104, + 105, + 108, + 100, + 114, + 101, + 110, + 39, + 115, + 32, + 102, + 97, + 99, + 101, + 115, + 32, + 119, + 97, + 115, + 32, + 116, + 104, + 105, + 115, + 58, + 32, + 102, + 105, + 114, + 115, + 116, + 32, + 115, + 104, + 101, + 32, + 104, + 101, + 108, + 100, + 32, + 116, + 104, + 101, + 10, + 112, + 111, + 111, + 114, + 32, + 116, + 104, + 105, + 110, + 103, + 32, + 100, + 111, + 119, + 110, + 32, + 98, + 121, + 32, + 105, + 116, + 115, + 32, + 101, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 32, + 111, + 110, + 101, + 32, + 112, + 97, + 119, + 44, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 110, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 111, + 116, + 104, + 101, + 114, + 32, + 112, + 97, + 119, + 32, + 115, + 104, + 101, + 10, + 114, + 117, + 98, + 98, + 101, + 100, + 32, + 105, + 116, + 115, + 32, + 102, + 97, + 99, + 101, + 32, + 97, + 108, + 108, + 32, + 111, + 118, + 101, + 114, + 44, + 32, + 116, + 104, + 101, + 32, + 119, + 114, + 111, + 110, + 103, + 32, + 119, + 97, + 121, + 44, + 32, + 98, + 101, + 103, + 105, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 116, + 32, + 116, + 104, + 101, + 32, + 110, + 111, + 115, + 101, + 58, + 32, + 97, + 110, + 100, + 10, + 106, + 117, + 115, + 116, + 32, + 110, + 111, + 119, + 44, + 32, + 97, + 115, + 32, + 73, + 32, + 115, + 97, + 105, + 100, + 44, + 32, + 115, + 104, + 101, + 32, + 119, + 97, + 115, + 32, + 104, + 97, + 114, + 100, + 32, + 97, + 116, + 32, + 119, + 111, + 114, + 107, + 32, + 111, + 110, + 32, + 116, + 104, + 101, + 32, + 119, + 104, + 105, + 116, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 44, + 32, + 119, + 104, + 105, + 99, + 104, + 32, + 119, + 97, + 115, + 10, + 108, + 121, + 105, + 110, + 103, + 32, + 113, + 117, + 105, + 116, + 101, + 32, + 115, + 116, + 105, + 108, + 108, + 32, + 97, + 110, + 100, + 32, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 112, + 117, + 114, + 114, + 45, + 45, + 110, + 111, + 32, + 100, + 111, + 117, + 98, + 116, + 32, + 102, + 101, + 101, + 108, + 105, + 110, + 103, + 32, + 116, + 104, + 97, + 116, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 32, + 97, + 108, + 108, + 10, + 109, + 101, + 97, + 110, + 116, + 32, + 102, + 111, + 114, + 32, + 105, + 116, + 115, + 32, + 103, + 111, + 111, + 100, + 46, + 10, + 10, + 66, + 117, + 116, + 32, + 116, + 104, + 101, + 32, + 98, + 108, + 97, + 99, + 107, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 102, + 105, + 110, + 105, + 115, + 104, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 101, + 97, + 114, + 108, + 105, + 101, + 114, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 97, + 102, + 116, + 101, + 114, + 110, + 111, + 111, + 110, + 44, + 10, + 97, + 110, + 100, + 32, + 115, + 111, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 119, + 97, + 115, + 32, + 115, + 105, + 116, + 116, + 105, + 110, + 103, + 32, + 99, + 117, + 114, + 108, + 101, + 100, + 32, + 117, + 112, + 32, + 105, + 110, + 32, + 97, + 32, + 99, + 111, + 114, + 110, + 101, + 114, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 103, + 114, + 101, + 97, + 116, + 10, + 97, + 114, + 109, + 45, + 99, + 104, + 97, + 105, + 114, + 44, + 32, + 104, + 97, + 108, + 102, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 104, + 101, + 114, + 115, + 101, + 108, + 102, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 108, + 102, + 32, + 97, + 115, + 108, + 101, + 101, + 112, + 44, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 104, + 97, + 118, + 105, + 110, + 103, + 32, + 97, + 32, + 103, + 114, + 97, + 110, + 100, + 32, + 103, + 97, + 109, + 101, + 32, + 111, + 102, + 32, + 114, + 111, + 109, + 112, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 98, + 97, + 108, + 108, + 32, + 111, + 102, + 32, + 119, + 111, + 114, + 115, + 116, + 101, + 100, + 32, + 65, + 108, + 105, + 99, + 101, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 10, + 116, + 114, + 121, + 105, + 110, + 103, + 32, + 116, + 111, + 32, + 119, + 105, + 110, + 100, + 32, + 117, + 112, + 44, + 32, + 97, + 110, + 100, + 32, + 104, + 97, + 100, + 32, + 98, + 101, + 101, + 110, + 32, + 114, + 111, + 108, + 108, + 105, + 110, + 103, + 32, + 105, + 116, + 32, + 117, + 112, + 32, + 97, + 110, + 100, + 32, + 100, + 111, + 119, + 110, + 32, + 116, + 105, + 108, + 108, + 32, + 105, + 116, + 32, + 104, + 97, + 100, + 32, + 97, + 108, + 108, + 10, + 99, + 111, + 109, + 101, + 32, + 117, + 110, + 100, + 111, + 110, + 101, + 32, + 97, + 103, + 97, + 105, + 110, + 59, + 32, + 97, + 110, + 100, + 32, + 116, + 104, + 101, + 114, + 101, + 32, + 105, + 116, + 32, + 119, + 97, + 115, + 44, + 32, + 115, + 112, + 114, + 101, + 97, + 100, + 32, + 111, + 118, + 101, + 114, + 32, + 116, + 104, + 101, + 32, + 104, + 101, + 97, + 114, + 116, + 104, + 45, + 114, + 117, + 103, + 44, + 32, + 97, + 108, + 108, + 10, + 107, + 110, + 111, + 116, + 115, + 32, + 97, + 110, + 100, + 32, + 116, + 97, + 110, + 103, + 108, + 101, + 115, + 44, + 32, + 119, + 105, + 116, + 104, + 32, + 116, + 104, + 101, + 32, + 107, + 105, + 116, + 116, + 101, + 110, + 32, + 114, + 117, + 110, + 110, + 105, + 110, + 103, + 32, + 97, + 102, + 116, + 101, + 114, + 32, + 105, + 116, + 115, + 32, + 111, + 119, + 110, + 32, + 116, + 97, + 105, + 108, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 10, + 109, + 105, + 100, + 100, + 10 + ], + "text": "THROUGH THE LOOKING-GLASS\n\nBy Lewis Carroll\n\n\nCHAPTER I. Looking-Glass house\n\nOne thing was certain, that the WHITE kitten had had nothing to do with\nit:--it was the black kitten's fault entirely. For the white kitten had\nbeen having its face washed by the old cat for the last quarter of\nan hour (and bearing it pretty well, considering); so you see that it\nCOULDN'T have had any hand in the mischief.\n\nThe way Dinah washed her children's faces was this: first she held the\npoor thing down by its ear with one paw, and then with the other paw she\nrubbed its face all over, the wrong way, beginning at the nose: and\njust now, as I said, she was hard at work on the white kitten, which was\nlying quite still and trying to purr--no doubt feeling that it was all\nmeant for its good.\n\nBut the black kitten had been finished with earlier in the afternoon,\nand so, while Alice was sitting curled up in a corner of the great\narm-chair, half talking to herself and half asleep, the kitten had been\nhaving a grand game of romps with the ball of worsted Alice had been\ntrying to wind up, and had been rolling it up and down till it had all\ncome undone again; and there it was, spread over the hearth-rug, all\nknots and tangles, with the kitten running after its own tail in the\nmidd\n" + } + ], + "version": 40, + "location": { + "topRightCorner": { + "x": 177.00000000000003, + "y": -9.711963975382757e-16 + }, + "topLeftCorner": { + "x": -9.711963975382757e-16, + "y": -9.711963975382757e-16 + }, + "bottomRightCorner": { + "x": 177.00000000000003, + "y": 177.00000000000003 + }, + "bottomLeftCorner": { + "x": -9.711963975382757e-16, + "y": 177.00000000000003 + }, + "topRightFinderPattern": { + "x": 173.5, + "y": 3.5 + }, + "topLeftFinderPattern": { + "x": 3.5, + "y": 3.5 + }, + "bottomLeftFinderPattern": { + "x": 3.5, + "y": 173.5 + }, + "bottomRightAlignmentPattern": { + "x": 170.5, + "y": 170.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/136/input.png b/jsQR/tests/end-to-end/136/input.png new file mode 100755 index 0000000000000000000000000000000000000000..295e792dd52867d8ef950f7631efaa708825a5ad Binary files /dev/null and b/jsQR/tests/end-to-end/136/input.png differ diff --git a/jsQR/tests/end-to-end/136/output.json b/jsQR/tests/end-to-end/136/output.json new file mode 100644 index 0000000000000000000000000000000000000000..06dde12af935ef949bf9a362b04f166cd241ebb8 --- /dev/null +++ b/jsQR/tests/end-to-end/136/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 293.0625, + "y": 239.12499999999997 + }, + "topLeftCorner": { + "x": 238.5975578681334, + "y": 207.28587392902762 + }, + "bottomRightCorner": { + "x": 261.133051886931, + "y": 292.2557694097396 + }, + "bottomLeftCorner": { + "x": 207.18750000000003, + "y": 262.375 + }, + "topRightFinderPattern": { + "x": 278.75, + "y": 243 + }, + "topLeftFinderPattern": { + "x": 242.5, + "y": 222 + }, + "bottomLeftFinderPattern": { + "x": 221.5, + "y": 258.5 + }, + "bottomRightAlignmentPattern": { + "x": 254.37785460171034, + "y": 266.78535341628486 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/137/input.png b/jsQR/tests/end-to-end/137/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1bc526151b48ef720b33e1624d99b83ef6f1d9e2 Binary files /dev/null and b/jsQR/tests/end-to-end/137/input.png differ diff --git a/jsQR/tests/end-to-end/137/output.json b/jsQR/tests/end-to-end/137/output.json new file mode 100644 index 0000000000000000000000000000000000000000..9a17489bf5c78187ce3fee515647f57f0dcca2e7 --- /dev/null +++ b/jsQR/tests/end-to-end/137/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 206.62500000000006, + "y": 260.87500000000006 + }, + "topLeftCorner": { + "x": 262.7952764055817, + "y": 292.8584954129445 + }, + "bottomRightCorner": { + "x": 236.2113048795682, + "y": 203.99207631169935 + }, + "bottomLeftCorner": { + "x": 292.87500000000006, + "y": 237.62500000000003 + }, + "topRightFinderPattern": { + "x": 221, + "y": 257 + }, + "topLeftFinderPattern": { + "x": 258.5, + "y": 278.5 + }, + "bottomLeftFinderPattern": { + "x": 278.5, + "y": 241.5 + }, + "bottomRightAlignmentPattern": { + "x": 244.6520846349197, + "y": 232.20839720816014 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/138/input.png b/jsQR/tests/end-to-end/138/input.png new file mode 100755 index 0000000000000000000000000000000000000000..5c6039b8fa9569cadfcb3374fa39fbb96ba6b082 Binary files /dev/null and b/jsQR/tests/end-to-end/138/input.png differ diff --git a/jsQR/tests/end-to-end/138/output.json b/jsQR/tests/end-to-end/138/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1fdf6f65f6eedb65d1f17cccb4fd52608b7b5c7f --- /dev/null +++ b/jsQR/tests/end-to-end/138/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 206.9375, + "y": 260.875 + }, + "topLeftCorner": { + "x": 261.3557756206376, + "y": 292.5381703728957 + }, + "bottomRightCorner": { + "x": 238.6490749364027, + "y": 206.92274156348552 + }, + "bottomLeftCorner": { + "x": 292.81250000000006, + "y": 237.625 + }, + "topRightFinderPattern": { + "x": 221.25, + "y": 257 + }, + "topLeftFinderPattern": { + "x": 257.5, + "y": 278 + }, + "bottomLeftFinderPattern": { + "x": 278.5, + "y": 241.5 + }, + "bottomRightAlignmentPattern": { + "x": 245.56887048816236, + "y": 233.01377397175972 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/139/input.png b/jsQR/tests/end-to-end/139/input.png new file mode 100755 index 0000000000000000000000000000000000000000..9f315b1d8c2fc0a66a5a73d2de6f50c9e5dc2860 Binary files /dev/null and b/jsQR/tests/end-to-end/139/input.png differ diff --git a/jsQR/tests/end-to-end/139/output.json b/jsQR/tests/end-to-end/139/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8a998f194462fc8eb7afcde7489e2f6c745b10a2 --- /dev/null +++ b/jsQR/tests/end-to-end/139/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 206.43749999999997, + "y": 258.25 + }, + "topLeftCorner": { + "x": 257.478752369052, + "y": 292.99116769599647 + }, + "bottomRightCorner": { + "x": 243.01200885020947, + "y": 208.4163594319938 + }, + "bottomLeftCorner": { + "x": 293.8125, + "y": 241.75 + }, + "topRightFinderPattern": { + "x": 221, + "y": 255.5 + }, + "topLeftFinderPattern": { + "x": 255, + "y": 278.5 + }, + "bottomLeftFinderPattern": { + "x": 279.25, + "y": 244.5 + }, + "bottomRightAlignmentPattern": { + "x": 247.3875483451124, + "y": 233.99643647911864 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/14/input.png b/jsQR/tests/end-to-end/14/input.png new file mode 100755 index 0000000000000000000000000000000000000000..dde744c8837c61bc9bdce43d38ffed1207e2b2ec Binary files /dev/null and b/jsQR/tests/end-to-end/14/input.png differ diff --git a/jsQR/tests/end-to-end/14/output.json b/jsQR/tests/end-to-end/14/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ab76a312e18f6a5cc7d2eb74f3e3682cc5958f35 --- /dev/null +++ b/jsQR/tests/end-to-end/14/output.json @@ -0,0 +1,60 @@ +{ + "binaryData": [ + 77, + 111, + 114, + 100, + 101, + 110 + ], + "data": "Morden", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 111, + 114, + 100, + 101, + 110 + ], + "text": "Morden" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 175, + "y": 28 + }, + "topLeftCorner": { + "x": 28, + "y": 28 + }, + "bottomRightCorner": { + "x": 175, + "y": 175 + }, + "bottomLeftCorner": { + "x": 28, + "y": 175 + }, + "topRightFinderPattern": { + "x": 150.5, + "y": 52.5 + }, + "topLeftFinderPattern": { + "x": 52.5, + "y": 52.5 + }, + "bottomLeftFinderPattern": { + "x": 52.5, + "y": 150.5 + }, + "bottomRightAlignmentPattern": { + "x": 129.5, + "y": 129.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/140/input.png b/jsQR/tests/end-to-end/140/input.png new file mode 100755 index 0000000000000000000000000000000000000000..528030d4c858dd2b9a0e2fb0d557fbe40c144102 Binary files /dev/null and b/jsQR/tests/end-to-end/140/input.png differ diff --git a/jsQR/tests/end-to-end/140/output.json b/jsQR/tests/end-to-end/140/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d0929889a226b64abf1bf6fe6cbe82789a97c3e1 --- /dev/null +++ b/jsQR/tests/end-to-end/140/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 419.92507474072994, + "y": 183.96534529379318 + }, + "topLeftCorner": { + "x": 209.57960670524986, + "y": 181.61287393277095 + }, + "bottomRightCorner": { + "x": 418.4661871634374, + "y": 382.94933702499986 + }, + "bottomLeftCorner": { + "x": 204.7894605827092, + "y": 378.7931728646261 + }, + "topRightFinderPattern": { + "x": 397.25, + "y": 204.5 + }, + "topLeftFinderPattern": { + "x": 231.25, + "y": 202.5 + }, + "bottomLeftFinderPattern": { + "x": 227.75, + "y": 358 + }, + "bottomRightAlignmentPattern": { + "x": 376.5, + "y": 342.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/141/input.png b/jsQR/tests/end-to-end/141/input.png new file mode 100755 index 0000000000000000000000000000000000000000..3e0523a668afd1b1f14143ebf269f3abc8e16350 Binary files /dev/null and b/jsQR/tests/end-to-end/141/input.png differ diff --git a/jsQR/tests/end-to-end/141/output.json b/jsQR/tests/end-to-end/141/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/141/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/142/input.png b/jsQR/tests/end-to-end/142/input.png new file mode 100755 index 0000000000000000000000000000000000000000..44e312d748d7df55be3f999b1c2ad69ef26f2e5c Binary files /dev/null and b/jsQR/tests/end-to-end/142/input.png differ diff --git a/jsQR/tests/end-to-end/142/output.json b/jsQR/tests/end-to-end/142/output.json new file mode 100644 index 0000000000000000000000000000000000000000..314aa3b2286a41eff44b96bb8be13176136aaa0f --- /dev/null +++ b/jsQR/tests/end-to-end/142/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 258.0624999999999, + "y": 206.99999999999994 + }, + "topLeftCorner": { + "x": 206.7850177832688, + "y": 241.44234135756233 + }, + "bottomRightCorner": { + "x": 292.35144563687794, + "y": 259.2223783141564 + }, + "bottomLeftCorner": { + "x": 242.68749999999994, + "y": 293.99999999999994 + }, + "topRightFinderPattern": { + "x": 255.5, + "y": 221.5 + }, + "topLeftFinderPattern": { + "x": 221.5, + "y": 244.5 + }, + "bottomLeftFinderPattern": { + "x": 245.25, + "y": 279.5 + }, + "bottomRightAlignmentPattern": { + "x": 266.5513660527376, + "y": 253.86132281615326 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/143/input.png b/jsQR/tests/end-to-end/143/input.png new file mode 100755 index 0000000000000000000000000000000000000000..9ce0eae47b1a84809684a744d797d71371b8a50b Binary files /dev/null and b/jsQR/tests/end-to-end/143/input.png differ diff --git a/jsQR/tests/end-to-end/143/output.json b/jsQR/tests/end-to-end/143/output.json new file mode 100644 index 0000000000000000000000000000000000000000..2be57e2831d209e88498166dcbbe4e560bb93948 --- /dev/null +++ b/jsQR/tests/end-to-end/143/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 185.40340508266686, + "y": 58.498877267922694 + }, + "topLeftCorner": { + "x": 62.94938227658657, + "y": 61.53513250876179 + }, + "bottomRightCorner": { + "x": 184.0645372132947, + "y": 179.99258812083997 + }, + "bottomLeftCorner": { + "x": 65.77479458063016, + "y": 185.04815118743258 + }, + "topRightFinderPattern": { + "x": 170.75, + "y": 74 + }, + "topLeftFinderPattern": { + "x": 78.25, + "y": 76.5 + }, + "bottomLeftFinderPattern": { + "x": 80, + "y": 170 + }, + "bottomRightAlignmentPattern": { + "x": 158, + "y": 154.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/144/input.png b/jsQR/tests/end-to-end/144/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2ec4ec50b18e01a4f10fc3ec3ad535108685b250 Binary files /dev/null and b/jsQR/tests/end-to-end/144/input.png differ diff --git a/jsQR/tests/end-to-end/144/output.json b/jsQR/tests/end-to-end/144/output.json new file mode 100644 index 0000000000000000000000000000000000000000..47b48e7d9d7c4734432c01b28159609a38959d16 --- /dev/null +++ b/jsQR/tests/end-to-end/144/output.json @@ -0,0 +1,50 @@ +{ + "binaryData": [ + 84, + 69, + 83, + 84 + ], + "data": "TEST", + "chunks": [ + { + "type": "alphanumeric", + "text": "TEST" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 28.304930965658343, + "y": 244.6544190676206 + }, + "topLeftCorner": { + "x": 21.165012324749235, + "y": 935.5281546918073 + }, + "bottomRightCorner": { + "x": 739.7185736323866, + "y": 232.49332926374248 + }, + "bottomLeftCorner": { + "x": 741.1684773445832, + "y": 976.8875317401377 + }, + "topRightFinderPattern": { + "x": 98.25, + "y": 316.5 + }, + "topLeftFinderPattern": { + "x": 93.25, + "y": 865 + }, + "bottomLeftFinderPattern": { + "x": 659.5, + "y": 893 + }, + "bottomRightAlignmentPattern": { + "x": 591, + "y": 378 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/145/input.png b/jsQR/tests/end-to-end/145/input.png new file mode 100755 index 0000000000000000000000000000000000000000..b5738327d0fb43ac9502913d12190ffd2e5f96bc Binary files /dev/null and b/jsQR/tests/end-to-end/145/input.png differ diff --git a/jsQR/tests/end-to-end/145/output.json b/jsQR/tests/end-to-end/145/output.json new file mode 100644 index 0000000000000000000000000000000000000000..52db7c87b4ec760d3e5389f98444b1ae3a5b6378 --- /dev/null +++ b/jsQR/tests/end-to-end/145/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 293.75, + "y": 240.625 + }, + "topLeftCorner": { + "x": 240.46090491449345, + "y": 207.45207942949023 + }, + "bottomRightCorner": { + "x": 259.80911693537985, + "y": 293.03070952187244 + }, + "bottomLeftCorner": { + "x": 206.75, + "y": 260.87500000000006 + }, + "topRightFinderPattern": { + "x": 279.25, + "y": 244 + }, + "topLeftFinderPattern": { + "x": 243.75, + "y": 222 + }, + "bottomLeftFinderPattern": { + "x": 221.25, + "y": 257.5 + }, + "bottomRightAlignmentPattern": { + "x": 253.9182428491664, + "y": 266.9749202943899 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/146/input.png b/jsQR/tests/end-to-end/146/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e4d7f8b8c94d632aa0b6c5cab8c1ae9a2937eae5 Binary files /dev/null and b/jsQR/tests/end-to-end/146/input.png differ diff --git a/jsQR/tests/end-to-end/146/output.json b/jsQR/tests/end-to-end/146/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d9cc7bd23b137d3460cfdb739a68285eb4c6baaf --- /dev/null +++ b/jsQR/tests/end-to-end/146/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 291.75000000000006, + "y": 264.62500000000006 + }, + "topLeftCorner": { + "x": 263.2573996865567, + "y": 207.60136211238833 + }, + "bottomRightCorner": { + "x": 236.28687715306182, + "y": 293.7571979832748 + }, + "bottomLeftCorner": { + "x": 207.75000000000006, + "y": 236.87500000000003 + }, + "topRightFinderPattern": { + "x": 277.75, + "y": 260 + }, + "topLeftFinderPattern": { + "x": 258.75, + "y": 222 + }, + "bottomLeftFinderPattern": { + "x": 221.75, + "y": 241.5 + }, + "bottomRightAlignmentPattern": { + "x": 244.6159822732343, + "y": 267.15033440494597 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/147/input.png b/jsQR/tests/end-to-end/147/input.png new file mode 100755 index 0000000000000000000000000000000000000000..458823bffe747f223ef8cc9d83bf8ead35ad82f6 Binary files /dev/null and b/jsQR/tests/end-to-end/147/input.png differ diff --git a/jsQR/tests/end-to-end/147/output.json b/jsQR/tests/end-to-end/147/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ff9bfb824980b509eb6a77d12019de905e6130a4 --- /dev/null +++ b/jsQR/tests/end-to-end/147/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 265.375, + "y": 291.875 + }, + "topLeftCorner": { + "x": 291.148579826756, + "y": 234.0190186256711 + }, + "bottomRightCorner": { + "x": 208.94100266098684, + "y": 265.8651971673654 + }, + "bottomLeftCorner": { + "x": 233.12499999999997, + "y": 208.62499999999997 + }, + "topRightFinderPattern": { + "x": 260, + "y": 278 + }, + "topLeftFinderPattern": { + "x": 277, + "y": 239.5 + }, + "bottomLeftFinderPattern": { + "x": 238.5, + "y": 222.5 + }, + "bottomRightAlignmentPattern": { + "x": 233.7117260566014, + "y": 256.2693313474427 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/148/input.png b/jsQR/tests/end-to-end/148/input.png new file mode 100755 index 0000000000000000000000000000000000000000..baf581433c13007b2d84d8e722236996db3d7adf Binary files /dev/null and b/jsQR/tests/end-to-end/148/input.png differ diff --git a/jsQR/tests/end-to-end/148/output.json b/jsQR/tests/end-to-end/148/output.json new file mode 100644 index 0000000000000000000000000000000000000000..fe693c7215105446695ba2248df36d524efc7d68 --- /dev/null +++ b/jsQR/tests/end-to-end/148/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 263.49999999999994, + "y": 291.375 + }, + "topLeftCorner": { + "x": 290.79762807324306, + "y": 234.26604686604492 + }, + "bottomRightCorner": { + "x": 207.9274477212262, + "y": 264.60245217347966 + }, + "bottomLeftCorner": { + "x": 233.49999999999997, + "y": 208.125 + }, + "topRightFinderPattern": { + "x": 258.5, + "y": 277.5 + }, + "topLeftFinderPattern": { + "x": 276.5, + "y": 239.5 + }, + "bottomLeftFinderPattern": { + "x": 238.5, + "y": 222 + }, + "bottomRightAlignmentPattern": { + "x": 232.84618068755663, + "y": 255.48041599830515 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/149/input.png b/jsQR/tests/end-to-end/149/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d4289e77f927bb0de849c7b2f95bf3d7914b22e0 Binary files /dev/null and b/jsQR/tests/end-to-end/149/input.png differ diff --git a/jsQR/tests/end-to-end/149/output.json b/jsQR/tests/end-to-end/149/output.json new file mode 100644 index 0000000000000000000000000000000000000000..16f2cb86a6cb79c67e2ceea75892cb56bbe9ef15 --- /dev/null +++ b/jsQR/tests/end-to-end/149/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 269.5, + "y": 306.25 + }, + "topLeftCorner": { + "x": 306.3830660295021, + "y": 230.45387044310593 + }, + "bottomRightCorner": { + "x": 194.40601880693285, + "y": 269.27258014693 + }, + "bottomLeftCorner": { + "x": 230.50000000000003, + "y": 193.75 + }, + "topRightFinderPattern": { + "x": 263, + "y": 287.5 + }, + "topLeftFinderPattern": { + "x": 287.5, + "y": 237 + }, + "bottomLeftFinderPattern": { + "x": 237, + "y": 212.5 + }, + "bottomRightAlignmentPattern": { + "x": 228.7291995012294, + "y": 257.3738775062405 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/15/input.png b/jsQR/tests/end-to-end/15/input.png new file mode 100755 index 0000000000000000000000000000000000000000..0516fdee7cc62bcaa2f4069ff2d527c3d2fdddca Binary files /dev/null and b/jsQR/tests/end-to-end/15/input.png differ diff --git a/jsQR/tests/end-to-end/15/output.json b/jsQR/tests/end-to-end/15/output.json new file mode 100644 index 0000000000000000000000000000000000000000..831674f805af0493ce95b606077b4a9c39915fd6 --- /dev/null +++ b/jsQR/tests/end-to-end/15/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 199.1914720053672, + "y": 31.321534215662346 + }, + "topLeftCorner": { + "x": 35.147845207535035, + "y": 37.62096426071047 + }, + "bottomRightCorner": { + "x": 224.07229778792177, + "y": 192.19551637193598 + }, + "bottomLeftCorner": { + "x": 52.505728807718825, + "y": 210.60410923501038 + }, + "topRightFinderPattern": { + "x": 188, + "y": 45 + }, + "topLeftFinderPattern": { + "x": 51.5, + "y": 51 + }, + "bottomLeftFinderPattern": { + "x": 66.5, + "y": 193.5 + }, + "bottomRightAlignmentPattern": { + "x": 194.5, + "y": 168 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/150/input.png b/jsQR/tests/end-to-end/150/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c4c602d4d620760fc102993b48a5fe91fa3c07d8 Binary files /dev/null and b/jsQR/tests/end-to-end/150/input.png differ diff --git a/jsQR/tests/end-to-end/150/output.json b/jsQR/tests/end-to-end/150/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/150/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/151/input.png b/jsQR/tests/end-to-end/151/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2619be270b6d37c4438e9221a06bb8702e40e669 Binary files /dev/null and b/jsQR/tests/end-to-end/151/input.png differ diff --git a/jsQR/tests/end-to-end/151/output.json b/jsQR/tests/end-to-end/151/output.json new file mode 100644 index 0000000000000000000000000000000000000000..22bc2c428a1412e6e3ac40aa6f65980bc47c4006 --- /dev/null +++ b/jsQR/tests/end-to-end/151/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 208.50000000000003, + "y": 265.37500000000006 + }, + "topLeftCorner": { + "x": 266.5500412397615, + "y": 291.4367702242901 + }, + "bottomRightCorner": { + "x": 232.48994367626585, + "y": 205.90808078706766 + }, + "bottomLeftCorner": { + "x": 291, + "y": 233.125 + }, + "topRightFinderPattern": { + "x": 222.25, + "y": 260 + }, + "topLeftFinderPattern": { + "x": 261, + "y": 277.5 + }, + "bottomLeftFinderPattern": { + "x": 277.25, + "y": 238.5 + }, + "bottomRightAlignmentPattern": { + "x": 243.22999949827894, + "y": 232.87755429567827 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/152/input.png b/jsQR/tests/end-to-end/152/input.png new file mode 100755 index 0000000000000000000000000000000000000000..97b4f0a8a83bd61846ba560ee2d3aafb2ba2bb84 Binary files /dev/null and b/jsQR/tests/end-to-end/152/input.png differ diff --git a/jsQR/tests/end-to-end/152/output.json b/jsQR/tests/end-to-end/152/output.json new file mode 100644 index 0000000000000000000000000000000000000000..294e9ae5f589b37a5add2c1c7889e484809f5985 --- /dev/null +++ b/jsQR/tests/end-to-end/152/output.json @@ -0,0 +1,249 @@ +{ + "binaryData": [ + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 13, + 10, + 57, + 49, + 55, + 45, + 51, + 54, + 52, + 45, + 50, + 57, + 49, + 56, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 119, + 101, + 115, + 111, + 109, + 101, + 45, + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115, + 46, + 99, + 111, + 109 + ], + "data": "Sean Owen\r\nsrowen@google.com\r\n917-364-2918\r\nhttp://awesome-thoughts.com", + "chunks": [ + { + "type": "alphanumeric", + "text": "S" + }, + { + "type": "byte", + "bytes": [ + 101, + 97, + 110 + ], + "text": "ean" + }, + { + "type": "alphanumeric", + "text": " O" + }, + { + "type": "byte", + "bytes": [ + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101 + ], + "text": "wen\r\nsrowen@google" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109, + 13, + 10 + ], + "text": "com\r\n" + }, + { + "type": "numeric", + "text": "917" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "364" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "2918" + }, + { + "type": "byte", + "bytes": [ + 13, + 10, + 104, + 116, + 116, + 112 + ], + "text": "\r\nhttp" + }, + { + "type": "alphanumeric", + "text": "://" + }, + { + "type": "byte", + "bytes": [ + 97, + 119, + 101, + 115, + 111, + 109, + 101 + ], + "text": "awesome" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "byte", + "bytes": [ + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115 + ], + "text": "thoughts" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109 + ], + "text": "com" + } + ], + "version": 10, + "location": { + "topRightCorner": { + "x": 379.63308928116595, + "y": 356.96061373824125 + }, + "topLeftCorner": { + "x": 414.6145783231614, + "y": 157.5181527022359 + }, + "bottomRightCorner": { + "x": 167.693680645575, + "y": 325.9697098908715 + }, + "bottomLeftCorner": { + "x": 199.22438488755674, + "y": 125.53586181468567 + }, + "topRightFinderPattern": { + "x": 368.75, + "y": 343 + }, + "topLeftFinderPattern": { + "x": 399.25, + "y": 168 + }, + "bottomLeftFinderPattern": { + "x": 210.5, + "y": 140 + }, + "bottomRightAlignmentPattern": { + "x": 195.5, + "y": 307 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/153/input.png b/jsQR/tests/end-to-end/153/input.png new file mode 100755 index 0000000000000000000000000000000000000000..174e36d841cd970089ae056e0ff5904353470661 Binary files /dev/null and b/jsQR/tests/end-to-end/153/input.png differ diff --git a/jsQR/tests/end-to-end/153/output.json b/jsQR/tests/end-to-end/153/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d72d4c6f0a7f84b34c3725ebc510777cd4e91bf1 --- /dev/null +++ b/jsQR/tests/end-to-end/153/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 48 + ], + "data": "1234567890", + "chunks": [ + { + "type": "numeric", + "text": "1234567890" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 207.6875, + "y": 264.5 + }, + "topLeftCorner": { + "x": 265.1295777168158, + "y": 291.68549887119434 + }, + "bottomRightCorner": { + "x": 235.01423028423466, + "y": 208.40355041566144 + }, + "bottomLeftCorner": { + "x": 292.0625, + "y": 234.5 + }, + "topRightFinderPattern": { + "x": 221.75, + "y": 259.5 + }, + "topLeftFinderPattern": { + "x": 260, + "y": 277.5 + }, + "bottomLeftFinderPattern": { + "x": 278, + "y": 239.5 + }, + "bottomRightAlignmentPattern": { + "x": 244.1681533685537, + "y": 233.71810314266708 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/154/input.png b/jsQR/tests/end-to-end/154/input.png new file mode 100755 index 0000000000000000000000000000000000000000..afcce6f060fafe364de660f763542a51f2304ba9 Binary files /dev/null and b/jsQR/tests/end-to-end/154/input.png differ diff --git a/jsQR/tests/end-to-end/154/output.json b/jsQR/tests/end-to-end/154/output.json new file mode 100644 index 0000000000000000000000000000000000000000..5d212aab1fd2b07e256a8667470a431479d7f343 --- /dev/null +++ b/jsQR/tests/end-to-end/154/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 195.06791720186337, + "y": 50.163843106065535 + }, + "topLeftCorner": { + "x": 52.65835750346371, + "y": 52.44512408472853 + }, + "bottomRightCorner": { + "x": 197.04178129982932, + "y": 192.6599975877607 + }, + "bottomLeftCorner": { + "x": 57.29584684590438, + "y": 203.0974331662688 + }, + "topRightFinderPattern": { + "x": 179, + "y": 68 + }, + "topLeftFinderPattern": { + "x": 71.25, + "y": 70.5 + }, + "bottomLeftFinderPattern": { + "x": 74.5, + "y": 184 + }, + "bottomRightAlignmentPattern": { + "x": 166.5, + "y": 163 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/155/input.png b/jsQR/tests/end-to-end/155/input.png new file mode 100644 index 0000000000000000000000000000000000000000..428a728991bbd5df6f36d8735c4be340ad86fd0b Binary files /dev/null and b/jsQR/tests/end-to-end/155/input.png differ diff --git a/jsQR/tests/end-to-end/155/output.json b/jsQR/tests/end-to-end/155/output.json new file mode 100644 index 0000000000000000000000000000000000000000..b841cf116e9e6ab26bf694cefb9962685c0bdaa5 --- /dev/null +++ b/jsQR/tests/end-to-end/155/output.json @@ -0,0 +1,100 @@ +{ + "binaryData": [ + 1, + 1, + 82, + 197, + 233, + 208, + 230, + 237, + 6, + 148, + 33, + 45, + 106, + 4, + 253, + 253, + 156, + 25, + 34, + 149, + 17, + 54, + 58, + 237, + 123, + 140 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 1, + 1, + 82, + 197, + 233, + 208, + 230, + 237, + 6, + 148, + 33, + 45, + 106, + 4, + 253, + 253, + 156, + 25, + 34, + 149, + 17, + 54, + 58, + 237, + 123, + 140 + ], + "text": "" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 149.54736268229522, + "y": 7.550429330789149 + }, + "topLeftCorner": { + "x": 7.258718498703925, + "y": 7.758718498703921 + }, + "bottomRightCorner": { + "x": 150.00693753577673, + "y": 150.50693753577676 + }, + "bottomLeftCorner": { + "x": 7.18546094490321, + "y": 149.21788276702316 + }, + "topRightFinderPattern": { + "x": 129.5, + "y": 27.5 + }, + "topLeftFinderPattern": { + "x": 27, + "y": 27.5 + }, + "bottomLeftFinderPattern": { + "x": 27, + "y": 129.5 + }, + "bottomRightAlignmentPattern": { + "x": 112.5, + "y": 113 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/156/input.png b/jsQR/tests/end-to-end/156/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2611b88c83abd6725e96074ffdbed79436cdabe8 Binary files /dev/null and b/jsQR/tests/end-to-end/156/input.png differ diff --git a/jsQR/tests/end-to-end/156/output.json b/jsQR/tests/end-to-end/156/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cc4f997f1c3d1a73ef808f8c3d1af73a859c6067 --- /dev/null +++ b/jsQR/tests/end-to-end/156/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 445.259106102532, + "y": 143.64036970299387 + }, + "topLeftCorner": { + "x": 184.32404113039735, + "y": 132.01209970836464 + }, + "bottomRightCorner": { + "x": 437.48849499018553, + "y": 393.50671442476965 + }, + "bottomLeftCorner": { + "x": 155.1208589136971, + "y": 377.274669408664 + }, + "topRightFinderPattern": { + "x": 416.25, + "y": 167 + }, + "topLeftFinderPattern": { + "x": 209, + "y": 157.5 + }, + "bottomLeftFinderPattern": { + "x": 187.75, + "y": 351 + }, + "bottomRightAlignmentPattern": { + "x": 383.75, + "y": 338 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/157/input.png b/jsQR/tests/end-to-end/157/input.png new file mode 100755 index 0000000000000000000000000000000000000000..9c02d90d578c7a2a4c5385bfa122e66f8b8bada3 Binary files /dev/null and b/jsQR/tests/end-to-end/157/input.png differ diff --git a/jsQR/tests/end-to-end/157/output.json b/jsQR/tests/end-to-end/157/output.json new file mode 100644 index 0000000000000000000000000000000000000000..3595f82e292e976117208a18b5ad84e59a5707c4 --- /dev/null +++ b/jsQR/tests/end-to-end/157/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 356.18092014569095, + "y": 145.25392472081776 + }, + "topLeftCorner": { + "x": 181.3121304424335, + "y": 147.28483243090042 + }, + "bottomRightCorner": { + "x": 359.2065429127152, + "y": 310.7748390331431 + }, + "bottomLeftCorner": { + "x": 178.47811962674484, + "y": 311.5329737778316 + }, + "topRightFinderPattern": { + "x": 337.75, + "y": 162.5 + }, + "topLeftFinderPattern": { + "x": 199.5, + "y": 164 + }, + "bottomLeftFinderPattern": { + "x": 197.75, + "y": 293.5 + }, + "bottomRightAlignmentPattern": { + "x": 323, + "y": 277.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/158/input.png b/jsQR/tests/end-to-end/158/input.png new file mode 100755 index 0000000000000000000000000000000000000000..3667ca64eb8aa0d419ad8b2941ccbd4c0ed87432 Binary files /dev/null and b/jsQR/tests/end-to-end/158/input.png differ diff --git a/jsQR/tests/end-to-end/158/output.json b/jsQR/tests/end-to-end/158/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1e607b9fec93812f4427660c4865ec49dbabbfe8 --- /dev/null +++ b/jsQR/tests/end-to-end/158/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 413.4669900661311, + "y": 159.60382677921416 + }, + "topLeftCorner": { + "x": 218.49010293126724, + "y": 159.78146682078008 + }, + "bottomRightCorner": { + "x": 412.22174079048847, + "y": 341.315186740717 + }, + "bottomLeftCorner": { + "x": 218.63516006237532, + "y": 339.8391353168906 + }, + "topRightFinderPattern": { + "x": 392.5, + "y": 179 + }, + "topLeftFinderPattern": { + "x": 239, + "y": 179 + }, + "bottomLeftFinderPattern": { + "x": 239, + "y": 321 + }, + "bottomRightAlignmentPattern": { + "x": 374, + "y": 305.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/159/input.png b/jsQR/tests/end-to-end/159/input.png new file mode 100644 index 0000000000000000000000000000000000000000..d672b2ff214af0797a9f476ce024a53524c97966 Binary files /dev/null and b/jsQR/tests/end-to-end/159/input.png differ diff --git a/jsQR/tests/end-to-end/159/output.json b/jsQR/tests/end-to-end/159/output.json new file mode 100644 index 0000000000000000000000000000000000000000..2e1cb9e0f5e5cf96592aef5984870cfddc380374 --- /dev/null +++ b/jsQR/tests/end-to-end/159/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 66, + 71, + 73, + 74, + 51, + 55 + ], + "data": "http://if.gs/1BGIJ37", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 66, + 71, + 73, + 74, + 51, + 55 + ], + "text": "http://if.gs/1BGIJ37" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 192.13709892609523, + "y": 48.223006933356665 + }, + "topLeftCorner": { + "x": 130.07173997794536, + "y": 39.69558684295532 + }, + "bottomRightCorner": { + "x": 184.35294878454738, + "y": 106.82196719921126 + }, + "bottomLeftCorner": { + "x": 124.08010403401609, + "y": 99.6129826681919 + }, + "topRightFinderPattern": { + "x": 182.5, + "y": 55.5 + }, + "topLeftFinderPattern": { + "x": 138, + "y": 49.5 + }, + "bottomLeftFinderPattern": { + "x": 133.5, + "y": 92.5 + }, + "bottomRightAlignmentPattern": { + "x": 170.75, + "y": 90 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/16/input.png b/jsQR/tests/end-to-end/16/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c5f1503bc408de9225e0ef9858e9b72f53fe3a88 Binary files /dev/null and b/jsQR/tests/end-to-end/16/input.png differ diff --git a/jsQR/tests/end-to-end/16/output.json b/jsQR/tests/end-to-end/16/output.json new file mode 100644 index 0000000000000000000000000000000000000000..881db201a271b86896bc12e613455f89cf23c62e --- /dev/null +++ b/jsQR/tests/end-to-end/16/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 194.70120540465504, + "y": 44.149287399935204 + }, + "topLeftCorner": { + "x": 39.26049566356904, + "y": 55.2396501768661 + }, + "bottomRightCorner": { + "x": 202.09207806748802, + "y": 193.0202199032591 + }, + "bottomLeftCorner": { + "x": 55.36544258012659, + "y": 201.5806038380388 + }, + "topRightFinderPattern": { + "x": 182, + "y": 58.5 + }, + "topLeftFinderPattern": { + "x": 53.75, + "y": 67.5 + }, + "bottomLeftFinderPattern": { + "x": 66.5, + "y": 189 + }, + "bottomRightAlignmentPattern": { + "x": 177.25, + "y": 172 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/160/input.png b/jsQR/tests/end-to-end/160/input.png new file mode 100755 index 0000000000000000000000000000000000000000..5d38294a034948062d63de856bae616485c063d2 Binary files /dev/null and b/jsQR/tests/end-to-end/160/input.png differ diff --git a/jsQR/tests/end-to-end/160/output.json b/jsQR/tests/end-to-end/160/output.json new file mode 100644 index 0000000000000000000000000000000000000000..930c6a312a550c468973efc8275b4b24e8aad3ac --- /dev/null +++ b/jsQR/tests/end-to-end/160/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 405.40407063069654, + "y": 147.6088927975878 + }, + "topLeftCorner": { + "x": 200.3002491863355, + "y": 164.0549540120211 + }, + "bottomRightCorner": { + "x": 434.0464227234107, + "y": 337.38673192720614 + }, + "bottomLeftCorner": { + "x": 217.41628166662508, + "y": 361.0004370270743 + }, + "topRightFinderPattern": { + "x": 387, + "y": 168.5 + }, + "topLeftFinderPattern": { + "x": 224.5, + "y": 182 + }, + "bottomLeftFinderPattern": { + "x": 239, + "y": 336.5 + }, + "bottomRightAlignmentPattern": { + "x": 387, + "y": 302.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/161/input.png b/jsQR/tests/end-to-end/161/input.png new file mode 100755 index 0000000000000000000000000000000000000000..44c1557b4df31ad7aa40b7cdb4b3fe8f6e8ce440 Binary files /dev/null and b/jsQR/tests/end-to-end/161/input.png differ diff --git a/jsQR/tests/end-to-end/161/output.json b/jsQR/tests/end-to-end/161/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ffac81baa4d7b013c14088fe4acd916f94abf98c --- /dev/null +++ b/jsQR/tests/end-to-end/161/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 412.4498090973784, + "y": 181.84305036636135 + }, + "topLeftCorner": { + "x": 243.8730760864686, + "y": 181.159069325839 + }, + "bottomRightCorner": { + "x": 408.21405693896406, + "y": 345.13886120942783 + }, + "bottomLeftCorner": { + "x": 234.12280804843962, + "y": 338.59311890404064 + }, + "topRightFinderPattern": { + "x": 393.5, + "y": 198.5 + }, + "topLeftFinderPattern": { + "x": 260.25, + "y": 197.5 + }, + "bottomLeftFinderPattern": { + "x": 253, + "y": 322 + }, + "bottomRightAlignmentPattern": { + "x": 374, + "y": 311 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/162/input.png b/jsQR/tests/end-to-end/162/input.png new file mode 100755 index 0000000000000000000000000000000000000000..4513892f7fc904f44828c86467f55e2486345348 Binary files /dev/null and b/jsQR/tests/end-to-end/162/input.png differ diff --git a/jsQR/tests/end-to-end/162/output.json b/jsQR/tests/end-to-end/162/output.json new file mode 100644 index 0000000000000000000000000000000000000000..5f41894cb58068e0a659ec43538599077e0d8d86 --- /dev/null +++ b/jsQR/tests/end-to-end/162/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 211.11390005869464, + "y": 132.61705205198157 + }, + "topLeftCorner": { + "x": 214.81684577453177, + "y": 345.98124557184036 + }, + "bottomRightCorner": { + "x": 450.2199789930581, + "y": 133.42926396004322 + }, + "bottomLeftCorner": { + "x": 441.79688787371214, + "y": 358.54041838525865 + }, + "topRightFinderPattern": { + "x": 235.5, + "y": 156.5 + }, + "topLeftFinderPattern": { + "x": 237.5, + "y": 325.5 + }, + "bottomLeftFinderPattern": { + "x": 417.25, + "y": 334.5 + }, + "bottomRightAlignmentPattern": { + "x": 399.75, + "y": 179 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/163/input.png b/jsQR/tests/end-to-end/163/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a589ee4fb9b2bc2c623d4f90124ee9d1f5d9e461 Binary files /dev/null and b/jsQR/tests/end-to-end/163/input.png differ diff --git a/jsQR/tests/end-to-end/163/output.json b/jsQR/tests/end-to-end/163/output.json new file mode 100644 index 0000000000000000000000000000000000000000..5fa8fbc27b9f1cfcd3680a071d7e923cc203616e --- /dev/null +++ b/jsQR/tests/end-to-end/163/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 196.3820955270764, + "y": 140.10670706207077 + }, + "topLeftCorner": { + "x": 193.16420818531188, + "y": 339.0307902934915 + }, + "bottomRightCorner": { + "x": 399.84262243262924, + "y": 146.27372001101932 + }, + "bottomLeftCorner": { + "x": 399.79134830525, + "y": 336.8520061610842 + }, + "topRightFinderPattern": { + "x": 218.5, + "y": 161.5 + }, + "topLeftFinderPattern": { + "x": 216.25, + "y": 317.5 + }, + "bottomLeftFinderPattern": { + "x": 378.75, + "y": 316.5 + }, + "bottomRightAlignmentPattern": { + "x": 361, + "y": 182.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/164/input.png b/jsQR/tests/end-to-end/164/input.png new file mode 100755 index 0000000000000000000000000000000000000000..9924161948f812d1c7170f8335a4a1f507b884e0 Binary files /dev/null and b/jsQR/tests/end-to-end/164/input.png differ diff --git a/jsQR/tests/end-to-end/164/output.json b/jsQR/tests/end-to-end/164/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4a42b14f85c65077d57daea11a3c4a636e31a6f3 --- /dev/null +++ b/jsQR/tests/end-to-end/164/output.json @@ -0,0 +1,1182 @@ +{ + "binaryData": [ + 87, + 104, + 101, + 110, + 32, + 119, + 101, + 32, + 97, + 116, + 32, + 87, + 82, + 84, + 32, + 116, + 97, + 108, + 107, + 32, + 97, + 98, + 111, + 117, + 116, + 32, + 92, + 34, + 116, + 101, + 120, + 116, + 44, + 92, + 34, + 32, + 119, + 101, + 32, + 97, + 114, + 101, + 32, + 103, + 101, + 110, + 101, + 114, + 97, + 108, + 108, + 121, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 97, + 98, + 111, + 117, + 116, + 32, + 97, + 32, + 112, + 97, + 114, + 116, + 105, + 99, + 117, + 108, + 97, + 114, + 32, + 107, + 105, + 110, + 100, + 32, + 111, + 102, + 32, + 114, + 101, + 97, + 100, + 97, + 98, + 108, + 101, + 32, + 105, + 110, + 102, + 111, + 114, + 109, + 97, + 116, + 105, + 111, + 110, + 32, + 101, + 110, + 99, + 111, + 100, + 105, + 110, + 103, + 32, + 45, + 32, + 97, + 110, + 100, + 32, + 114, + 101, + 97, + 100, + 97, + 98, + 108, + 101, + 32, + 105, + 115, + 32, + 97, + 32, + 99, + 111, + 109, + 112, + 108, + 101, + 120, + 32, + 112, + 114, + 111, + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 46, + 32, + 84, + 101, + 120, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 115, + 116, + 121, + 108, + 105, + 122, + 101, + 100, + 32, + 105, + 110, + 32, + 97, + 32, + 119, + 97, + 121, + 32, + 119, + 101, + 32, + 97, + 114, + 101, + 32, + 117, + 110, + 102, + 97, + 109, + 105, + 108, + 105, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 44, + 32, + 97, + 115, + 32, + 105, + 110, + 32, + 98, + 108, + 97, + 99, + 107, + 108, + 101, + 116, + 116, + 101, + 114, + 32, + 45, + 32, + 105, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 105, + 110, + 116, + 101, + 114, + 115, + 112, + 101, + 114, + 115, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 115, + 111, + 109, + 101, + 32, + 109, + 97, + 114, + 107, + 117, + 112, + 32, + 119, + 101, + 32, + 100, + 111, + 110, + 92, + 39, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 44, + 32, + 115, + 117, + 99, + 104, + 32, + 97, + 115, + 32, + 72, + 84, + 77, + 76, + 32, + 45, + 32, + 105, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 98, + 101, + 32, + 97, + 32, + 115, + 117, + 98, + 115, + 116, + 105, + 116, + 117, + 116, + 105, + 111, + 110, + 32, + 115, + 121, + 115, + 116, + 101, + 109, + 32, + 119, + 101, + 32, + 97, + 114, + 101, + 110, + 92, + 39, + 116, + 32, + 102, + 97, + 109, + 105, + 108, + 105, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 44, + 32, + 115, + 117, + 99, + 104, + 32, + 97, + 115, + 32, + 98, + 114, + 97, + 105, + 108, + 108, + 101, + 32, + 111, + 114, + 32, + 109, + 111, + 114, + 115, + 101, + 32, + 99, + 111, + 100, + 101, + 32, + 45, + 32, + 111, + 114, + 32, + 105, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 97, + 32, + 115, + 121, + 115, + 116, + 101, + 109, + 32, + 116, + 104, + 97, + 116, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 116, + 101, + 99, + 104, + 110, + 105, + 99, + 97, + 108, + 108, + 121, + 32, + 104, + 117, + 109, + 97, + 110, + 45, + 114, + 101, + 97, + 100, + 97, + 98, + 108, + 101, + 44, + 32, + 105, + 115, + 110, + 92, + 39, + 116, + 32, + 112, + 97, + 114, + 116, + 105, + 99, + 117, + 108, + 97, + 114, + 108, + 121, + 32, + 111, + 112, + 116, + 105, + 109, + 105, + 122, + 101, + 100, + 32, + 102, + 111, + 114, + 32, + 114, + 101, + 97, + 100, + 105, + 110, + 103, + 32, + 98, + 121, + 32, + 104, + 117, + 109, + 97, + 110, + 115, + 44, + 32, + 97, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 98, + 97, + 114, + 99, + 111, + 100, + 101, + 115, + 32, + 40, + 97, + 108, + 116, + 104, + 111, + 117, + 103, + 104, + 32, + 98, + 97, + 114, + 99, + 111, + 100, + 101, + 115, + 32, + 99, + 97, + 110, + 32, + 98, + 101, + 32, + 114, + 101, + 97, + 100, + 41, + 46 + ], + "data": "When we at WRT talk about \\\"text,\\\" we are generally talking about a particular kind of readable information encoding - and readable is a complex proposition. Text may be stylized in a way we are unfamiliar with, as in blackletter - it may be interspersed with some markup we don\\'t understand, such as HTML - it may be be a substitution system we aren\\'t familiar with, such as braille or morse code - or it may be a system that, while technically human-readable, isn\\'t particularly optimized for reading by humans, as with barcodes (although barcodes can be read).", + "chunks": [ + { + "type": "byte", + "bytes": [ + 87, + 104, + 101, + 110, + 32, + 119, + 101, + 32, + 97, + 116, + 32, + 87, + 82, + 84, + 32, + 116, + 97, + 108, + 107, + 32, + 97, + 98, + 111, + 117, + 116, + 32, + 92, + 34, + 116, + 101, + 120, + 116, + 44, + 92, + 34, + 32, + 119, + 101, + 32, + 97, + 114, + 101, + 32, + 103, + 101, + 110, + 101, + 114, + 97, + 108, + 108, + 121, + 32, + 116, + 97, + 108, + 107, + 105, + 110, + 103, + 32, + 97, + 98, + 111, + 117, + 116, + 32, + 97, + 32, + 112, + 97, + 114, + 116, + 105, + 99, + 117, + 108, + 97, + 114, + 32, + 107, + 105, + 110, + 100, + 32, + 111, + 102, + 32, + 114, + 101, + 97, + 100, + 97, + 98, + 108, + 101, + 32, + 105, + 110, + 102, + 111, + 114, + 109, + 97, + 116, + 105, + 111, + 110, + 32, + 101, + 110, + 99, + 111, + 100, + 105, + 110, + 103, + 32, + 45, + 32, + 97, + 110, + 100, + 32, + 114, + 101, + 97, + 100, + 97, + 98, + 108, + 101, + 32, + 105, + 115, + 32, + 97, + 32, + 99, + 111, + 109, + 112, + 108, + 101, + 120, + 32, + 112, + 114, + 111, + 112, + 111, + 115, + 105, + 116, + 105, + 111, + 110, + 46, + 32, + 84, + 101, + 120, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 115, + 116, + 121, + 108, + 105, + 122, + 101, + 100, + 32, + 105, + 110, + 32, + 97, + 32, + 119, + 97, + 121, + 32, + 119, + 101, + 32, + 97, + 114, + 101, + 32, + 117, + 110, + 102, + 97, + 109, + 105, + 108, + 105, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 44, + 32, + 97, + 115, + 32, + 105, + 110, + 32, + 98, + 108, + 97, + 99, + 107, + 108, + 101, + 116, + 116, + 101, + 114, + 32, + 45, + 32, + 105, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 105, + 110, + 116, + 101, + 114, + 115, + 112, + 101, + 114, + 115, + 101, + 100, + 32, + 119, + 105, + 116, + 104, + 32, + 115, + 111, + 109, + 101, + 32, + 109, + 97, + 114, + 107, + 117, + 112, + 32, + 119, + 101, + 32, + 100, + 111, + 110, + 92, + 39, + 116, + 32, + 117, + 110, + 100, + 101, + 114, + 115, + 116, + 97, + 110, + 100, + 44, + 32, + 115, + 117, + 99, + 104, + 32, + 97, + 115, + 32, + 72, + 84, + 77, + 76, + 32, + 45, + 32, + 105, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 98, + 101, + 32, + 97, + 32, + 115, + 117, + 98, + 115, + 116, + 105, + 116, + 117, + 116, + 105, + 111, + 110, + 32, + 115, + 121, + 115, + 116, + 101, + 109, + 32, + 119, + 101, + 32, + 97, + 114, + 101, + 110, + 92, + 39, + 116, + 32, + 102, + 97, + 109, + 105, + 108, + 105, + 97, + 114, + 32, + 119, + 105, + 116, + 104, + 44, + 32, + 115, + 117, + 99, + 104, + 32, + 97, + 115, + 32, + 98, + 114, + 97, + 105, + 108, + 108, + 101, + 32, + 111, + 114, + 32, + 109, + 111, + 114, + 115, + 101, + 32, + 99, + 111, + 100, + 101, + 32, + 45, + 32, + 111, + 114, + 32, + 105, + 116, + 32, + 109, + 97, + 121, + 32, + 98, + 101, + 32, + 97, + 32, + 115, + 121, + 115, + 116, + 101, + 109, + 32, + 116, + 104, + 97, + 116, + 44, + 32, + 119, + 104, + 105, + 108, + 101, + 32, + 116, + 101, + 99, + 104, + 110, + 105, + 99, + 97, + 108, + 108, + 121, + 32, + 104, + 117, + 109, + 97, + 110, + 45, + 114, + 101, + 97, + 100, + 97, + 98, + 108, + 101, + 44, + 32, + 105, + 115, + 110, + 92, + 39, + 116, + 32, + 112, + 97, + 114, + 116, + 105, + 99, + 117, + 108, + 97, + 114, + 108, + 121, + 32, + 111, + 112, + 116, + 105, + 109, + 105, + 122, + 101, + 100, + 32, + 102, + 111, + 114, + 32, + 114, + 101, + 97, + 100, + 105, + 110, + 103, + 32, + 98, + 121, + 32, + 104, + 117, + 109, + 97, + 110, + 115, + 44, + 32, + 97, + 115, + 32, + 119, + 105, + 116, + 104, + 32, + 98, + 97, + 114, + 99, + 111, + 100, + 101, + 115, + 32, + 40, + 97, + 108, + 116, + 104, + 111, + 117, + 103, + 104, + 32, + 98, + 97, + 114, + 99, + 111, + 100, + 101, + 115, + 32, + 99, + 97, + 110, + 32, + 98, + 101, + 32, + 114, + 101, + 97, + 100, + 41, + 46 + ], + "text": "When we at WRT talk about \\\"text,\\\" we are generally talking about a particular kind of readable information encoding - and readable is a complex proposition. Text may be stylized in a way we are unfamiliar with, as in blackletter - it may be interspersed with some markup we don\\'t understand, such as HTML - it may be be a substitution system we aren\\'t familiar with, such as braille or morse code - or it may be a system that, while technically human-readable, isn\\'t particularly optimized for reading by humans, as with barcodes (although barcodes can be read)." + } + ], + "version": 19, + "location": { + "topRightCorner": { + "x": 387.99999999999994, + "y": 16.000000000000004 + }, + "topLeftCorner": { + "x": 16.000000000000004, + "y": 16.000000000000004 + }, + "bottomRightCorner": { + "x": 387.99999999999994, + "y": 387.99999999999994 + }, + "bottomLeftCorner": { + "x": 16.000000000000004, + "y": 387.99999999999994 + }, + "topRightFinderPattern": { + "x": 374, + "y": 30 + }, + "topLeftFinderPattern": { + "x": 30, + "y": 30 + }, + "bottomLeftFinderPattern": { + "x": 30, + "y": 374 + }, + "bottomRightAlignmentPattern": { + "x": 362, + "y": 362 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/165/input.png b/jsQR/tests/end-to-end/165/input.png new file mode 100755 index 0000000000000000000000000000000000000000..3379b177711b426cc269f421a78b99b11c53eb91 Binary files /dev/null and b/jsQR/tests/end-to-end/165/input.png differ diff --git a/jsQR/tests/end-to-end/165/output.json b/jsQR/tests/end-to-end/165/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ff0abecd59fbe28e0e8f87ebfc0af3e2975c3243 --- /dev/null +++ b/jsQR/tests/end-to-end/165/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 186.79023267431245, + "y": 52.84477921454826 + }, + "topLeftCorner": { + "x": 62.16492979550765, + "y": 62.48550692341947 + }, + "bottomRightCorner": { + "x": 188.65463728249023, + "y": 192.8316079313466 + }, + "bottomLeftCorner": { + "x": 61.20436689970783, + "y": 193.263621261744 + }, + "topRightFinderPattern": { + "x": 171, + "y": 70.5 + }, + "topLeftFinderPattern": { + "x": 76.25, + "y": 77 + }, + "bottomLeftFinderPattern": { + "x": 75.75, + "y": 177 + }, + "bottomRightAlignmentPattern": { + "x": 158.25, + "y": 161.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/166/input.png b/jsQR/tests/end-to-end/166/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e8e208ef9032ff5e0c4076cbd2e59895ba46f945 Binary files /dev/null and b/jsQR/tests/end-to-end/166/input.png differ diff --git a/jsQR/tests/end-to-end/166/output.json b/jsQR/tests/end-to-end/166/output.json new file mode 100644 index 0000000000000000000000000000000000000000..3b058c59f0a18da4552376f1437b6bdb296d4129 --- /dev/null +++ b/jsQR/tests/end-to-end/166/output.json @@ -0,0 +1,114 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 131, + 130, + 131, + 111, + 131, + 67, + 131, + 139, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 106, + 112 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 131, + 130, + 131, + 111, + 131, + 67, + 131, + 139, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 106, + 112 + ], + "text": "" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 76.96552221581074, + "y": -0.29428736295441493 + }, + "topLeftCorner": { + "x": -0.17685102490053076, + "y": -0.42685102490053123 + }, + "bottomRightCorner": { + "x": 76.76928708300805, + "y": 76.51928708300807 + }, + "bottomLeftCorner": { + "x": -0.14914413538222168, + "y": 77.4794787006419 + }, + "topRightFinderPattern": { + "x": 67.75, + "y": 9 + }, + "topLeftFinderPattern": { + "x": 9.25, + "y": 9 + }, + "bottomLeftFinderPattern": { + "x": 9.25, + "y": 68 + }, + "bottomRightAlignmentPattern": { + "x": 59.75, + "y": 59.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/167/input.png b/jsQR/tests/end-to-end/167/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e96bb813e075bec445f5a2ebd55f4b7f37a7c77b Binary files /dev/null and b/jsQR/tests/end-to-end/167/input.png differ diff --git a/jsQR/tests/end-to-end/167/output.json b/jsQR/tests/end-to-end/167/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8b36ac72847d1eb5d58af4061342abd47308cf5e --- /dev/null +++ b/jsQR/tests/end-to-end/167/output.json @@ -0,0 +1,604 @@ +{ + "binaryData": [ + 66, + 69, + 71, + 73, + 78, + 58, + 86, + 67, + 65, + 82, + 68, + 13, + 10, + 78, + 58, + 75, + 101, + 110, + 110, + 101, + 100, + 121, + 59, + 83, + 116, + 101, + 118, + 101, + 13, + 10, + 84, + 69, + 76, + 58, + 43, + 52, + 52, + 32, + 40, + 48, + 41, + 55, + 55, + 55, + 53, + 32, + 55, + 53, + 53, + 53, + 48, + 51, + 13, + 10, + 65, + 68, + 82, + 59, + 72, + 79, + 77, + 69, + 58, + 59, + 59, + 70, + 108, + 97, + 116, + 32, + 50, + 44, + 32, + 52, + 51, + 32, + 72, + 111, + 119, + 105, + 116, + 116, + 32, + 82, + 111, + 97, + 100, + 44, + 32, + 66, + 101, + 108, + 115, + 105, + 122, + 101, + 32, + 80, + 97, + 114, + 107, + 59, + 76, + 111, + 110, + 100, + 111, + 110, + 59, + 59, + 78, + 87, + 51, + 52, + 76, + 85, + 59, + 85, + 75, + 13, + 10, + 79, + 82, + 71, + 58, + 78, + 101, + 116, + 84, + 101, + 107, + 32, + 76, + 116, + 100, + 59, + 13, + 10, + 84, + 73, + 84, + 76, + 69, + 58, + 67, + 111, + 110, + 115, + 117, + 108, + 116, + 97, + 110, + 116, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 85, + 82, + 76, + 58, + 119, + 119, + 119, + 46, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 59, + 73, + 77, + 58, + 77, + 83, + 78, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 103, + 98, + 110, + 101, + 116, + 46, + 110, + 101, + 116, + 13, + 10, + 78, + 79, + 84, + 69, + 58, + 84, + 101, + 115, + 116, + 105, + 110, + 103, + 32, + 49, + 32, + 50, + 32, + 51, + 13, + 10, + 66, + 68, + 65, + 89, + 58, + 49, + 57, + 54, + 49, + 49, + 49, + 48, + 53, + 13, + 10, + 69, + 78, + 68, + 58, + 86, + 67, + 65, + 82, + 68 + ], + "data": "BEGIN:VCARD\r\nN:Kennedy;Steve\r\nTEL:+44 (0)7775 755503\r\nADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\r\nORG:NetTek Ltd;\r\nTITLE:Consultant\r\nEMAIL:steve@nettek.co.uk\r\nURL:www.nettek.co.uk\r\nEMAIL;IM:MSN:steve@gbnet.net\r\nNOTE:Testing 1 2 3\r\nBDAY:19611105\r\nEND:VCARD", + "chunks": [ + { + "type": "byte", + "bytes": [ + 66, + 69, + 71, + 73, + 78, + 58, + 86, + 67, + 65, + 82, + 68, + 13, + 10, + 78, + 58, + 75, + 101, + 110, + 110, + 101, + 100, + 121, + 59, + 83, + 116, + 101, + 118, + 101, + 13, + 10, + 84, + 69, + 76, + 58, + 43, + 52, + 52, + 32, + 40, + 48, + 41, + 55, + 55, + 55, + 53, + 32, + 55, + 53, + 53, + 53, + 48, + 51, + 13, + 10, + 65, + 68, + 82, + 59, + 72, + 79, + 77, + 69, + 58, + 59, + 59, + 70, + 108, + 97, + 116, + 32, + 50, + 44, + 32, + 52, + 51, + 32, + 72, + 111, + 119, + 105, + 116, + 116, + 32, + 82, + 111, + 97, + 100, + 44, + 32, + 66, + 101, + 108, + 115, + 105, + 122, + 101, + 32, + 80, + 97, + 114, + 107, + 59, + 76, + 111, + 110, + 100, + 111, + 110, + 59, + 59, + 78, + 87, + 51, + 52, + 76, + 85, + 59, + 85, + 75, + 13, + 10, + 79, + 82, + 71, + 58, + 78, + 101, + 116, + 84, + 101, + 107, + 32, + 76, + 116, + 100, + 59, + 13, + 10, + 84, + 73, + 84, + 76, + 69, + 58, + 67, + 111, + 110, + 115, + 117, + 108, + 116, + 97, + 110, + 116, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 85, + 82, + 76, + 58, + 119, + 119, + 119, + 46, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 59, + 73, + 77, + 58, + 77, + 83, + 78, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 103, + 98, + 110, + 101, + 116, + 46, + 110, + 101, + 116, + 13, + 10, + 78, + 79, + 84, + 69, + 58, + 84, + 101, + 115, + 116, + 105, + 110, + 103, + 32, + 49, + 32, + 50, + 32, + 51, + 13, + 10, + 66, + 68, + 65, + 89, + 58, + 49, + 57, + 54, + 49, + 49, + 49, + 48, + 53, + 13, + 10, + 69, + 78, + 68, + 58, + 86, + 67, + 65, + 82, + 68 + ], + "text": "BEGIN:VCARD\r\nN:Kennedy;Steve\r\nTEL:+44 (0)7775 755503\r\nADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\r\nORG:NetTek Ltd;\r\nTITLE:Consultant\r\nEMAIL:steve@nettek.co.uk\r\nURL:www.nettek.co.uk\r\nEMAIL;IM:MSN:steve@gbnet.net\r\nNOTE:Testing 1 2 3\r\nBDAY:19611105\r\nEND:VCARD" + } + ], + "version": 12, + "location": { + "topRightCorner": { + "x": 130, + "y": 0 + }, + "topLeftCorner": { + "x": 0, + "y": 0 + }, + "bottomRightCorner": { + "x": 130, + "y": 130 + }, + "bottomLeftCorner": { + "x": 0, + "y": 130 + }, + "topRightFinderPattern": { + "x": 123, + "y": 7 + }, + "topLeftFinderPattern": { + "x": 7, + "y": 7 + }, + "bottomLeftFinderPattern": { + "x": 7, + "y": 123 + }, + "bottomRightAlignmentPattern": { + "x": 117, + "y": 117 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/168/input.png b/jsQR/tests/end-to-end/168/input.png new file mode 100755 index 0000000000000000000000000000000000000000..230a352b375f93c473c535f1b9878b3a520da73a Binary files /dev/null and b/jsQR/tests/end-to-end/168/input.png differ diff --git a/jsQR/tests/end-to-end/168/output.json b/jsQR/tests/end-to-end/168/output.json new file mode 100644 index 0000000000000000000000000000000000000000..31db58f796d71605c10da4708e4c840ab207bd15 --- /dev/null +++ b/jsQR/tests/end-to-end/168/output.json @@ -0,0 +1,102 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 98, + 99, + 46, + 99, + 111, + 46, + 117, + 107, + 47, + 112, + 114, + 111, + 103, + 114, + 97, + 109, + 109, + 101, + 115 + ], + "data": "http://bbc.co.uk/programmes", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 98, + 99, + 46, + 99, + 111, + 46, + 117, + 107, + 47, + 112, + 114, + 111, + 103, + 114, + 97, + 109, + 109, + 101, + 115 + ], + "text": "http://bbc.co.uk/programmes" + } + ], + "version": 5, + "location": { + "topRightCorner": { + "x": 418, + "y": 11 + }, + "topLeftCorner": { + "x": 11, + "y": 11 + }, + "bottomRightCorner": { + "x": 418, + "y": 418 + }, + "bottomLeftCorner": { + "x": 11, + "y": 418 + }, + "topRightFinderPattern": { + "x": 379.5, + "y": 49.5 + }, + "topLeftFinderPattern": { + "x": 49.5, + "y": 49.5 + }, + "bottomLeftFinderPattern": { + "x": 49.5, + "y": 379.5 + }, + "bottomRightAlignmentPattern": { + "x": 346.5, + "y": 346.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/169/input.png b/jsQR/tests/end-to-end/169/input.png new file mode 100755 index 0000000000000000000000000000000000000000..5ff1520734f19ec4f867b1c53ff118ef873d6719 Binary files /dev/null and b/jsQR/tests/end-to-end/169/input.png differ diff --git a/jsQR/tests/end-to-end/169/output.json b/jsQR/tests/end-to-end/169/output.json new file mode 100644 index 0000000000000000000000000000000000000000..3b2f298e0ea2e3c50d548ce46bbf93ad100b58a3 --- /dev/null +++ b/jsQR/tests/end-to-end/169/output.json @@ -0,0 +1,246 @@ +{ + "binaryData": [ + 73, + 110, + 32, + 50, + 53, + 32, + 119, + 111, + 114, + 100, + 115, + 32, + 111, + 114, + 32, + 108, + 101, + 115, + 115, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 99, + 111, + 109, + 109, + 101, + 110, + 116, + 115, + 44, + 32, + 98, + 101, + 108, + 111, + 119, + 44, + 32, + 116, + 101, + 108, + 108, + 32, + 117, + 115, + 32, + 104, + 111, + 119, + 32, + 81, + 82, + 32, + 99, + 111, + 100, + 101, + 115, + 32, + 119, + 105, + 108, + 108, + 32, + 109, + 97, + 107, + 101, + 32, + 116, + 104, + 101, + 32, + 119, + 111, + 114, + 108, + 100, + 32, + 108, + 101, + 115, + 115, + 32, + 111, + 114, + 100, + 105, + 110, + 97, + 114, + 121, + 46 + ], + "data": "In 25 words or less in the comments, below, tell us how QR codes will make the world less ordinary.", + "chunks": [ + { + "type": "byte", + "bytes": [ + 73, + 110, + 32, + 50, + 53, + 32, + 119, + 111, + 114, + 100, + 115, + 32, + 111, + 114, + 32, + 108, + 101, + 115, + 115, + 32, + 105, + 110, + 32, + 116, + 104, + 101, + 32, + 99, + 111, + 109, + 109, + 101, + 110, + 116, + 115, + 44, + 32, + 98, + 101, + 108, + 111, + 119, + 44, + 32, + 116, + 101, + 108, + 108, + 32, + 117, + 115, + 32, + 104, + 111, + 119, + 32, + 81, + 82, + 32, + 99, + 111, + 100, + 101, + 115, + 32, + 119, + 105, + 108, + 108, + 32, + 109, + 97, + 107, + 101, + 32, + 116, + 104, + 101, + 32, + 119, + 111, + 114, + 108, + 100, + 32, + 108, + 101, + 115, + 115, + 32, + 111, + 114, + 100, + 105, + 110, + 97, + 114, + 121, + 46 + ], + "text": "In 25 words or less in the comments, below, tell us how QR codes will make the world less ordinary." + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 471.4926470588235, + "y": 39.00735294117645 + }, + "topLeftCorner": { + "x": 167.05340827156084, + "y": 39.05340827156083 + }, + "bottomRightCorner": { + "x": 471.9878518944608, + "y": 343.9878518944608 + }, + "bottomLeftCorner": { + "x": 167.00735294117644, + "y": 343.49264705882354 + }, + "topRightFinderPattern": { + "x": 445.5, + "y": 65 + }, + "topLeftFinderPattern": { + "x": 193, + "y": 65 + }, + "bottomLeftFinderPattern": { + "x": 193, + "y": 317.5 + }, + "bottomRightAlignmentPattern": { + "x": 423.5, + "y": 295.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/17/input.png b/jsQR/tests/end-to-end/17/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d34332850c55eb7a9445b88d2867defdb7fd7383 Binary files /dev/null and b/jsQR/tests/end-to-end/17/input.png differ diff --git a/jsQR/tests/end-to-end/17/output.json b/jsQR/tests/end-to-end/17/output.json new file mode 100644 index 0000000000000000000000000000000000000000..270f6537388f0c581633e1261f7c754b14d0085b --- /dev/null +++ b/jsQR/tests/end-to-end/17/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 182.32240715577325, + "y": 95.05637709467882 + }, + "topLeftCorner": { + "x": 59.19265289178541, + "y": 94.00034331314177 + }, + "bottomRightCorner": { + "x": 179.98948691556257, + "y": 214.13708534771794 + }, + "bottomLeftCorner": { + "x": 61.70610469746573, + "y": 211.45110896694555 + }, + "topRightFinderPattern": { + "x": 171.5, + "y": 105.5 + }, + "topLeftFinderPattern": { + "x": 69.75, + "y": 104.5 + }, + "bottomLeftFinderPattern": { + "x": 71.5, + "y": 202 + }, + "bottomRightAlignmentPattern": { + "x": 161.25, + "y": 195.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/170/input.png b/jsQR/tests/end-to-end/170/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d0effb7838763f16a12c7f3cb4d9ad6c36816d92 Binary files /dev/null and b/jsQR/tests/end-to-end/170/input.png differ diff --git a/jsQR/tests/end-to-end/170/output.json b/jsQR/tests/end-to-end/170/output.json new file mode 100644 index 0000000000000000000000000000000000000000..695ea3911555b0fe3be3e73168ccc39c1cc0d752 --- /dev/null +++ b/jsQR/tests/end-to-end/170/output.json @@ -0,0 +1,178 @@ +{ + "binaryData": [ + 91, + 147, + 224, + 145, + 164, + 81, + 82, + 131, + 82, + 129, + 91, + 131, + 104, + 93, + 13, + 10, + 13, + 10, + 42, + 131, + 95, + 131, + 117, + 131, + 139, + 81, + 82, + 42, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47 + ], + "data": "[内å´QRコード]\r\n\r\n*ダブルQR*\r\nhttp://d-qr.net/ex/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 91 + ], + "text": "[" + }, + { + "type": "kanji", + "bytes": [ + 147, + 224, + 145, + 164 + ], + "text": "内å´" + }, + { + "type": "alphanumeric", + "text": "QR" + }, + { + "type": "kanji", + "bytes": [ + 131, + 82, + 129, + 91, + 131, + 104 + ], + "text": "コード" + }, + { + "type": "byte", + "bytes": [ + 93, + 13, + 10, + 13, + 10, + 42 + ], + "text": "]\r\n\r\n*" + }, + { + "type": "kanji", + "bytes": [ + 131, + 95, + 131, + 117, + 131, + 139 + ], + "text": "ダブル" + }, + { + "type": "byte", + "bytes": [ + 81, + 82, + 42, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47 + ], + "text": "QR*\r\nhttp://d-qr.net/ex/" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 180.0839301059868, + "y": 117.3829848181037 + }, + "topLeftCorner": { + "x": 117.34524083890298, + "y": 117.34524083890298 + }, + "bottomRightCorner": { + "x": 180.519972131909, + "y": 180.519972131909 + }, + "bottomLeftCorner": { + "x": 116.9375182481752, + "y": 180.84671532846716 + }, + "topRightFinderPattern": { + "x": 173.5, + "y": 124 + }, + "topLeftFinderPattern": { + "x": 124, + "y": 124 + }, + "bottomLeftFinderPattern": { + "x": 123.75, + "y": 174 + }, + "bottomRightAlignmentPattern": { + "x": 168, + "y": 168 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/171/input.png b/jsQR/tests/end-to-end/171/input.png new file mode 100644 index 0000000000000000000000000000000000000000..f464e3f63bac1e28daca25b8f493ed656e4dcfc1 Binary files /dev/null and b/jsQR/tests/end-to-end/171/input.png differ diff --git a/jsQR/tests/end-to-end/171/output.json b/jsQR/tests/end-to-end/171/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/171/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/172/input.png b/jsQR/tests/end-to-end/172/input.png new file mode 100755 index 0000000000000000000000000000000000000000..33e42cbd0116ec3c809332b7ccb7fd7c73b85f33 Binary files /dev/null and b/jsQR/tests/end-to-end/172/input.png differ diff --git a/jsQR/tests/end-to-end/172/output.json b/jsQR/tests/end-to-end/172/output.json new file mode 100644 index 0000000000000000000000000000000000000000..710065d52d71b27e0ffe737f694d1bee93ef376e --- /dev/null +++ b/jsQR/tests/end-to-end/172/output.json @@ -0,0 +1,106 @@ +{ + "binaryData": [ + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47 + ], + "text": "" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 200.04411764705884, + "y": 17.95588235294117 + }, + "topLeftCorner": { + "x": 17.926615335160037, + "y": 17.926615335160037 + }, + "bottomRightCorner": { + "x": 199.7317188476965, + "y": 199.7317188476965 + }, + "bottomLeftCorner": { + "x": 17.95588235294117, + "y": 200.04411764705884 + }, + "topRightFinderPattern": { + "x": 184.5, + "y": 33.5 + }, + "topLeftFinderPattern": { + "x": 33.5, + "y": 33.5 + }, + "bottomLeftFinderPattern": { + "x": 33.5, + "y": 184.5 + }, + "bottomRightAlignmentPattern": { + "x": 171, + "y": 171 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/173/input.png b/jsQR/tests/end-to-end/173/input.png new file mode 100755 index 0000000000000000000000000000000000000000..13d65cb4dc38f2a0257d37b251de797d9e749294 Binary files /dev/null and b/jsQR/tests/end-to-end/173/input.png differ diff --git a/jsQR/tests/end-to-end/173/output.json b/jsQR/tests/end-to-end/173/output.json new file mode 100644 index 0000000000000000000000000000000000000000..dfd6fc42d217adbfdc4c8dc9bc64ad001a7a0bc9 --- /dev/null +++ b/jsQR/tests/end-to-end/173/output.json @@ -0,0 +1,134 @@ +{ + "binaryData": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 32, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 32, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "text": "" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 200.04411764705884, + "y": 17.95588235294117 + }, + "topLeftCorner": { + "x": 17.926615335160037, + "y": 17.926615335160037 + }, + "bottomRightCorner": { + "x": 199.7317188476965, + "y": 199.7317188476965 + }, + "bottomLeftCorner": { + "x": 17.95588235294117, + "y": 200.04411764705884 + }, + "topRightFinderPattern": { + "x": 184.5, + "y": 33.5 + }, + "topLeftFinderPattern": { + "x": 33.5, + "y": 33.5 + }, + "bottomLeftFinderPattern": { + "x": 33.5, + "y": 184.5 + }, + "bottomRightAlignmentPattern": { + "x": 171, + "y": 171 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/174/input.png b/jsQR/tests/end-to-end/174/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ec1df043c4eb9dace7edcdbd09600926f5c7d8e8 Binary files /dev/null and b/jsQR/tests/end-to-end/174/input.png differ diff --git a/jsQR/tests/end-to-end/174/output.json b/jsQR/tests/end-to-end/174/output.json new file mode 100644 index 0000000000000000000000000000000000000000..0bc54dc8c9f429d1b399015d3b64a73776362323 --- /dev/null +++ b/jsQR/tests/end-to-end/174/output.json @@ -0,0 +1,136 @@ +{ + "binaryData": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "text": "" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 199.8429904959977, + "y": 16.88132088704021 + }, + "topLeftCorner": { + "x": 16.870087585284896, + "y": 16.870087585284896 + }, + "bottomRightCorner": { + "x": 200.0548330924678, + "y": 200.0548330924678 + }, + "bottomLeftCorner": { + "x": 16.850287140468623, + "y": 200.17549492355036 + }, + "topRightFinderPattern": { + "x": 184.25, + "y": 32.5 + }, + "topLeftFinderPattern": { + "x": 32.5, + "y": 32.5 + }, + "bottomLeftFinderPattern": { + "x": 32.5, + "y": 184.5 + }, + "bottomRightAlignmentPattern": { + "x": 171, + "y": 171 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/175/input.png b/jsQR/tests/end-to-end/175/input.png new file mode 100755 index 0000000000000000000000000000000000000000..18f1f8ad7a65e1882e637325dd6930445583acef Binary files /dev/null and b/jsQR/tests/end-to-end/175/input.png differ diff --git a/jsQR/tests/end-to-end/175/output.json b/jsQR/tests/end-to-end/175/output.json new file mode 100644 index 0000000000000000000000000000000000000000..23ea5523fcc82425aa68bcf12d4617da6310095d --- /dev/null +++ b/jsQR/tests/end-to-end/175/output.json @@ -0,0 +1,2098 @@ +{ + "binaryData": [ + 76, + 65, + 78, + 68, + 66, + 89, + 65, + 83, + 67, + 65, + 82, + 67, + 32, + 32, + 32, + 80, + 69, + 82, + 67, + 69, + 80, + 84, + 73, + 66, + 76, + 69, + 67, + 32, + 69, + 69, + 75, + 44, + 79, + 79, + 90, + 73, + 32, + 71, + 73, + 84, + 83, + 87, + 65, + 89, + 84, + 72, + 82, + 79, + 85, + 32, + 32, + 65, + 87, + 73, + 76, + 68, + 69, + 82, + 78, + 69, + 83, + 83, + 79, + 70, + 66, + 69, + 83, + 85, + 80, + 80, + 79, + 83, + 69, + 68, + 44, + 73, + 32, + 32, + 67, + 65, + 78, + 84, + 44, + 79, + 82, + 65, + 84, + 76, + 32, + 65, + 83, + 84, + 68, + 87, + 65, + 82, + 70, + 73, + 83, + 72, + 46, + 78, + 79, + 32, + 82, + 69, + 69, + 83, + 79, + 70, + 65, + 78, + 89, + 77, + 32, + 32, + 78, + 73, + 84, + 85, + 68, + 69, + 65, + 82, + 69, + 84, + 79, + 66, + 69, + 83, + 79, + 77, + 69, + 77, + 73, + 83, + 69, + 82, + 65, + 32, + 32, + 69, + 70, + 82, + 65, + 77, + 69, + 66, + 85, + 73, + 76, + 32, + 73, + 32, + 71, + 83, + 44, + 84, + 69, + 78, + 65, + 78, + 84, + 69, + 68, + 44, + 32, + 85, + 32, + 73, + 78, + 71, + 83, + 85, + 77, + 77, + 69, + 82, + 32, + 32, + 32, + 84, + 72, + 69, + 70, + 85, + 71, + 73, + 84, + 73, + 86, + 69, + 59, + 66, + 85, + 84, + 84, + 72, + 69, + 87, + 72, + 79, + 32, + 32, + 73, + 83, + 76, + 65, + 78, + 68, + 44, + 87, + 73, + 32, + 72, + 32, + 32, + 32, + 69, + 88, + 67, + 69, + 80, + 84, + 73, + 79, + 78, + 79, + 70, + 84, + 32, + 32, + 32, + 87, + 32, + 83, + 84, + 69, + 82, + 78, + 80, + 79, + 73, + 32, + 32, + 44, + 65, + 78, + 68, + 65, + 76, + 73, + 78, + 69, + 79, + 70, + 76, + 76, + 73, + 65, + 77, + 76, + 69, + 71, + 82, + 32, + 32, + 32, + 46, + 72, + 69, + 87, + 65, + 83, + 79, + 70, + 32, + 78, + 32, + 32, + 32, + 32, + 69, + 78, + 84, + 72, + 85, + 71, + 85, + 69, + 78, + 79, + 84, + 70, + 32, + 32, + 32, + 32, + 89, + 32, + 65, + 78, + 68, + 72, + 65, + 68, + 79, + 78, + 32, + 32, + 66, + 69, + 69, + 78, + 87, + 69, + 65, + 76, + 84, + 72, + 84, + 73, + 79, + 78, + 67, + 79, + 78, + 83, + 69, + 32, + 32, + 69, + 78, + 84, + 85, + 80, + 79, + 78, + 72, + 32, + 83, + 68, + 32, + 32, + 32, + 83, + 84, + 69, + 82, + 83, + 44, + 72, + 69, + 76, + 69, + 70, + 84, + 78, + 69, + 32, + 32, + 32, + 76, + 69, + 32, + 78, + 83, + 44, + 84, + 72, + 69, + 67, + 32, + 32, + 32, + 79, + 70, + 72, + 73, + 83, + 70, + 79, + 82, + 69, + 79, + 85, + 84, + 72, + 67, + 65, + 82, + 79, + 32, + 32, + 32, + 65, + 46, + 84, + 72, + 73, + 83, + 73, + 83, + 76, + 65, + 32, + 32, + 32, + 32, + 65, + 86, + 69, + 82, + 89, + 83, + 73, + 78, + 71, + 85, + 76, + 65, + 82, + 79, + 32, + 32, + 32, + 32, + 84, + 67, + 79, + 78, + 83, + 73, + 83, + 84, + 83, + 79, + 32, + 32, + 73, + 84, + 84, + 76, + 69, + 69, + 76, + 83, + 69, + 68, + 83, + 65, + 81, + 85, + 65, + 82, + 84, + 32, + 32, + 32, + 70, + 65, + 77, + 73, + 76, + 69, + 46, + 32, + 84, + 73, + 32, + 32, + 32, + 80, + 65, + 82, + 65, + 84, + 69, + 68, + 70, + 82, + 79, + 77, + 84, + 72, + 69, + 77, + 65, + 32, + 32, + 32, + 65, + 78, + 32, + 66, + 89, + 65, + 83, + 67, + 65, + 82, + 32, + 32, + 32, + 89, + 80, + 69, + 82, + 67, + 69, + 80, + 84, + 69, + 82, + 69, + 83, + 79, + 82, + 84, + 32, + 32, + 32, + 32, + 32, + 77, + 65, + 82, + 83, + 72, + 32, + 69, + 78, + 32, + 32, + 32, + 69, + 86, + 69, + 71, + 69, + 84, + 65, + 84, + 73, + 79, + 78, + 44, + 65, + 83, + 77, + 73, + 71, + 72, + 32, + 32, + 32, + 83, + 85, + 32, + 80, + 79, + 83, + 69, + 68, + 44, + 32, + 32, + 32, + 67, + 65, + 78, + 84, + 44, + 79, + 82, + 65, + 84, + 82, + 69, + 77, + 73, + 84, + 89, + 44, + 32, + 32, + 32, + 32, + 32, + 32, + 79, + 82, + 84, + 32, + 79, + 85, + 76, + 84, + 82, + 73, + 69, + 83, + 84, + 65, + 78, + 68, + 83, + 44, + 65, + 78, + 68, + 87, + 72, + 69, + 82, + 69, + 65, + 82, + 69, + 83, + 79, + 77, + 32, + 77, + 73, + 83, + 32, + 32, + 32, + 32, + 32, + 32, + 70, + 82, + 65, + 77, + 69, + 66, + 85, + 73, + 70, + 69, + 86, + 69, + 82, + 44, + 77, + 65, + 89, + 66, + 69, + 32, + 32, + 32, + 32, + 32, + 32, + 73, + 78, + 68, + 69, + 69, + 68, + 44, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 84, + 79, + 59, + 66, + 85, + 84, + 84, + 32, + 32, + 32, + 32, + 32, + 32, + 69, + 73, + 83, + 76, + 65, + 78, + 68, + 44, + 87, + 73, + 84, + 78, + 89, + 89, + 69, + 65, + 82, + 83, + 65, + 71, + 79, + 44, + 73, + 67, + 32, + 32, + 32, + 32, + 65, + 67, + 84, + 69, + 68, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 76, + 76, + 73, + 65, + 77, + 32, + 32, + 32, + 32, + 65, + 78, + 68, + 46, + 72, + 69, + 87, + 65, + 83, + 79, + 70, + 65, + 78, + 78, + 69, + 83, + 72, + 65, + 68, + 82, + 69, + 68, + 85, + 67, + 69, + 68, + 72, + 73, + 77, + 32, + 79, + 87, + 65, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 73, + 79, + 78, + 67, + 32, + 78, + 83, + 69, + 81, + 85, + 69, + 78, + 84, + 85, + 80, + 79, + 78, + 72, + 73, + 83, + 68, + 83, + 73, + 68, + 69, + 78, + 67, + 69, + 65, + 84, + 83, + 85, + 76, + 76, + 73, + 86, + 65, + 32, + 92, + 39, + 83, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 72, + 67, + 32, + 82, + 79, + 76, + 73, + 78, + 65, + 46, + 84, + 72, + 73, + 83, + 73, + 83, + 76, + 65, + 78, + 79, + 85, + 84, + 84, + 72, + 82, + 32, + 32, + 32, + 32, + 76, + 69, + 83, + 76, + 79, + 78, + 32, + 46, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 84, + 72, + 65, + 84, + 78, + 32, + 32, + 79, + 73, + 78, + 84, + 69, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 85, + 32, + 82, + 84, + 69, + 82, + 79, + 70, + 32, + 32, + 32, + 32, + 69, + 46, + 73, + 84, + 73, + 83, + 84, + 72, + 82, + 79, + 85, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 69, + 82, + 78, + 69, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 68, + 83, + 65, + 78, + 68, + 83, + 76, + 73, + 32, + 32, + 44, + 65, + 70, + 65, + 86, + 79, + 82, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 84, + 79, + 70, + 84, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 72, + 69, + 78, + 46, + 84 + ], + "data": "LANDBYASCARC PERCEPTIBLEC EEK,OOZI GITSWAYTHROU AWILDERNESSOFBESUPPOSED,I CANT,ORATL ASTDWARFISH.NO REESOFANYM NITUDEARETOBESOMEMISERA EFRAMEBUIL I GS,TENANTED, U INGSUMMER THEFUGITIVE;BUTTHEWHO ISLAND,WI H EXCEPTIONOFT W STERNPOI ,ANDALINEOFLLIAMLEGR .HEWASOF N ENTHUGUENOTF Y ANDHADON BEENWEALTHTIONCONSE ENTUPONH SD STERS,HELEFTNE LE NS,THEC OFHISFOREOUTHCARO A.THISISLA AVERYSINGULARO TCONSISTSO ITTLEELSEDSAQUART FAMILE. TI PARATEDFROMTHEMA AN BYASCAR YPERCEPTERESORT MARSH EN EVEGETATION,ASMIGH SU POSED, CANT,ORATREMITY, ORT OULTRIESTANDS,ANDWHEREARESOM MIS FRAMEBUIFEVER,MAYBE INDEED, TO;BUTT EISLAND,WITNYYEARSAGO,IC ACTED LLIAM AND.HEWASOFANNESHADREDUCEDHIM OWA IONC NSEQUENTUPONHISDSIDENCEATSULLIVA \\'S HC ROLINA.THISISLANOUTTHR LESLON . THATN OINTE U RTEROF E.ITISTHROU ERNE DSANDSLI ,AFAVOR TOFT HEN.T", + "chunks": [ + { + "type": "byte", + "bytes": [ + 76, + 65, + 78, + 68, + 66, + 89, + 65, + 83, + 67, + 65, + 82, + 67, + 32, + 32, + 32, + 80, + 69, + 82, + 67, + 69, + 80, + 84, + 73, + 66, + 76, + 69, + 67, + 32, + 69, + 69, + 75, + 44, + 79, + 79, + 90, + 73, + 32, + 71, + 73, + 84, + 83, + 87, + 65, + 89, + 84, + 72, + 82, + 79, + 85, + 32, + 32, + 65, + 87, + 73, + 76, + 68, + 69, + 82, + 78, + 69, + 83, + 83, + 79, + 70, + 66, + 69, + 83, + 85, + 80, + 80, + 79, + 83, + 69, + 68, + 44, + 73, + 32, + 32, + 67, + 65, + 78, + 84, + 44, + 79, + 82, + 65, + 84, + 76, + 32, + 65, + 83, + 84, + 68, + 87, + 65, + 82, + 70, + 73, + 83, + 72, + 46, + 78, + 79, + 32, + 82, + 69, + 69, + 83, + 79, + 70, + 65, + 78, + 89, + 77, + 32, + 32, + 78, + 73, + 84, + 85, + 68, + 69, + 65, + 82, + 69, + 84, + 79, + 66, + 69, + 83, + 79, + 77, + 69, + 77, + 73, + 83, + 69, + 82, + 65, + 32, + 32, + 69, + 70, + 82, + 65, + 77, + 69, + 66, + 85, + 73, + 76, + 32, + 73, + 32, + 71, + 83, + 44, + 84, + 69, + 78, + 65, + 78, + 84, + 69, + 68, + 44, + 32, + 85, + 32, + 73, + 78, + 71, + 83, + 85, + 77, + 77, + 69, + 82, + 32, + 32, + 32, + 84, + 72, + 69, + 70, + 85, + 71, + 73, + 84, + 73, + 86, + 69, + 59, + 66, + 85, + 84, + 84, + 72, + 69, + 87, + 72, + 79, + 32, + 32, + 73, + 83, + 76, + 65, + 78, + 68, + 44, + 87, + 73, + 32, + 72, + 32, + 32, + 32, + 69, + 88, + 67, + 69, + 80, + 84, + 73, + 79, + 78, + 79, + 70, + 84, + 32, + 32, + 32, + 87, + 32, + 83, + 84, + 69, + 82, + 78, + 80, + 79, + 73, + 32, + 32, + 44, + 65, + 78, + 68, + 65, + 76, + 73, + 78, + 69, + 79, + 70, + 76, + 76, + 73, + 65, + 77, + 76, + 69, + 71, + 82, + 32, + 32, + 32, + 46, + 72, + 69, + 87, + 65, + 83, + 79, + 70, + 32, + 78, + 32, + 32, + 32, + 32, + 69, + 78, + 84, + 72, + 85, + 71, + 85, + 69, + 78, + 79, + 84, + 70, + 32, + 32, + 32, + 32, + 89, + 32, + 65, + 78, + 68, + 72, + 65, + 68, + 79, + 78, + 32, + 32, + 66, + 69, + 69, + 78, + 87, + 69, + 65, + 76, + 84, + 72, + 84, + 73, + 79, + 78, + 67, + 79, + 78, + 83, + 69, + 32, + 32, + 69, + 78, + 84, + 85, + 80, + 79, + 78, + 72, + 32, + 83, + 68, + 32, + 32, + 32, + 83, + 84, + 69, + 82, + 83, + 44, + 72, + 69, + 76, + 69, + 70, + 84, + 78, + 69, + 32, + 32, + 32, + 76, + 69, + 32, + 78, + 83, + 44, + 84, + 72, + 69, + 67, + 32, + 32, + 32, + 79, + 70, + 72, + 73, + 83, + 70, + 79, + 82, + 69, + 79, + 85, + 84, + 72, + 67, + 65, + 82, + 79, + 32, + 32, + 32, + 65, + 46, + 84, + 72, + 73, + 83, + 73, + 83, + 76, + 65, + 32, + 32, + 32, + 32, + 65, + 86, + 69, + 82, + 89, + 83, + 73, + 78, + 71, + 85, + 76, + 65, + 82, + 79, + 32, + 32, + 32, + 32, + 84, + 67, + 79, + 78, + 83, + 73, + 83, + 84, + 83, + 79, + 32, + 32, + 73, + 84, + 84, + 76, + 69, + 69, + 76, + 83, + 69, + 68, + 83, + 65, + 81, + 85, + 65, + 82, + 84, + 32, + 32, + 32, + 70, + 65, + 77, + 73, + 76, + 69, + 46, + 32, + 84, + 73, + 32, + 32, + 32, + 80, + 65, + 82, + 65, + 84, + 69, + 68, + 70, + 82, + 79, + 77, + 84, + 72, + 69, + 77, + 65, + 32, + 32, + 32, + 65, + 78, + 32, + 66, + 89, + 65, + 83, + 67, + 65, + 82, + 32, + 32, + 32, + 89, + 80, + 69, + 82, + 67, + 69, + 80, + 84, + 69, + 82, + 69, + 83, + 79, + 82, + 84, + 32, + 32, + 32, + 32, + 32, + 77, + 65, + 82, + 83, + 72, + 32, + 69, + 78, + 32, + 32, + 32, + 69, + 86, + 69, + 71, + 69, + 84, + 65, + 84, + 73, + 79, + 78, + 44, + 65, + 83, + 77, + 73, + 71, + 72, + 32, + 32, + 32, + 83, + 85, + 32, + 80, + 79, + 83, + 69, + 68, + 44, + 32, + 32, + 32, + 67, + 65, + 78, + 84, + 44, + 79, + 82, + 65, + 84, + 82, + 69, + 77, + 73, + 84, + 89, + 44, + 32, + 32, + 32, + 32, + 32, + 32, + 79, + 82, + 84, + 32, + 79, + 85, + 76, + 84, + 82, + 73, + 69, + 83, + 84, + 65, + 78, + 68, + 83, + 44, + 65, + 78, + 68, + 87, + 72, + 69, + 82, + 69, + 65, + 82, + 69, + 83, + 79, + 77, + 32, + 77, + 73, + 83, + 32, + 32, + 32, + 32, + 32, + 32, + 70, + 82, + 65, + 77, + 69, + 66, + 85, + 73, + 70, + 69, + 86, + 69, + 82, + 44, + 77, + 65, + 89, + 66, + 69, + 32, + 32, + 32, + 32, + 32, + 32, + 73, + 78, + 68, + 69, + 69, + 68, + 44, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 84, + 79, + 59, + 66, + 85, + 84, + 84, + 32, + 32, + 32, + 32, + 32, + 32, + 69, + 73, + 83, + 76, + 65, + 78, + 68, + 44, + 87, + 73, + 84, + 78, + 89, + 89, + 69, + 65, + 82, + 83, + 65, + 71, + 79, + 44, + 73, + 67, + 32, + 32, + 32, + 32, + 65, + 67, + 84, + 69, + 68, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 76, + 76, + 73, + 65, + 77, + 32, + 32, + 32, + 32, + 65, + 78, + 68, + 46, + 72, + 69, + 87, + 65, + 83, + 79, + 70, + 65, + 78, + 78, + 69, + 83, + 72, + 65, + 68, + 82, + 69, + 68, + 85, + 67, + 69, + 68, + 72, + 73, + 77, + 32, + 79, + 87, + 65, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 73, + 79, + 78, + 67, + 32, + 78, + 83, + 69, + 81, + 85, + 69, + 78, + 84, + 85, + 80, + 79, + 78, + 72, + 73, + 83, + 68, + 83, + 73, + 68, + 69, + 78, + 67, + 69, + 65, + 84, + 83, + 85, + 76, + 76, + 73, + 86, + 65, + 32, + 92, + 39, + 83, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 72, + 67, + 32, + 82, + 79, + 76, + 73, + 78, + 65, + 46, + 84, + 72, + 73, + 83, + 73, + 83, + 76, + 65, + 78, + 79, + 85, + 84, + 84, + 72, + 82, + 32, + 32, + 32, + 32, + 76, + 69, + 83, + 76, + 79, + 78, + 32, + 46, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 84, + 72, + 65, + 84, + 78, + 32, + 32, + 79, + 73, + 78, + 84, + 69, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 85, + 32, + 82, + 84, + 69, + 82, + 79, + 70, + 32, + 32, + 32, + 32, + 69, + 46, + 73, + 84, + 73, + 83, + 84, + 72, + 82, + 79, + 85, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 69, + 82, + 78, + 69, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 68, + 83, + 65, + 78, + 68, + 83, + 76, + 73, + 32, + 32, + 44, + 65, + 70, + 65, + 86, + 79, + 82, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 84, + 79, + 70, + 84, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 72, + 69, + 78, + 46, + 84 + ], + "text": "LANDBYASCARC PERCEPTIBLEC EEK,OOZI GITSWAYTHROU AWILDERNESSOFBESUPPOSED,I CANT,ORATL ASTDWARFISH.NO REESOFANYM NITUDEARETOBESOMEMISERA EFRAMEBUIL I GS,TENANTED, U INGSUMMER THEFUGITIVE;BUTTHEWHO ISLAND,WI H EXCEPTIONOFT W STERNPOI ,ANDALINEOFLLIAMLEGR .HEWASOF N ENTHUGUENOTF Y ANDHADON BEENWEALTHTIONCONSE ENTUPONH SD STERS,HELEFTNE LE NS,THEC OFHISFOREOUTHCARO A.THISISLA AVERYSINGULARO TCONSISTSO ITTLEELSEDSAQUART FAMILE. TI PARATEDFROMTHEMA AN BYASCAR YPERCEPTERESORT MARSH EN EVEGETATION,ASMIGH SU POSED, CANT,ORATREMITY, ORT OULTRIESTANDS,ANDWHEREARESOM MIS FRAMEBUIFEVER,MAYBE INDEED, TO;BUTT EISLAND,WITNYYEARSAGO,IC ACTED LLIAM AND.HEWASOFANNESHADREDUCEDHIM OWA IONC NSEQUENTUPONHISDSIDENCEATSULLIVA \\'S HC ROLINA.THISISLANOUTTHR LESLON . THATN OINTE U RTEROF E.ITISTHROU ERNE DSANDSLI ,AFAVOR TOFT HEN.T" + } + ], + "version": 26, + "location": { + "topRightCorner": { + "x": 499.9999999999999, + "y": 15.999999999999996 + }, + "topLeftCorner": { + "x": 15.999999999999996, + "y": 15.999999999999996 + }, + "bottomRightCorner": { + "x": 499.9999999999999, + "y": 499.9999999999999 + }, + "bottomLeftCorner": { + "x": 15.999999999999996, + "y": 499.9999999999999 + }, + "topRightFinderPattern": { + "x": 486, + "y": 30 + }, + "topLeftFinderPattern": { + "x": 30, + "y": 30 + }, + "bottomLeftFinderPattern": { + "x": 30, + "y": 486 + }, + "bottomRightAlignmentPattern": { + "x": 474, + "y": 474 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/176/input.png b/jsQR/tests/end-to-end/176/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1a40424f6e795476614c1ac02bf384ad1b088f73 Binary files /dev/null and b/jsQR/tests/end-to-end/176/input.png differ diff --git a/jsQR/tests/end-to-end/176/output.json b/jsQR/tests/end-to-end/176/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e433c8880ae3b6ce1e6342c04fea4b66ce50836e --- /dev/null +++ b/jsQR/tests/end-to-end/176/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 202.14500930486014, + "y": 47.10925756469705 + }, + "topLeftCorner": { + "x": 75.67524269888371, + "y": 47.699318559097485 + }, + "bottomRightCorner": { + "x": 198.03902549470686, + "y": 173.86321883305175 + }, + "bottomLeftCorner": { + "x": 76.24386448590829, + "y": 174.98790727609315 + }, + "topRightFinderPattern": { + "x": 186.5, + "y": 63 + }, + "topLeftFinderPattern": { + "x": 91, + "y": 63.5 + }, + "bottomLeftFinderPattern": { + "x": 91, + "y": 160 + }, + "bottomRightAlignmentPattern": { + "x": 171.5, + "y": 146.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/177/input.png b/jsQR/tests/end-to-end/177/input.png new file mode 100755 index 0000000000000000000000000000000000000000..0a645ce32300afebf4251cca4584f9eaa89f84ab Binary files /dev/null and b/jsQR/tests/end-to-end/177/input.png differ diff --git a/jsQR/tests/end-to-end/177/output.json b/jsQR/tests/end-to-end/177/output.json new file mode 100644 index 0000000000000000000000000000000000000000..2c5c7c9805a5e06308a56b0d41792f9dfee75bee --- /dev/null +++ b/jsQR/tests/end-to-end/177/output.json @@ -0,0 +1,118 @@ +{ + "binaryData": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32 + ], + "text": "" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 194.12144083731673, + "y": 10.878559162683294 + }, + "topLeftCorner": { + "x": 11.145216256114638, + "y": 10.86699784066457 + }, + "bottomRightCorner": { + "x": 193.9961564012528, + "y": 194.04859068045937 + }, + "bottomLeftCorner": { + "x": 10.827277250579135, + "y": 194.17272274942093 + }, + "topRightFinderPattern": { + "x": 178.5, + "y": 26.5 + }, + "topLeftFinderPattern": { + "x": 26.75, + "y": 26.5 + }, + "bottomLeftFinderPattern": { + "x": 26.5, + "y": 178.5 + }, + "bottomRightAlignmentPattern": { + "x": 165, + "y": 165 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/178/input.png b/jsQR/tests/end-to-end/178/input.png new file mode 100755 index 0000000000000000000000000000000000000000..be83a0ba73e4a6e01a2c0afcbe8b41dd5eff3b13 Binary files /dev/null and b/jsQR/tests/end-to-end/178/input.png differ diff --git a/jsQR/tests/end-to-end/178/output.json b/jsQR/tests/end-to-end/178/output.json new file mode 100644 index 0000000000000000000000000000000000000000..823bc66f232cdc8df8713ac0be4a01395a2c4ba9 --- /dev/null +++ b/jsQR/tests/end-to-end/178/output.json @@ -0,0 +1,130 @@ +{ + "binaryData": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "text": "" + } + ], + "version": 5, + "location": { + "topRightCorner": { + "x": 190.9716594858333, + "y": 10.499229605957714 + }, + "topLeftCorner": { + "x": 11.273574820615943, + "y": 10.523574820615941 + }, + "bottomRightCorner": { + "x": 191.55064362879457, + "y": 190.8006436287946 + }, + "bottomLeftCorner": { + "x": 11.21325736997112, + "y": 190.56596517313358 + }, + "topRightFinderPattern": { + "x": 174, + "y": 27.5 + }, + "topLeftFinderPattern": { + "x": 28.25, + "y": 27.5 + }, + "bottomLeftFinderPattern": { + "x": 28.25, + "y": 173.5 + }, + "bottomRightAlignmentPattern": { + "x": 159.75, + "y": 159 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/179/input.png b/jsQR/tests/end-to-end/179/input.png new file mode 100755 index 0000000000000000000000000000000000000000..083f511fe9e44e3916920113e561a5e11bf9575c Binary files /dev/null and b/jsQR/tests/end-to-end/179/input.png differ diff --git a/jsQR/tests/end-to-end/179/output.json b/jsQR/tests/end-to-end/179/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4ac6524b4362284849187bcb5ce84dba07a19fcf --- /dev/null +++ b/jsQR/tests/end-to-end/179/output.json @@ -0,0 +1,230 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 104, + 111, + 116, + 112, + 101, + 112, + 112, + 101, + 114, + 46, + 106, + 112, + 47, + 109, + 111, + 98, + 105, + 108, + 101, + 47, + 99, + 103, + 105, + 45, + 98, + 105, + 110, + 47, + 77, + 66, + 76, + 67, + 56, + 48, + 49, + 48, + 48, + 46, + 99, + 103, + 105, + 63, + 83, + 65, + 61, + 48, + 48, + 38, + 90, + 61, + 65, + 71, + 38, + 118, + 111, + 115, + 61, + 104, + 112, + 112, + 48, + 54, + 52, + 38, + 117, + 105, + 100, + 61, + 78, + 85, + 76, + 76, + 71, + 87, + 68, + 79, + 67, + 79, + 77, + 79 + ], + "data": "http://www.hotpepper.jp/mobile/cgi-bin/MBLC80100.cgi?SA=00&Z=AG&vos=hpp064&uid=NULLGWDOCOMO", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 104, + 111, + 116, + 112, + 101, + 112, + 112, + 101, + 114, + 46, + 106, + 112, + 47, + 109, + 111, + 98, + 105, + 108, + 101, + 47, + 99, + 103, + 105, + 45, + 98, + 105, + 110, + 47, + 77, + 66, + 76, + 67, + 56, + 48, + 49, + 48, + 48, + 46, + 99, + 103, + 105, + 63, + 83, + 65, + 61, + 48, + 48, + 38, + 90, + 61, + 65, + 71, + 38, + 118, + 111, + 115, + 61, + 104, + 112, + 112, + 48, + 54, + 52, + 38, + 117, + 105, + 100, + 61, + 78, + 85, + 76, + 76, + 71, + 87, + 68, + 79, + 67, + 79, + 77, + 79 + ], + "text": "http://www.hotpepper.jp/mobile/cgi-bin/MBLC80100.cgi?SA=00&Z=AG&vos=hpp064&uid=NULLGWDOCOMO" + } + ], + "version": 9, + "location": { + "topRightCorner": { + "x": 203.0891707521628, + "y": 7.064871319943646 + }, + "topLeftCorner": { + "x": 8.96322137731289, + "y": 8.35417799205117 + }, + "bottomRightCorner": { + "x": 204.76665825429774, + "y": 201.99915178535272 + }, + "bottomLeftCorner": { + "x": 10.387007758675184, + "y": 201.20725974686536 + }, + "topRightFinderPattern": { + "x": 190.25, + "y": 20 + }, + "topLeftFinderPattern": { + "x": 21.75, + "y": 21 + }, + "bottomLeftFinderPattern": { + "x": 23, + "y": 188.5 + }, + "bottomRightAlignmentPattern": { + "x": 180.5, + "y": 178 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/18/input.png b/jsQR/tests/end-to-end/18/input.png new file mode 100755 index 0000000000000000000000000000000000000000..91ba4c09d7ba69ec0e27a70109b211838ac5c43c Binary files /dev/null and b/jsQR/tests/end-to-end/18/input.png differ diff --git a/jsQR/tests/end-to-end/18/output.json b/jsQR/tests/end-to-end/18/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e6ee6eba041b97a911c8651d12426f2ae1f49779 --- /dev/null +++ b/jsQR/tests/end-to-end/18/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 187.2050542536609, + "y": 62.84901167691308 + }, + "topLeftCorner": { + "x": 64.38301549758982, + "y": 62.99841750305081 + }, + "bottomRightCorner": { + "x": 185.83815631335662, + "y": 183.13339374473316 + }, + "bottomLeftCorner": { + "x": 67.79585145570742, + "y": 181.65513769305878 + }, + "topRightFinderPattern": { + "x": 176.5, + "y": 73.5 + }, + "topLeftFinderPattern": { + "x": 75, + "y": 73.5 + }, + "bottomLeftFinderPattern": { + "x": 77.5, + "y": 172 + }, + "bottomRightAlignmentPattern": { + "x": 167, + "y": 164.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/180/input.png b/jsQR/tests/end-to-end/180/input.png new file mode 100755 index 0000000000000000000000000000000000000000..27ced01655c2fa7a87c615b0d4e2706851f6d3bf Binary files /dev/null and b/jsQR/tests/end-to-end/180/input.png differ diff --git a/jsQR/tests/end-to-end/180/output.json b/jsQR/tests/end-to-end/180/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1842c148f43be32d365f782d7402556124901b81 --- /dev/null +++ b/jsQR/tests/end-to-end/180/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 110, + 105, + 102, + 117, + 108, + 46, + 106, + 112, + 47, + 112, + 114, + 47, + 32, + 32 + ], + "data": "http://aniful.jp/pr/ ", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 110, + 105, + 102, + 117, + 108, + 46, + 106, + 112, + 47, + 112, + 114, + 47, + 32, + 32 + ], + "text": "http://aniful.jp/pr/ " + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 178.53676470588238, + "y": 11.463235294117643 + }, + "topLeftCorner": { + "x": 60.98020536929358, + "y": 11.480205369293575 + }, + "bottomRightCorner": { + "x": 178.71920387305005, + "y": 129.21920387305005 + }, + "bottomLeftCorner": { + "x": 60.96323529411764, + "y": 129.03676470588235 + }, + "topRightFinderPattern": { + "x": 168.5, + "y": 21.5 + }, + "topLeftFinderPattern": { + "x": 71, + "y": 21.5 + }, + "bottomLeftFinderPattern": { + "x": 71, + "y": 119 + }, + "bottomRightAlignmentPattern": { + "x": 160, + "y": 110.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/181/input.png b/jsQR/tests/end-to-end/181/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1b3854a068de59c2cec872cb41c3a1b65ecdbf4e Binary files /dev/null and b/jsQR/tests/end-to-end/181/input.png differ diff --git a/jsQR/tests/end-to-end/181/output.json b/jsQR/tests/end-to-end/181/output.json new file mode 100644 index 0000000000000000000000000000000000000000..411e13154c9f2855c1fb14347b0052dd05a276ee --- /dev/null +++ b/jsQR/tests/end-to-end/181/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32, + 32, + 32, + 32, + 32, + 32 + ], + "text": "" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 98.77782227137708, + "y": 6.170668971858855 + }, + "topLeftCorner": { + "x": 7.677864701236202, + "y": 6.120768823143036 + }, + "bottomRightCorner": { + "x": 98.18711409994347, + "y": 97.29066967731532 + }, + "bottomLeftCorner": { + "x": 7.733699955260171, + "y": 97.81773249536727 + }, + "topRightFinderPattern": { + "x": 91, + "y": 14 + }, + "topLeftFinderPattern": { + "x": 15.5, + "y": 14 + }, + "bottomLeftFinderPattern": { + "x": 15.5, + "y": 90 + }, + "bottomRightAlignmentPattern": { + "x": 84, + "y": 83 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/182/input.png b/jsQR/tests/end-to-end/182/input.png new file mode 100755 index 0000000000000000000000000000000000000000..421072a10c02cc6d76c73be712f71384468057fa Binary files /dev/null and b/jsQR/tests/end-to-end/182/input.png differ diff --git a/jsQR/tests/end-to-end/182/output.json b/jsQR/tests/end-to-end/182/output.json new file mode 100644 index 0000000000000000000000000000000000000000..89948867d832cdfb78ad64a70b89be22055352b9 --- /dev/null +++ b/jsQR/tests/end-to-end/182/output.json @@ -0,0 +1,164 @@ +{ + "binaryData": [ + 60, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 62, + 32, + 13, + 10, + 178, + 215, + 189, + 196, + 147, + 252, + 130, + 232, + 182, + 215, + 176, + 81, + 82, + 186, + 176, + 196, + 222, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32 + ], + "data": "入り", + "chunks": [ + { + "type": "byte", + "bytes": [ + 60, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 62, + 32, + 13, + 10, + 178, + 215, + 189, + 196 + ], + "text": "" + }, + { + "type": "kanji", + "bytes": [ + 147, + 252, + 130, + 232 + ], + "text": "入り" + }, + { + "type": "byte", + "bytes": [ + 182, + 215, + 176, + 81, + 82, + 186, + 176, + 196, + 222, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32 + ], + "text": "" + } + ], + "version": 5, + "location": { + "topRightCorner": { + "x": 101.13333333333334, + "y": 8.866666666666667 + }, + "topLeftCorner": { + "x": 9.846605539157194, + "y": 8.846605539157196 + }, + "bottomRightCorner": { + "x": 100.94220791398386, + "y": 99.94220791398388 + }, + "bottomLeftCorner": { + "x": 9.866666666666667, + "y": 100.13333333333334 + }, + "topRightFinderPattern": { + "x": 92.5, + "y": 17.5 + }, + "topLeftFinderPattern": { + "x": 18.5, + "y": 17.5 + }, + "bottomLeftFinderPattern": { + "x": 18.5, + "y": 91.5 + }, + "bottomRightAlignmentPattern": { + "x": 85, + "y": 84 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/184/input.png b/jsQR/tests/end-to-end/184/input.png new file mode 100755 index 0000000000000000000000000000000000000000..29cda4beeba33fbc7c3792a5622c587ffdf2db99 Binary files /dev/null and b/jsQR/tests/end-to-end/184/input.png differ diff --git a/jsQR/tests/end-to-end/184/output.json b/jsQR/tests/end-to-end/184/output.json new file mode 100644 index 0000000000000000000000000000000000000000..17ca7925aa6fe304c72665f90ab187350d419b16 --- /dev/null +++ b/jsQR/tests/end-to-end/184/output.json @@ -0,0 +1,118 @@ +{ + "binaryData": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 42, + 195, + 222, + 187, + 222, + 178, + 221, + 81, + 82, + 42, + 32, + 32, + 32, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 45, + 113, + 114, + 46, + 110, + 101, + 116, + 47, + 101, + 120, + 47, + 32 + ], + "text": "" + } + ], + "version": 5, + "location": { + "topRightCorner": { + "x": 104.21666666666667, + "y": 8.783333333333331 + }, + "topLeftCorner": { + "x": 6.763277068752573, + "y": 8.763277068752574 + }, + "bottomRightCorner": { + "x": 104.02553141652515, + "y": 106.02553141652515 + }, + "bottomLeftCorner": { + "x": 6.783333333333332, + "y": 106.21666666666667 + }, + "topRightFinderPattern": { + "x": 95, + "y": 18 + }, + "topLeftFinderPattern": { + "x": 16, + "y": 18 + }, + "bottomLeftFinderPattern": { + "x": 16, + "y": 97 + }, + "bottomRightAlignmentPattern": { + "x": 87, + "y": 89 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/185/input.png b/jsQR/tests/end-to-end/185/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ccbb4a6fc717ff9587ecf8df35ed01395f0148be Binary files /dev/null and b/jsQR/tests/end-to-end/185/input.png differ diff --git a/jsQR/tests/end-to-end/185/output.json b/jsQR/tests/end-to-end/185/output.json new file mode 100644 index 0000000000000000000000000000000000000000..80ce6ad627b8b421b2a86f8e99973ace924ce159 --- /dev/null +++ b/jsQR/tests/end-to-end/185/output.json @@ -0,0 +1,102 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 119, + 101, + 98, + 116, + 101, + 99, + 104, + 46, + 99, + 111, + 46, + 106, + 112, + 47, + 107, + 47 + ], + "data": "http://www.webtech.co.jp/k/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 119, + 101, + 98, + 116, + 101, + 99, + 104, + 46, + 99, + 111, + 46, + 106, + 112, + 47, + 107, + 47 + ], + "text": "http://www.webtech.co.jp/k/" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 306.7914111847173, + "y": 81.35079340625481 + }, + "topLeftCorner": { + "x": 134.32577661201498, + "y": 83.76259225057089 + }, + "bottomRightCorner": { + "x": 308.5995871714683, + "y": 249.05321669871222 + }, + "bottomLeftCorner": { + "x": 131.6197210484902, + "y": 252.71440332212921 + }, + "topRightFinderPattern": { + "x": 288.75, + "y": 99 + }, + "topLeftFinderPattern": { + "x": 152.5, + "y": 101 + }, + "bottomLeftFinderPattern": { + "x": 150.75, + "y": 234 + }, + "bottomRightAlignmentPattern": { + "x": 273.75, + "y": 216 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/186/input.png b/jsQR/tests/end-to-end/186/input.png new file mode 100755 index 0000000000000000000000000000000000000000..64fee6d9b41ce21fc382c6cc1929528bca5a8722 Binary files /dev/null and b/jsQR/tests/end-to-end/186/input.png differ diff --git a/jsQR/tests/end-to-end/186/output.json b/jsQR/tests/end-to-end/186/output.json new file mode 100644 index 0000000000000000000000000000000000000000..13a67ba1905e68964ce1cc567073a67292c74ae6 --- /dev/null +++ b/jsQR/tests/end-to-end/186/output.json @@ -0,0 +1,306 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 108, + 105, + 118, + 101, + 46, + 102, + 100, + 103, + 109, + 46, + 106, + 112, + 47, + 117, + 47, + 101, + 118, + 101, + 110, + 116, + 47, + 104, + 121, + 112, + 101, + 47, + 104, + 121, + 112, + 101, + 95, + 116, + 111, + 112, + 46, + 104, + 116, + 109, + 108, + 32, + 13, + 10, + 13, + 10, + 77, + 69, + 66, + 75, + 77, + 58, + 84, + 73, + 84, + 76, + 69, + 58, + 104, + 121, + 112, + 101, + 131, + 130, + 131, + 111, + 131, + 67, + 131, + 139, + 59, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 108, + 105, + 118, + 101, + 46, + 102, + 100, + 103, + 109, + 46, + 106, + 112, + 47, + 117, + 47, + 101, + 118, + 101, + 110, + 116, + 47, + 104, + 121, + 112, + 101, + 47, + 104, + 121, + 112, + 101, + 95, + 116, + 111, + 112, + 46, + 104, + 116, + 109, + 108, + 59, + 59 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 108, + 105, + 118, + 101, + 46, + 102, + 100, + 103, + 109, + 46, + 106, + 112, + 47, + 117, + 47, + 101, + 118, + 101, + 110, + 116, + 47, + 104, + 121, + 112, + 101, + 47, + 104, + 121, + 112, + 101, + 95, + 116, + 111, + 112, + 46, + 104, + 116, + 109, + 108, + 32, + 13, + 10, + 13, + 10, + 77, + 69, + 66, + 75, + 77, + 58, + 84, + 73, + 84, + 76, + 69, + 58, + 104, + 121, + 112, + 101, + 131, + 130, + 131, + 111, + 131, + 67, + 131, + 139, + 59, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 108, + 105, + 118, + 101, + 46, + 102, + 100, + 103, + 109, + 46, + 106, + 112, + 47, + 117, + 47, + 101, + 118, + 101, + 110, + 116, + 47, + 104, + 121, + 112, + 101, + 47, + 104, + 121, + 112, + 101, + 95, + 116, + 111, + 112, + 46, + 104, + 116, + 109, + 108, + 59, + 59 + ], + "text": "" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 106.8721962040917, + "y": 9.101883683821335 + }, + "topLeftCorner": { + "x": 9.147708515771434, + "y": 9.119395663282527 + }, + "bottomRightCorner": { + "x": 106.6620633135973, + "y": 106.96430759601627 + }, + "bottomLeftCorner": { + "x": 9.496731134761465, + "y": 106.77882078123 + }, + "topRightFinderPattern": { + "x": 98.5, + "y": 17.5 + }, + "topLeftFinderPattern": { + "x": 17.5, + "y": 17.5 + }, + "bottomLeftFinderPattern": { + "x": 17.75, + "y": 98.5 + }, + "bottomRightAlignmentPattern": { + "x": 91.25, + "y": 91.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/19/input.png b/jsQR/tests/end-to-end/19/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a8172734fb810d073e9caac9686b6daaaaea09a3 Binary files /dev/null and b/jsQR/tests/end-to-end/19/input.png differ diff --git a/jsQR/tests/end-to-end/19/output.json b/jsQR/tests/end-to-end/19/output.json new file mode 100644 index 0000000000000000000000000000000000000000..a91d560356a8a24a880bf3b54de17b86ecd50a80 --- /dev/null +++ b/jsQR/tests/end-to-end/19/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 213.8951922564576, + "y": 46.98978749199841 + }, + "topLeftCorner": { + "x": 51.06173055499855, + "y": 33.468401513354124 + }, + "bottomRightCorner": { + "x": 197.71385495664867, + "y": 207.2049272684622 + }, + "bottomLeftCorner": { + "x": 41.99076333215208, + "y": 189.94189154484198 + }, + "topRightFinderPattern": { + "x": 198.25, + "y": 60 + }, + "topLeftFinderPattern": { + "x": 63.75, + "y": 48.5 + }, + "bottomLeftFinderPattern": { + "x": 55.75, + "y": 178.5 + }, + "bottomRightAlignmentPattern": { + "x": 174.75, + "y": 180 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/2/input.png b/jsQR/tests/end-to-end/2/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c13d170643396f2490f8e31f2ddfda77e9e00203 Binary files /dev/null and b/jsQR/tests/end-to-end/2/input.png differ diff --git a/jsQR/tests/end-to-end/2/output.json b/jsQR/tests/end-to-end/2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4c3bc165c76181666faea07fca1c1ba487f53978 --- /dev/null +++ b/jsQR/tests/end-to-end/2/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 169.97313761748933, + "y": 67.9119179745415 + }, + "topLeftCorner": { + "x": 61.38965877345718, + "y": 68.65597144763409 + }, + "bottomRightCorner": { + "x": 180.74028041197627, + "y": 177.2956398621835 + }, + "bottomLeftCorner": { + "x": 64.69980803936544, + "y": 183.41557111668365 + }, + "topRightFinderPattern": { + "x": 158.5, + "y": 80.5 + }, + "topLeftFinderPattern": { + "x": 75.5, + "y": 81.5 + }, + "bottomLeftFinderPattern": { + "x": 78.75, + "y": 168 + }, + "bottomRightAlignmentPattern": { + "x": 153.5, + "y": 152.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/20/input.png b/jsQR/tests/end-to-end/20/input.png new file mode 100755 index 0000000000000000000000000000000000000000..40d4e90346c79966f9c2ba185af52f7ec3b8aa5c Binary files /dev/null and b/jsQR/tests/end-to-end/20/input.png differ diff --git a/jsQR/tests/end-to-end/20/output.json b/jsQR/tests/end-to-end/20/output.json new file mode 100644 index 0000000000000000000000000000000000000000..bbc97653af6466c42be56367ddcb1bb7ab674661 --- /dev/null +++ b/jsQR/tests/end-to-end/20/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 219.70902817711328, + "y": 37.84790109258194 + }, + "topLeftCorner": { + "x": 38.2603965404799, + "y": 46.403491823562035 + }, + "bottomRightCorner": { + "x": 193.4562722614583, + "y": 177.09475558859648 + }, + "bottomLeftCorner": { + "x": 40.80087527352297, + "y": 194.7319474835886 + }, + "topRightFinderPattern": { + "x": 203, + "y": 52.5 + }, + "topLeftFinderPattern": { + "x": 55, + "y": 60.5 + }, + "bottomLeftFinderPattern": { + "x": 54.75, + "y": 182.5 + }, + "bottomRightAlignmentPattern": { + "x": 173.75, + "y": 160.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/21/input.png b/jsQR/tests/end-to-end/21/input.png new file mode 100755 index 0000000000000000000000000000000000000000..0f66362462caa746c97ea45b40a7942dd2304179 Binary files /dev/null and b/jsQR/tests/end-to-end/21/input.png differ diff --git a/jsQR/tests/end-to-end/21/output.json b/jsQR/tests/end-to-end/21/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ff9a6d23f21805a9522278d505e889a7a49d785e --- /dev/null +++ b/jsQR/tests/end-to-end/21/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 225.69166289851543, + "y": 45.40680008970404 + }, + "topLeftCorner": { + "x": 39.719498622202934, + "y": 33.731477969048946 + }, + "bottomRightCorner": { + "x": 209.04881736341517, + "y": 225.83608519592124 + }, + "bottomLeftCorner": { + "x": 32.658931929541446, + "y": 210.08784869760996 + }, + "topRightFinderPattern": { + "x": 208, + "y": 60.5 + }, + "topLeftFinderPattern": { + "x": 54.5, + "y": 50.5 + }, + "bottomLeftFinderPattern": { + "x": 48, + "y": 197 + }, + "bottomRightAlignmentPattern": { + "x": 182.75, + "y": 196 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/23/input.png b/jsQR/tests/end-to-end/23/input.png new file mode 100755 index 0000000000000000000000000000000000000000..cdc8ffe126e3ca02043d0bc1c66f5e89e2415a91 Binary files /dev/null and b/jsQR/tests/end-to-end/23/input.png differ diff --git a/jsQR/tests/end-to-end/23/output.json b/jsQR/tests/end-to-end/23/output.json new file mode 100644 index 0000000000000000000000000000000000000000..a07f3858d21ac4d0672b628f17f287e85432b911 --- /dev/null +++ b/jsQR/tests/end-to-end/23/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 218.0616533611889, + "y": 46.08989599795498 + }, + "topLeftCorner": { + "x": 44.349859716661285, + "y": 46.28689931584705 + }, + "bottomRightCorner": { + "x": 198.34710062786246, + "y": 210.41983973500416 + }, + "bottomLeftCorner": { + "x": 38.97141142676445, + "y": 232.4161073034673 + }, + "topRightFinderPattern": { + "x": 203.25, + "y": 61.5 + }, + "topLeftFinderPattern": { + "x": 60.5, + "y": 63.5 + }, + "bottomLeftFinderPattern": { + "x": 54.75, + "y": 216 + }, + "bottomRightAlignmentPattern": { + "x": 178.25, + "y": 189 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/24/input.png b/jsQR/tests/end-to-end/24/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2e1000eef02e38b5407487e4f4d45bd0960b9026 Binary files /dev/null and b/jsQR/tests/end-to-end/24/input.png differ diff --git a/jsQR/tests/end-to-end/24/output.json b/jsQR/tests/end-to-end/24/output.json new file mode 100644 index 0000000000000000000000000000000000000000..9e871ae30fff07b065bf8510114808561b03c50e --- /dev/null +++ b/jsQR/tests/end-to-end/24/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 187.34137589764677, + "y": 50.92004130848449 + }, + "topLeftCorner": { + "x": 48.84761328608201, + "y": 31.00195847422618 + }, + "bottomRightCorner": { + "x": 166.51592464895035, + "y": 188.90524081923658 + }, + "bottomLeftCorner": { + "x": 28.479866103127446, + "y": 175.50437886518222 + }, + "topRightFinderPattern": { + "x": 168.75, + "y": 65.5 + }, + "topLeftFinderPattern": { + "x": 63.75, + "y": 51 + }, + "bottomLeftFinderPattern": { + "x": 48.25, + "y": 160 + }, + "bottomRightAlignmentPattern": { + "x": 141.25, + "y": 155 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/25/input.png b/jsQR/tests/end-to-end/25/input.png new file mode 100755 index 0000000000000000000000000000000000000000..11878d1e789e3dc72d4c1dba51acc039cd6e2ccc Binary files /dev/null and b/jsQR/tests/end-to-end/25/input.png differ diff --git a/jsQR/tests/end-to-end/25/output.json b/jsQR/tests/end-to-end/25/output.json new file mode 100644 index 0000000000000000000000000000000000000000..2ca1bbaaffc5d46cb9d0bc8e6b5c6dafa0816d18 --- /dev/null +++ b/jsQR/tests/end-to-end/25/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 191.80228303829216, + "y": 41.34022157791437 + }, + "topLeftCorner": { + "x": 51.759814147250935, + "y": 42.64794573954971 + }, + "bottomRightCorner": { + "x": 192.56602152305211, + "y": 182.3093872017265 + }, + "bottomLeftCorner": { + "x": 52.404524237810314, + "y": 183.70389014010863 + }, + "topRightFinderPattern": { + "x": 175, + "y": 58.5 + }, + "topLeftFinderPattern": { + "x": 68.75, + "y": 59.5 + }, + "bottomLeftFinderPattern": { + "x": 69.25, + "y": 166.5 + }, + "bottomRightAlignmentPattern": { + "x": 161, + "y": 151 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/26/input.png b/jsQR/tests/end-to-end/26/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1ac137b3cbdb2b0b117d8c9df9f8b0fe0b39c273 Binary files /dev/null and b/jsQR/tests/end-to-end/26/input.png differ diff --git a/jsQR/tests/end-to-end/26/output.json b/jsQR/tests/end-to-end/26/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d3f08e0402733e2f0797434aa010cf2ea131ed03 --- /dev/null +++ b/jsQR/tests/end-to-end/26/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 200.51548328464685, + "y": 47.01792430377329 + }, + "topLeftCorner": { + "x": 46.11370591255887, + "y": 15.951544542945099 + }, + "bottomRightCorner": { + "x": 190.50123699100718, + "y": 208.72023786757504 + }, + "bottomLeftCorner": { + "x": 29.28424280822841, + "y": 201.0599282844895 + }, + "topRightFinderPattern": { + "x": 182.75, + "y": 63 + }, + "topLeftFinderPattern": { + "x": 65.25, + "y": 41.5 + }, + "bottomLeftFinderPattern": { + "x": 53.25, + "y": 179.5 + }, + "bottomRightAlignmentPattern": { + "x": 160.75, + "y": 169 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/27/input.png b/jsQR/tests/end-to-end/27/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2f10260b058f251da056b3c1c35a2aa8d89beb52 Binary files /dev/null and b/jsQR/tests/end-to-end/27/input.png differ diff --git a/jsQR/tests/end-to-end/27/output.json b/jsQR/tests/end-to-end/27/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1b411a2e1fe165bbdcf2f15721578d54613a2901 --- /dev/null +++ b/jsQR/tests/end-to-end/27/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 219.2293911881905, + "y": 26.212359626879184 + }, + "topLeftCorner": { + "x": 57.871305757675046, + "y": 23.19445423207763 + }, + "bottomRightCorner": { + "x": 211.88171966334411, + "y": 182.51557206552843 + }, + "bottomLeftCorner": { + "x": 57.411031812566186, + "y": 182.42804668196257 + }, + "topRightFinderPattern": { + "x": 199.25, + "y": 45.5 + }, + "topLeftFinderPattern": { + "x": 77.5, + "y": 43.5 + }, + "bottomLeftFinderPattern": { + "x": 76.5, + "y": 164 + }, + "bottomRightAlignmentPattern": { + "x": 179, + "y": 148.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/28/input.png b/jsQR/tests/end-to-end/28/input.png new file mode 100755 index 0000000000000000000000000000000000000000..4cdc64d1c00d36ccaeeb7f0a5aebe99f93a912d7 Binary files /dev/null and b/jsQR/tests/end-to-end/28/input.png differ diff --git a/jsQR/tests/end-to-end/28/output.json b/jsQR/tests/end-to-end/28/output.json new file mode 100644 index 0000000000000000000000000000000000000000..03fc8c7640d78d9d7bb923a5267415797d0fb095 --- /dev/null +++ b/jsQR/tests/end-to-end/28/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 179.11497653644128, + "y": 59.84395574648603 + }, + "topLeftCorner": { + "x": 81.82135601048367, + "y": 61.52618350459625 + }, + "bottomRightCorner": { + "x": 178.61866503328102, + "y": 158.70609058677223 + }, + "bottomLeftCorner": { + "x": 81.88542675459115, + "y": 157.40309722251195 + }, + "topRightFinderPattern": { + "x": 167, + "y": 72 + }, + "topLeftFinderPattern": { + "x": 93.25, + "y": 73 + }, + "bottomLeftFinderPattern": { + "x": 93.25, + "y": 146 + }, + "bottomRightAlignmentPattern": { + "x": 156.5, + "y": 136.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/29/input.png b/jsQR/tests/end-to-end/29/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e1386f808750182b347765584e54c6ac0c361028 Binary files /dev/null and b/jsQR/tests/end-to-end/29/input.png differ diff --git a/jsQR/tests/end-to-end/29/output.json b/jsQR/tests/end-to-end/29/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1c81a441918a6b64d140cd06e80c35943272e3d3 --- /dev/null +++ b/jsQR/tests/end-to-end/29/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 174.89734182304704, + "y": 72.95386231135573 + }, + "topLeftCorner": { + "x": 33.94725380403136, + "y": 53.34917684702118 + }, + "bottomRightCorner": { + "x": 200.07510155366643, + "y": 214.14264416432852 + }, + "bottomLeftCorner": { + "x": 44.20675418056735, + "y": 212.93210592842786 + }, + "topRightFinderPattern": { + "x": 162.25, + "y": 86.5 + }, + "topLeftFinderPattern": { + "x": 54.25, + "y": 73 + }, + "bottomLeftFinderPattern": { + "x": 63.75, + "y": 192 + }, + "bottomRightAlignmentPattern": { + "x": 163.25, + "y": 178.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/3/input.png b/jsQR/tests/end-to-end/3/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2dc5e459d67e87983584555c1437b7a48816d202 Binary files /dev/null and b/jsQR/tests/end-to-end/3/input.png differ diff --git a/jsQR/tests/end-to-end/3/output.json b/jsQR/tests/end-to-end/3/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f7ce25f3ee089baa9d8985a6fed4224285ca7e4e --- /dev/null +++ b/jsQR/tests/end-to-end/3/output.json @@ -0,0 +1,82 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 230, + 184, + 172, + 232, + 169, + 166, + 59, + 59 + ], + "data": "MECARD:N:測試;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 230, + 184, + 172, + 232, + 169, + 166, + 59, + 59 + ], + "text": "MECARD:N:測試;;" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 300, + "y": 50 + }, + "topLeftCorner": { + "x": 50, + "y": 50 + }, + "bottomRightCorner": { + "x": 300, + "y": 300 + }, + "bottomLeftCorner": { + "x": 50, + "y": 300 + }, + "topRightFinderPattern": { + "x": 265, + "y": 85 + }, + "topLeftFinderPattern": { + "x": 85, + "y": 85 + }, + "bottomLeftFinderPattern": { + "x": 85, + "y": 265 + }, + "bottomRightAlignmentPattern": { + "x": 235, + "y": 235 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/30/input.png b/jsQR/tests/end-to-end/30/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c871b97684c90449fcfc6614e8bb545c6f4fa696 Binary files /dev/null and b/jsQR/tests/end-to-end/30/input.png differ diff --git a/jsQR/tests/end-to-end/30/output.json b/jsQR/tests/end-to-end/30/output.json new file mode 100644 index 0000000000000000000000000000000000000000..57524119129e5dcc0c6fb923bf16335650c8000d --- /dev/null +++ b/jsQR/tests/end-to-end/30/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 171.18118628935082, + "y": 34.11515763822924 + }, + "topLeftCorner": { + "x": 46.378634742362536, + "y": 68.65651671375672 + }, + "bottomRightCorner": { + "x": 203.11832719222087, + "y": 169.55528679204392 + }, + "bottomLeftCorner": { + "x": 74.27271033302208, + "y": 196.28852556514673 + }, + "topRightFinderPattern": { + "x": 159, + "y": 54.5 + }, + "topLeftFinderPattern": { + "x": 64, + "y": 80 + }, + "bottomLeftFinderPattern": { + "x": 85.5, + "y": 177.5 + }, + "bottomRightAlignmentPattern": { + "x": 165.75, + "y": 145.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/31/input.png b/jsQR/tests/end-to-end/31/input.png new file mode 100755 index 0000000000000000000000000000000000000000..da6406d96ccf4ea37b2e643f463ee9894bbfd049 Binary files /dev/null and b/jsQR/tests/end-to-end/31/input.png differ diff --git a/jsQR/tests/end-to-end/31/output.json b/jsQR/tests/end-to-end/31/output.json new file mode 100644 index 0000000000000000000000000000000000000000..72faa1c7a03aaa49134c4bb6ed0ac4268db1083d --- /dev/null +++ b/jsQR/tests/end-to-end/31/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 185.91061490138833, + "y": 35.39249203732981 + }, + "topLeftCorner": { + "x": 43.210406929422746, + "y": 50.202214000205025 + }, + "bottomRightCorner": { + "x": 186.9509576850571, + "y": 216.26759143995696 + }, + "bottomLeftCorner": { + "x": 38.40152952743055, + "y": 205.0114403196884 + }, + "topRightFinderPattern": { + "x": 166.25, + "y": 58 + }, + "topLeftFinderPattern": { + "x": 57.75, + "y": 67 + }, + "bottomLeftFinderPattern": { + "x": 54.5, + "y": 186.5 + }, + "bottomRightAlignmentPattern": { + "x": 149.5, + "y": 173 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/32/input.png b/jsQR/tests/end-to-end/32/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d31cf518685cbd355f9c94419764e87022beeaa9 Binary files /dev/null and b/jsQR/tests/end-to-end/32/input.png differ diff --git a/jsQR/tests/end-to-end/32/output.json b/jsQR/tests/end-to-end/32/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1977ac4a2c9392b3f16829f369792cc9350d5293 --- /dev/null +++ b/jsQR/tests/end-to-end/32/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "data": "MECARD:N:Google 411,;TEL:18665881077;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 52, + 49, + 49, + 44, + 59, + 84, + 69, + 76, + 58, + 49, + 56, + 54, + 54, + 53, + 56, + 56, + 49, + 48, + 55, + 55, + 59, + 59 + ], + "text": "MECARD:N:Google 411,;TEL:18665881077;;" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 149.91123032257443, + "y": 18.39785960300016 + }, + "topLeftCorner": { + "x": 25.66018520019397, + "y": 96.93864221937915 + }, + "bottomRightCorner": { + "x": 227.3957060817412, + "y": 174.0499030968818 + }, + "bottomLeftCorner": { + "x": 89.8696768009746, + "y": 235.4711684887841 + }, + "topRightFinderPattern": { + "x": 142, + "y": 47 + }, + "topLeftFinderPattern": { + "x": 46.75, + "y": 105 + }, + "bottomLeftFinderPattern": { + "x": 96.5, + "y": 211.5 + }, + "bottomRightAlignmentPattern": { + "x": 176.25, + "y": 154.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/33/input.png b/jsQR/tests/end-to-end/33/input.png new file mode 100755 index 0000000000000000000000000000000000000000..64de4bc770cc8a8364e5a2528761d0fab1e27056 Binary files /dev/null and b/jsQR/tests/end-to-end/33/input.png differ diff --git a/jsQR/tests/end-to-end/33/output.json b/jsQR/tests/end-to-end/33/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8e423ef3581518b45080730e1ff1a34b82338c22 --- /dev/null +++ b/jsQR/tests/end-to-end/33/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 191.58062242553203, + "y": 53.36741695736818 + }, + "topLeftCorner": { + "x": 31.962841304387656, + "y": 48.015247240658546 + }, + "bottomRightCorner": { + "x": 176.48890411989285, + "y": 194.77460462505675 + }, + "bottomLeftCorner": { + "x": 31.09033284168407, + "y": 196.091253819757 + }, + "topRightFinderPattern": { + "x": 178.5, + "y": 65 + }, + "topLeftFinderPattern": { + "x": 44.75, + "y": 61 + }, + "bottomLeftFinderPattern": { + "x": 43, + "y": 185.5 + }, + "bottomRightAlignmentPattern": { + "x": 158, + "y": 176 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/34/input.png b/jsQR/tests/end-to-end/34/input.png new file mode 100755 index 0000000000000000000000000000000000000000..8c80b1105fa247c2d370b495a17fd8f53c4faa52 Binary files /dev/null and b/jsQR/tests/end-to-end/34/input.png differ diff --git a/jsQR/tests/end-to-end/34/output.json b/jsQR/tests/end-to-end/34/output.json new file mode 100644 index 0000000000000000000000000000000000000000..38ea6977acb1670ea734fead039bbe500887da95 --- /dev/null +++ b/jsQR/tests/end-to-end/34/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 448.1679366259464, + "y": 141.51963536741036 + }, + "topLeftCorner": { + "x": 177.3193597934474, + "y": 136.7505501895766 + }, + "bottomRightCorner": { + "x": 467.51014796868805, + "y": 398.5768252349065 + }, + "bottomLeftCorner": { + "x": 154.23652635814304, + "y": 397.91435038456353 + }, + "topRightFinderPattern": { + "x": 421.25, + "y": 165 + }, + "topLeftFinderPattern": { + "x": 204.75, + "y": 161.5 + }, + "bottomLeftFinderPattern": { + "x": 190.25, + "y": 366.5 + }, + "bottomRightAlignmentPattern": { + "x": 404.25, + "y": 341.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/35/input.png b/jsQR/tests/end-to-end/35/input.png new file mode 100755 index 0000000000000000000000000000000000000000..004d36ff58750776d9db7f080364abe574147fa1 Binary files /dev/null and b/jsQR/tests/end-to-end/35/input.png differ diff --git a/jsQR/tests/end-to-end/35/output.json b/jsQR/tests/end-to-end/35/output.json new file mode 100644 index 0000000000000000000000000000000000000000..7301adcf3f171c1fad7d2b272a2ec791b9060b24 --- /dev/null +++ b/jsQR/tests/end-to-end/35/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 103, + 119, + 116, + 47, + 110, + 63, + 117, + 61, + 98, + 108, + 117, + 101, + 110, + 105, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://google.com/gwt/n?u=bluenile.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 103, + 119, + 116, + 47, + 110, + 63, + 117, + 61, + 98, + 108, + 117, + 101, + 110, + 105, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://google.com/gwt/n?u=bluenile.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 389.6482251278327, + "y": 160.85053865676448 + }, + "topLeftCorner": { + "x": 223.86700435203286, + "y": 156.71672398144375 + }, + "bottomRightCorner": { + "x": 392.07301636782904, + "y": 317.64274914462004 + }, + "bottomLeftCorner": { + "x": 217.8878542373241, + "y": 315.1381654835553 + }, + "topRightFinderPattern": { + "x": 370, + "y": 178.5 + }, + "topLeftFinderPattern": { + "x": 243.5, + "y": 175.5 + }, + "bottomLeftFinderPattern": { + "x": 239.75, + "y": 295.5 + }, + "bottomRightAlignmentPattern": { + "x": 353.25, + "y": 280.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/36/input.png b/jsQR/tests/end-to-end/36/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c8e84f5e810f4bc918a3243ef6c4e8a3d4792dbb Binary files /dev/null and b/jsQR/tests/end-to-end/36/input.png differ diff --git a/jsQR/tests/end-to-end/36/output.json b/jsQR/tests/end-to-end/36/output.json new file mode 100644 index 0000000000000000000000000000000000000000..60f0dc4e0e3c3459f155eaeaa1cb1b54d8fa06ff --- /dev/null +++ b/jsQR/tests/end-to-end/36/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 184.76166276003715, + "y": 30.78546514889663 + }, + "topLeftCorner": { + "x": 53.12842595400859, + "y": 33.005462543339235 + }, + "bottomRightCorner": { + "x": 186.03004536800438, + "y": 174.2940773572474 + }, + "bottomLeftCorner": { + "x": 59.37372686419925, + "y": 164.17688631468167 + }, + "topRightFinderPattern": { + "x": 173.75, + "y": 42.5 + }, + "topLeftFinderPattern": { + "x": 63, + "y": 43.5 + }, + "bottomLeftFinderPattern": { + "x": 68, + "y": 155 + }, + "bottomRightAlignmentPattern": { + "x": 166, + "y": 153 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/37/input.png b/jsQR/tests/end-to-end/37/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e9734288faee69504141892712edffc0dd803a8a Binary files /dev/null and b/jsQR/tests/end-to-end/37/input.png differ diff --git a/jsQR/tests/end-to-end/37/output.json b/jsQR/tests/end-to-end/37/output.json new file mode 100644 index 0000000000000000000000000000000000000000..2ee6a1bc5a187fdeabf4142c627af9a7bd9a7f22 --- /dev/null +++ b/jsQR/tests/end-to-end/37/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 195.105795902831, + "y": 55.80837170502814 + }, + "topLeftCorner": { + "x": 34.30279699215454, + "y": 58.034994131702845 + }, + "bottomRightCorner": { + "x": 195.68762304456308, + "y": 222.96319959843575 + }, + "bottomLeftCorner": { + "x": 41.87715864780272, + "y": 212.88995341714613 + }, + "topRightFinderPattern": { + "x": 181.75, + "y": 69.5 + }, + "topLeftFinderPattern": { + "x": 46.5, + "y": 70.5 + }, + "bottomLeftFinderPattern": { + "x": 52.5, + "y": 202 + }, + "bottomRightAlignmentPattern": { + "x": 171.75, + "y": 198.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/38/input.png b/jsQR/tests/end-to-end/38/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ea7b5b70cb73c345b6ab0edb952b4e6fa3d064ed Binary files /dev/null and b/jsQR/tests/end-to-end/38/input.png differ diff --git a/jsQR/tests/end-to-end/38/output.json b/jsQR/tests/end-to-end/38/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4885698627264b8f490a56f6cdd61d903c8c2937 --- /dev/null +++ b/jsQR/tests/end-to-end/38/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 201.00258097026153, + "y": 36.34328540535667 + }, + "topLeftCorner": { + "x": 53.21611874131953, + "y": 19.784765406663453 + }, + "bottomRightCorner": { + "x": 187.7412001518462, + "y": 174.80890684165138 + }, + "bottomLeftCorner": { + "x": 57.06607974137149, + "y": 152.08603897085592 + }, + "topRightFinderPattern": { + "x": 187.75, + "y": 47 + }, + "topLeftFinderPattern": { + "x": 64.25, + "y": 32.5 + }, + "bottomLeftFinderPattern": { + "x": 66.5, + "y": 144.5 + }, + "bottomRightAlignmentPattern": { + "x": 169.25, + "y": 153.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/39/input.png b/jsQR/tests/end-to-end/39/input.png new file mode 100755 index 0000000000000000000000000000000000000000..8ccf05c1289a475b355472a5817c0292f1c204b5 Binary files /dev/null and b/jsQR/tests/end-to-end/39/input.png differ diff --git a/jsQR/tests/end-to-end/39/output.json b/jsQR/tests/end-to-end/39/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f950d27f6e9474896b5d84dedd768ab459886bef --- /dev/null +++ b/jsQR/tests/end-to-end/39/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 217.92953817066044, + "y": 56.87884725548382 + }, + "topLeftCorner": { + "x": 47.371596107941905, + "y": 48.56808249237367 + }, + "bottomRightCorner": { + "x": 207.33931739631902, + "y": 209.1756746659043 + }, + "bottomLeftCorner": { + "x": 57.11618793337542, + "y": 195.14272402776209 + }, + "topRightFinderPattern": { + "x": 203.25, + "y": 69.5 + }, + "topLeftFinderPattern": { + "x": 60.75, + "y": 62 + }, + "bottomLeftFinderPattern": { + "x": 67.75, + "y": 186 + }, + "bottomRightAlignmentPattern": { + "x": 185.75, + "y": 187.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/4/input.png b/jsQR/tests/end-to-end/4/input.png new file mode 100755 index 0000000000000000000000000000000000000000..86572c5223fd4d374c94bf1225b8531f19d35497 Binary files /dev/null and b/jsQR/tests/end-to-end/4/input.png differ diff --git a/jsQR/tests/end-to-end/4/output.json b/jsQR/tests/end-to-end/4/output.json new file mode 100644 index 0000000000000000000000000000000000000000..c8fe86e481ad5f496f8c1e81c5edcfef91cf6e54 --- /dev/null +++ b/jsQR/tests/end-to-end/4/output.json @@ -0,0 +1,604 @@ +{ + "binaryData": [ + 66, + 69, + 71, + 73, + 78, + 58, + 86, + 67, + 65, + 82, + 68, + 13, + 10, + 78, + 58, + 75, + 101, + 110, + 110, + 101, + 100, + 121, + 59, + 83, + 116, + 101, + 118, + 101, + 13, + 10, + 84, + 69, + 76, + 58, + 43, + 52, + 52, + 32, + 40, + 48, + 41, + 55, + 55, + 55, + 53, + 32, + 55, + 53, + 53, + 53, + 48, + 51, + 13, + 10, + 65, + 68, + 82, + 59, + 72, + 79, + 77, + 69, + 58, + 59, + 59, + 70, + 108, + 97, + 116, + 32, + 50, + 44, + 32, + 52, + 51, + 32, + 72, + 111, + 119, + 105, + 116, + 116, + 32, + 82, + 111, + 97, + 100, + 44, + 32, + 66, + 101, + 108, + 115, + 105, + 122, + 101, + 32, + 80, + 97, + 114, + 107, + 59, + 76, + 111, + 110, + 100, + 111, + 110, + 59, + 59, + 78, + 87, + 51, + 52, + 76, + 85, + 59, + 85, + 75, + 13, + 10, + 79, + 82, + 71, + 58, + 78, + 101, + 116, + 84, + 101, + 107, + 32, + 76, + 116, + 100, + 59, + 13, + 10, + 84, + 73, + 84, + 76, + 69, + 58, + 67, + 111, + 110, + 115, + 117, + 108, + 116, + 97, + 110, + 116, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 85, + 82, + 76, + 58, + 119, + 119, + 119, + 46, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 59, + 73, + 77, + 58, + 77, + 83, + 78, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 103, + 98, + 110, + 101, + 116, + 46, + 110, + 101, + 116, + 13, + 10, + 78, + 79, + 84, + 69, + 58, + 84, + 101, + 115, + 116, + 105, + 110, + 103, + 32, + 49, + 32, + 50, + 32, + 51, + 13, + 10, + 66, + 68, + 65, + 89, + 58, + 49, + 57, + 54, + 49, + 49, + 49, + 48, + 53, + 13, + 10, + 69, + 78, + 68, + 58, + 86, + 67, + 65, + 82, + 68 + ], + "data": "BEGIN:VCARD\r\nN:Kennedy;Steve\r\nTEL:+44 (0)7775 755503\r\nADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\r\nORG:NetTek Ltd;\r\nTITLE:Consultant\r\nEMAIL:steve@nettek.co.uk\r\nURL:www.nettek.co.uk\r\nEMAIL;IM:MSN:steve@gbnet.net\r\nNOTE:Testing 1 2 3\r\nBDAY:19611105\r\nEND:VCARD", + "chunks": [ + { + "type": "byte", + "bytes": [ + 66, + 69, + 71, + 73, + 78, + 58, + 86, + 67, + 65, + 82, + 68, + 13, + 10, + 78, + 58, + 75, + 101, + 110, + 110, + 101, + 100, + 121, + 59, + 83, + 116, + 101, + 118, + 101, + 13, + 10, + 84, + 69, + 76, + 58, + 43, + 52, + 52, + 32, + 40, + 48, + 41, + 55, + 55, + 55, + 53, + 32, + 55, + 53, + 53, + 53, + 48, + 51, + 13, + 10, + 65, + 68, + 82, + 59, + 72, + 79, + 77, + 69, + 58, + 59, + 59, + 70, + 108, + 97, + 116, + 32, + 50, + 44, + 32, + 52, + 51, + 32, + 72, + 111, + 119, + 105, + 116, + 116, + 32, + 82, + 111, + 97, + 100, + 44, + 32, + 66, + 101, + 108, + 115, + 105, + 122, + 101, + 32, + 80, + 97, + 114, + 107, + 59, + 76, + 111, + 110, + 100, + 111, + 110, + 59, + 59, + 78, + 87, + 51, + 52, + 76, + 85, + 59, + 85, + 75, + 13, + 10, + 79, + 82, + 71, + 58, + 78, + 101, + 116, + 84, + 101, + 107, + 32, + 76, + 116, + 100, + 59, + 13, + 10, + 84, + 73, + 84, + 76, + 69, + 58, + 67, + 111, + 110, + 115, + 117, + 108, + 116, + 97, + 110, + 116, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 85, + 82, + 76, + 58, + 119, + 119, + 119, + 46, + 110, + 101, + 116, + 116, + 101, + 107, + 46, + 99, + 111, + 46, + 117, + 107, + 13, + 10, + 69, + 77, + 65, + 73, + 76, + 59, + 73, + 77, + 58, + 77, + 83, + 78, + 58, + 115, + 116, + 101, + 118, + 101, + 64, + 103, + 98, + 110, + 101, + 116, + 46, + 110, + 101, + 116, + 13, + 10, + 78, + 79, + 84, + 69, + 58, + 84, + 101, + 115, + 116, + 105, + 110, + 103, + 32, + 49, + 32, + 50, + 32, + 51, + 13, + 10, + 66, + 68, + 65, + 89, + 58, + 49, + 57, + 54, + 49, + 49, + 49, + 48, + 53, + 13, + 10, + 69, + 78, + 68, + 58, + 86, + 67, + 65, + 82, + 68 + ], + "text": "BEGIN:VCARD\r\nN:Kennedy;Steve\r\nTEL:+44 (0)7775 755503\r\nADR;HOME:;;Flat 2, 43 Howitt Road, Belsize Park;London;;NW34LU;UK\r\nORG:NetTek Ltd;\r\nTITLE:Consultant\r\nEMAIL:steve@nettek.co.uk\r\nURL:www.nettek.co.uk\r\nEMAIL;IM:MSN:steve@gbnet.net\r\nNOTE:Testing 1 2 3\r\nBDAY:19611105\r\nEND:VCARD" + } + ], + "version": 12, + "location": { + "topRightCorner": { + "x": 65, + "y": 0 + }, + "topLeftCorner": { + "x": 0, + "y": 0 + }, + "bottomRightCorner": { + "x": 65, + "y": 65 + }, + "bottomLeftCorner": { + "x": 0, + "y": 65 + }, + "topRightFinderPattern": { + "x": 61.5, + "y": 3.5 + }, + "topLeftFinderPattern": { + "x": 3.5, + "y": 3.5 + }, + "bottomLeftFinderPattern": { + "x": 3.5, + "y": 61.5 + }, + "bottomRightAlignmentPattern": { + "x": 58.5, + "y": 58.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/40/input.png b/jsQR/tests/end-to-end/40/input.png new file mode 100755 index 0000000000000000000000000000000000000000..4c73b769fdad0c5248428a4af1cf9e5dbe533c98 Binary files /dev/null and b/jsQR/tests/end-to-end/40/input.png differ diff --git a/jsQR/tests/end-to-end/40/output.json b/jsQR/tests/end-to-end/40/output.json new file mode 100644 index 0000000000000000000000000000000000000000..707895bb467d2504ac99a7c4da73b37882cba448 --- /dev/null +++ b/jsQR/tests/end-to-end/40/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 204.46121651506124, + "y": 38.054912775169434 + }, + "topLeftCorner": { + "x": 57.61273429831705, + "y": 41.92399929309887 + }, + "bottomRightCorner": { + "x": 217.17862552127212, + "y": 176.7171037508463 + }, + "bottomLeftCorner": { + "x": 49.38910991086893, + "y": 179.78064954867307 + }, + "topRightFinderPattern": { + "x": 189.75, + "y": 51.5 + }, + "topLeftFinderPattern": { + "x": 72.5, + "y": 54.5 + }, + "bottomLeftFinderPattern": { + "x": 67.75, + "y": 163 + }, + "bottomRightAlignmentPattern": { + "x": 182, + "y": 147 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/41/input.png b/jsQR/tests/end-to-end/41/input.png new file mode 100755 index 0000000000000000000000000000000000000000..62ff369f7c0d70ca2c1555a04a817e08cb29d236 Binary files /dev/null and b/jsQR/tests/end-to-end/41/input.png differ diff --git a/jsQR/tests/end-to-end/41/output.json b/jsQR/tests/end-to-end/41/output.json new file mode 100644 index 0000000000000000000000000000000000000000..08478a868b67ec429110f9df7bbb0680692fe1d1 --- /dev/null +++ b/jsQR/tests/end-to-end/41/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 168.95725239734153, + "y": 55.74720758583428 + }, + "topLeftCorner": { + "x": 50.89135099705054, + "y": 60.56607977488549 + }, + "bottomRightCorner": { + "x": 192.49029791925136, + "y": 172.41132392609225 + }, + "bottomLeftCorner": { + "x": 67.867252929473, + "y": 186.71915658194067 + }, + "topRightFinderPattern": { + "x": 159.5, + "y": 68 + }, + "topLeftFinderPattern": { + "x": 66, + "y": 72.5 + }, + "bottomLeftFinderPattern": { + "x": 80, + "y": 171 + }, + "bottomRightAlignmentPattern": { + "x": 164.75, + "y": 150.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/42/input.png b/jsQR/tests/end-to-end/42/input.png new file mode 100755 index 0000000000000000000000000000000000000000..fce05e1a3f371880df9c04f3a43dc933c14d1b42 Binary files /dev/null and b/jsQR/tests/end-to-end/42/input.png differ diff --git a/jsQR/tests/end-to-end/42/output.json b/jsQR/tests/end-to-end/42/output.json new file mode 100644 index 0000000000000000000000000000000000000000..956535665be28a2d866ec6e64ec910cc527ad0a0 --- /dev/null +++ b/jsQR/tests/end-to-end/42/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 154.27587127158557, + "y": 77.72590266875982 + }, + "topLeftCorner": { + "x": 58.87790637351669, + "y": 70.12374319889591 + }, + "bottomRightCorner": { + "x": 145.90928054568016, + "y": 171.12311569498686 + }, + "bottomLeftCorner": { + "x": 52.41506939999475, + "y": 163.40321265421002 + }, + "topRightFinderPattern": { + "x": 143.25, + "y": 87 + }, + "topLeftFinderPattern": { + "x": 68.25, + "y": 81 + }, + "bottomLeftFinderPattern": { + "x": 63, + "y": 154.5 + }, + "bottomRightAlignmentPattern": { + "x": 129, + "y": 151.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/43/input.png b/jsQR/tests/end-to-end/43/input.png new file mode 100755 index 0000000000000000000000000000000000000000..56635317f2bfab927d13d5f13a35b366637b18d1 Binary files /dev/null and b/jsQR/tests/end-to-end/43/input.png differ diff --git a/jsQR/tests/end-to-end/43/output.json b/jsQR/tests/end-to-end/43/output.json new file mode 100644 index 0000000000000000000000000000000000000000..a26397a2b62c1384dce48f2d909d3e7f3e85ef13 --- /dev/null +++ b/jsQR/tests/end-to-end/43/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 197.03384016840204, + "y": 54.3409953764613 + }, + "topLeftCorner": { + "x": 80.23045335925907, + "y": 58.83626703508502 + }, + "bottomRightCorner": { + "x": 194.47064259311912, + "y": 190.12181783717187 + }, + "bottomLeftCorner": { + "x": 77.00071332806216, + "y": 181.995273127299 + }, + "topRightFinderPattern": { + "x": 183.25, + "y": 69 + }, + "topLeftFinderPattern": { + "x": 91.25, + "y": 71.5 + }, + "bottomLeftFinderPattern": { + "x": 88.75, + "y": 169.5 + }, + "bottomRightAlignmentPattern": { + "x": 170, + "y": 162 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/44/input.png b/jsQR/tests/end-to-end/44/input.png new file mode 100755 index 0000000000000000000000000000000000000000..cfd247c788b55607ce606011b9d5160a93ae9a27 Binary files /dev/null and b/jsQR/tests/end-to-end/44/input.png differ diff --git a/jsQR/tests/end-to-end/44/output.json b/jsQR/tests/end-to-end/44/output.json new file mode 100644 index 0000000000000000000000000000000000000000..c156691ac864d3f81a6e6b5f23cdb87acca226b3 --- /dev/null +++ b/jsQR/tests/end-to-end/44/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 131.94742701036262, + "y": 66.03999671675318 + }, + "topLeftCorner": { + "x": 44.648226286605144, + "y": 105.4069161339479 + }, + "bottomRightCorner": { + "x": 172.44830648601527, + "y": 155.08694731005667 + }, + "bottomLeftCorner": { + "x": 82.44683141626247, + "y": 194.23384684506385 + }, + "topRightFinderPattern": { + "x": 126.75, + "y": 79.5 + }, + "topLeftFinderPattern": { + "x": 57.75, + "y": 110.5 + }, + "bottomLeftFinderPattern": { + "x": 87.75, + "y": 180.5 + }, + "bottomRightAlignmentPattern": { + "x": 146.5, + "y": 145 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/45/input.png b/jsQR/tests/end-to-end/45/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1613197e6aee62ee78317a902c34b9c196ffc9f5 Binary files /dev/null and b/jsQR/tests/end-to-end/45/input.png differ diff --git a/jsQR/tests/end-to-end/45/output.json b/jsQR/tests/end-to-end/45/output.json new file mode 100644 index 0000000000000000000000000000000000000000..bc4c164876be65670b195fce73c0a35ecc456106 --- /dev/null +++ b/jsQR/tests/end-to-end/45/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 211.29535639837167, + "y": 75.75495832796132 + }, + "topLeftCorner": { + "x": 61.558537166056844, + "y": 61.0935166157085 + }, + "bottomRightCorner": { + "x": 176.56412600859662, + "y": 193.43840962220042 + }, + "bottomLeftCorner": { + "x": 44.63374602785003, + "y": 188.76740269349597 + }, + "topRightFinderPattern": { + "x": 192.5, + "y": 88.5 + }, + "topLeftFinderPattern": { + "x": 76.25, + "y": 78 + }, + "bottomLeftFinderPattern": { + "x": 61.25, + "y": 177.5 + }, + "bottomRightAlignmentPattern": { + "x": 157.5, + "y": 171.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/46/input.png b/jsQR/tests/end-to-end/46/input.png new file mode 100755 index 0000000000000000000000000000000000000000..15470941aa139036e00666d026f0e06cdee0d577 Binary files /dev/null and b/jsQR/tests/end-to-end/46/input.png differ diff --git a/jsQR/tests/end-to-end/46/output.json b/jsQR/tests/end-to-end/46/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f3cab248f39b13c63b9f356a3babe93f8bb93e69 --- /dev/null +++ b/jsQR/tests/end-to-end/46/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 192.56479339236165, + "y": 50.643938602578814 + }, + "topLeftCorner": { + "x": 49.81945630916312, + "y": 57.23790328749101 + }, + "bottomRightCorner": { + "x": 208.11405304837805, + "y": 188.31962746379006 + }, + "bottomLeftCorner": { + "x": 53.949645087043024, + "y": 201.14038533406756 + }, + "topRightFinderPattern": { + "x": 177.5, + "y": 67 + }, + "topLeftFinderPattern": { + "x": 68.25, + "y": 72.5 + }, + "bottomLeftFinderPattern": { + "x": 72.5, + "y": 181 + }, + "bottomRightAlignmentPattern": { + "x": 171.5, + "y": 158 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/47/input.png b/jsQR/tests/end-to-end/47/input.png new file mode 100755 index 0000000000000000000000000000000000000000..cd727f2afcdb338729ee039f11006f47e94cd128 Binary files /dev/null and b/jsQR/tests/end-to-end/47/input.png differ diff --git a/jsQR/tests/end-to-end/47/output.json b/jsQR/tests/end-to-end/47/output.json new file mode 100644 index 0000000000000000000000000000000000000000..11226f805469d317b04c354e0baaf855dcfef80b --- /dev/null +++ b/jsQR/tests/end-to-end/47/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 174.69484329414277, + "y": 143.80129126734656 + }, + "topLeftCorner": { + "x": 172.8150574589121, + "y": 319.5352889423832 + }, + "bottomRightCorner": { + "x": 355.16996835024645, + "y": 149.67044044086632 + }, + "bottomLeftCorner": { + "x": 353.09398392341996, + "y": 314.5819632576511 + }, + "topRightFinderPattern": { + "x": 194.75, + "y": 163 + }, + "topLeftFinderPattern": { + "x": 193.25, + "y": 300.5 + }, + "bottomLeftFinderPattern": { + "x": 335.25, + "y": 297.5 + }, + "bottomRightAlignmentPattern": { + "x": 321, + "y": 181.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/48/input.png b/jsQR/tests/end-to-end/48/input.png new file mode 100755 index 0000000000000000000000000000000000000000..64faf8e6b6c5074b061bc8d7261f4e5c485effd3 Binary files /dev/null and b/jsQR/tests/end-to-end/48/input.png differ diff --git a/jsQR/tests/end-to-end/48/output.json b/jsQR/tests/end-to-end/48/output.json new file mode 100644 index 0000000000000000000000000000000000000000..24e771058880965764be870455dc4984f428faee --- /dev/null +++ b/jsQR/tests/end-to-end/48/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 166.71169637789055, + "y": 52.71830181228868 + }, + "topLeftCorner": { + "x": 36.088001097226055, + "y": 57.24141537699862 + }, + "bottomRightCorner": { + "x": 164.93906939742615, + "y": 176.12610270370263 + }, + "bottomLeftCorner": { + "x": 41.68907817916808, + "y": 185.35651096727855 + }, + "topRightFinderPattern": { + "x": 153.25, + "y": 67 + }, + "topLeftFinderPattern": { + "x": 51, + "y": 71 + }, + "bottomLeftFinderPattern": { + "x": 54.75, + "y": 171.5 + }, + "bottomRightAlignmentPattern": { + "x": 141.5, + "y": 154.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/49/input.png b/jsQR/tests/end-to-end/49/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d58e9832bf180a55f7e3bc998d6fb9966ab6d24c Binary files /dev/null and b/jsQR/tests/end-to-end/49/input.png differ diff --git a/jsQR/tests/end-to-end/49/output.json b/jsQR/tests/end-to-end/49/output.json new file mode 100644 index 0000000000000000000000000000000000000000..bcd4f05f8a8d4d83b149a953ab19a27cfa9cec79 --- /dev/null +++ b/jsQR/tests/end-to-end/49/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 177.03956182091812, + "y": 50.24703574504363 + }, + "topLeftCorner": { + "x": 52.37836923754604, + "y": 67.06028402888157 + }, + "bottomRightCorner": { + "x": 192.2328708214323, + "y": 174.64066986264024 + }, + "bottomLeftCorner": { + "x": 70.08789311450826, + "y": 188.61774065897444 + }, + "topRightFinderPattern": { + "x": 165.25, + "y": 65.5 + }, + "topLeftFinderPattern": { + "x": 67.25, + "y": 78.5 + }, + "bottomLeftFinderPattern": { + "x": 81, + "y": 174.5 + }, + "bottomRightAlignmentPattern": { + "x": 164.75, + "y": 153.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/5/input.png b/jsQR/tests/end-to-end/5/input.png new file mode 100755 index 0000000000000000000000000000000000000000..45d6b391d72552cb3d8e32a96ecc5b285cf49795 Binary files /dev/null and b/jsQR/tests/end-to-end/5/input.png differ diff --git a/jsQR/tests/end-to-end/5/output.json b/jsQR/tests/end-to-end/5/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/5/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/50/input.png b/jsQR/tests/end-to-end/50/input.png new file mode 100755 index 0000000000000000000000000000000000000000..cb6b401305eb2e8eeb362d782b8eb831549cfc77 Binary files /dev/null and b/jsQR/tests/end-to-end/50/input.png differ diff --git a/jsQR/tests/end-to-end/50/output.json b/jsQR/tests/end-to-end/50/output.json new file mode 100644 index 0000000000000000000000000000000000000000..c9a0de1bc5f8f5c37887abcd8c9f372fc651af95 --- /dev/null +++ b/jsQR/tests/end-to-end/50/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 205.0998702567321, + "y": 66.80851683219431 + }, + "topLeftCorner": { + "x": 65.45319138929334, + "y": 65.48946771999334 + }, + "bottomRightCorner": { + "x": 210.1364700912612, + "y": 209.81194024065957 + }, + "bottomLeftCorner": { + "x": 61.296530772116434, + "y": 209.02462298916524 + }, + "topRightFinderPattern": { + "x": 190.75, + "y": 81 + }, + "topLeftFinderPattern": { + "x": 80, + "y": 80 + }, + "bottomLeftFinderPattern": { + "x": 77.5, + "y": 193 + }, + "bottomRightAlignmentPattern": { + "x": 180.25, + "y": 180 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/51/input.png b/jsQR/tests/end-to-end/51/input.png new file mode 100755 index 0000000000000000000000000000000000000000..f9d38b11d0a0f8d50aac366a3c67952c2b977f30 Binary files /dev/null and b/jsQR/tests/end-to-end/51/input.png differ diff --git a/jsQR/tests/end-to-end/51/output.json b/jsQR/tests/end-to-end/51/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4533c8b6c7070439ca16763f5a52f9c2b918c85a --- /dev/null +++ b/jsQR/tests/end-to-end/51/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 173.16275919558194, + "y": 83.15716188482813 + }, + "topLeftCorner": { + "x": 35.84721122982896, + "y": 68.4375478169107 + }, + "bottomRightCorner": { + "x": 157.06472209332088, + "y": 226.92492022947627 + }, + "bottomLeftCorner": { + "x": 12.596046046344762, + "y": 206.91411470736276 + }, + "topRightFinderPattern": { + "x": 156.5, + "y": 96 + }, + "topLeftFinderPattern": { + "x": 47.75, + "y": 84 + }, + "bottomLeftFinderPattern": { + "x": 30, + "y": 193.5 + }, + "bottomRightAlignmentPattern": { + "x": 131.5, + "y": 193.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/52/input.png b/jsQR/tests/end-to-end/52/input.png new file mode 100755 index 0000000000000000000000000000000000000000..9e6369394d5e871fe394c5afa35c6f7465b19676 Binary files /dev/null and b/jsQR/tests/end-to-end/52/input.png differ diff --git a/jsQR/tests/end-to-end/52/output.json b/jsQR/tests/end-to-end/52/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e1d65ad3b594c1672ed0b78ee9382b2ee3d1dbe9 --- /dev/null +++ b/jsQR/tests/end-to-end/52/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 181.29164830695183, + "y": 64.88021557129782 + }, + "topLeftCorner": { + "x": 57.76117632904212, + "y": 74.17768687372165 + }, + "bottomRightCorner": { + "x": 195.5158231766641, + "y": 188.55360775503704 + }, + "bottomLeftCorner": { + "x": 66.70758984669514, + "y": 200.09575270168384 + }, + "topRightFinderPattern": { + "x": 169.75, + "y": 78.5 + }, + "topLeftFinderPattern": { + "x": 72, + "y": 86 + }, + "bottomLeftFinderPattern": { + "x": 79.5, + "y": 185 + }, + "bottomRightAlignmentPattern": { + "x": 167.75, + "y": 165.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/53/input.png b/jsQR/tests/end-to-end/53/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c47245ebf3bcd8334912172f49931e8a8e6c401e Binary files /dev/null and b/jsQR/tests/end-to-end/53/input.png differ diff --git a/jsQR/tests/end-to-end/53/output.json b/jsQR/tests/end-to-end/53/output.json new file mode 100644 index 0000000000000000000000000000000000000000..59e48a4df72ccfa12454b179c74146db0d224f7d --- /dev/null +++ b/jsQR/tests/end-to-end/53/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 194.40834009741488, + "y": 39.064299032268984 + }, + "topLeftCorner": { + "x": 50.74928501746011, + "y": 14.763645667065537 + }, + "bottomRightCorner": { + "x": 172.7346446473308, + "y": 180.9776152212169 + }, + "bottomLeftCorner": { + "x": 30.982983525144828, + "y": 164.09263007979212 + }, + "topRightFinderPattern": { + "x": 177.5, + "y": 52 + }, + "topLeftFinderPattern": { + "x": 64.5, + "y": 33.5 + }, + "bottomLeftFinderPattern": { + "x": 48.75, + "y": 150.5 + }, + "bottomRightAlignmentPattern": { + "x": 150, + "y": 150 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/54/input.png b/jsQR/tests/end-to-end/54/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ebf084dbc94edffc86cf02b5349fd2a052f05f08 Binary files /dev/null and b/jsQR/tests/end-to-end/54/input.png differ diff --git a/jsQR/tests/end-to-end/54/output.json b/jsQR/tests/end-to-end/54/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cf8aca225ef4a88beaaf30d705474013e16ae610 --- /dev/null +++ b/jsQR/tests/end-to-end/54/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 180.37734872849876, + "y": 49.20529376508983 + }, + "topLeftCorner": { + "x": 47.974400899186314, + "y": 82.95685132072329 + }, + "bottomRightCorner": { + "x": 213.28170763798173, + "y": 184.96267298448763 + }, + "bottomLeftCorner": { + "x": 72.16316244039749, + "y": 217.39743081111243 + }, + "topRightFinderPattern": { + "x": 169.25, + "y": 66.5 + }, + "topLeftFinderPattern": { + "x": 64.25, + "y": 93 + }, + "bottomLeftFinderPattern": { + "x": 84, + "y": 199 + }, + "bottomRightAlignmentPattern": { + "x": 178.5, + "y": 163.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/55/input.png b/jsQR/tests/end-to-end/55/input.png new file mode 100755 index 0000000000000000000000000000000000000000..197c78c46bdcb7e32710fa89b96c6ab9f4d86c8f Binary files /dev/null and b/jsQR/tests/end-to-end/55/input.png differ diff --git a/jsQR/tests/end-to-end/55/output.json b/jsQR/tests/end-to-end/55/output.json new file mode 100644 index 0000000000000000000000000000000000000000..c91c42577c6bba34295d6ec9681e8d7b1a8fce09 --- /dev/null +++ b/jsQR/tests/end-to-end/55/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 199.32594011232172, + "y": 93.40514764874868 + }, + "topLeftCorner": { + "x": 70.01662619745709, + "y": 63.701064328549336 + }, + "bottomRightCorner": { + "x": 175.52986230358007, + "y": 224.8226275716831 + }, + "bottomLeftCorner": { + "x": 44.06832263309877, + "y": 205.80023269505733 + }, + "topRightFinderPattern": { + "x": 184, + "y": 104.5 + }, + "topLeftFinderPattern": { + "x": 82, + "y": 82 + }, + "bottomLeftFinderPattern": { + "x": 61.75, + "y": 193 + }, + "bottomRightAlignmentPattern": { + "x": 156, + "y": 195 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/56/input.png b/jsQR/tests/end-to-end/56/input.png new file mode 100755 index 0000000000000000000000000000000000000000..50ff9b8bb59b15e29c259276f0277982f51dd415 Binary files /dev/null and b/jsQR/tests/end-to-end/56/input.png differ diff --git a/jsQR/tests/end-to-end/56/output.json b/jsQR/tests/end-to-end/56/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e76e01c1b6ea352e785e3fb797d8262cbbe7d823 --- /dev/null +++ b/jsQR/tests/end-to-end/56/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 209.84323572033225, + "y": 93.83147768196622 + }, + "topLeftCorner": { + "x": 90.66906980836795, + "y": 49.09210388573716 + }, + "bottomRightCorner": { + "x": 152.1159131686187, + "y": 211.76640596085193 + }, + "bottomLeftCorner": { + "x": 30.799955479570773, + "y": 180.81349680602412 + }, + "topRightFinderPattern": { + "x": 192, + "y": 102.5 + }, + "topLeftFinderPattern": { + "x": 98, + "y": 68.5 + }, + "bottomLeftFinderPattern": { + "x": 51, + "y": 171 + }, + "bottomRightAlignmentPattern": { + "x": 141.25, + "y": 183 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/57/input.png b/jsQR/tests/end-to-end/57/input.png new file mode 100755 index 0000000000000000000000000000000000000000..668a20bb855e049119cf9b4f4fc716d98619b757 Binary files /dev/null and b/jsQR/tests/end-to-end/57/input.png differ diff --git a/jsQR/tests/end-to-end/57/output.json b/jsQR/tests/end-to-end/57/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8a3dbbdebd486589f1103f2c87b803865864b55c --- /dev/null +++ b/jsQR/tests/end-to-end/57/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 207.86091703955856, + "y": 103.49288988936775 + }, + "topLeftCorner": { + "x": 108.66939233296867, + "y": 39.08544628383884 + }, + "bottomRightCorner": { + "x": 141.1042412985018, + "y": 205.89324096372349 + }, + "bottomLeftCorner": { + "x": 36.12506482966607, + "y": 133.81860659437757 + }, + "topRightFinderPattern": { + "x": 188, + "y": 107 + }, + "topLeftFinderPattern": { + "x": 112.25, + "y": 57.5 + }, + "bottomLeftFinderPattern": { + "x": 57.75, + "y": 130 + }, + "bottomRightAlignmentPattern": { + "x": 133.25, + "y": 165.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/58/input.png b/jsQR/tests/end-to-end/58/input.png new file mode 100755 index 0000000000000000000000000000000000000000..bcd098fa3fe3d8b352189ca49d17681aba15f3e3 Binary files /dev/null and b/jsQR/tests/end-to-end/58/input.png differ diff --git a/jsQR/tests/end-to-end/58/output.json b/jsQR/tests/end-to-end/58/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8dbd8c02e039f619c38fcbd6023ca265c3aa08b0 --- /dev/null +++ b/jsQR/tests/end-to-end/58/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 199.97292474235388, + "y": 50.12548204195846 + }, + "topLeftCorner": { + "x": 55.262045805342304, + "y": 43.31111152940546 + }, + "bottomRightCorner": { + "x": 189.35882404058236, + "y": 203.20970888307923 + }, + "bottomLeftCorner": { + "x": 34.96792888257937, + "y": 187.84119012492414 + }, + "topRightFinderPattern": { + "x": 182.75, + "y": 64.5 + }, + "topLeftFinderPattern": { + "x": 68, + "y": 58.5 + }, + "bottomLeftFinderPattern": { + "x": 52.75, + "y": 173 + }, + "bottomRightAlignmentPattern": { + "x": 160.25, + "y": 168.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/59/input.png b/jsQR/tests/end-to-end/59/input.png new file mode 100755 index 0000000000000000000000000000000000000000..388c40b18a5b2214a01d206a473a67c0b4ce4114 Binary files /dev/null and b/jsQR/tests/end-to-end/59/input.png differ diff --git a/jsQR/tests/end-to-end/59/output.json b/jsQR/tests/end-to-end/59/output.json new file mode 100644 index 0000000000000000000000000000000000000000..2b0da8cbf9c7092b210f9a783ccd750d79e3dc2b --- /dev/null +++ b/jsQR/tests/end-to-end/59/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 417.6004234807257, + "y": 359.44974113157826 + }, + "topLeftCorner": { + "x": 410.9851709131803, + "y": 127.16341084040468 + }, + "bottomRightCorner": { + "x": 168.77390619511115, + "y": 360.7499420967029 + }, + "bottomLeftCorner": { + "x": 173.1589889917546, + "y": 134.0556911482413 + }, + "topRightFinderPattern": { + "x": 390, + "y": 334 + }, + "topLeftFinderPattern": { + "x": 385.75, + "y": 151.5 + }, + "bottomLeftFinderPattern": { + "x": 197.5, + "y": 156.5 + }, + "bottomRightAlignmentPattern": { + "x": 217.25, + "y": 314 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/6/input.png b/jsQR/tests/end-to-end/6/input.png new file mode 100755 index 0000000000000000000000000000000000000000..0f55ee4ff6c0adf2f568cc73b740ba4bf0dc72f1 Binary files /dev/null and b/jsQR/tests/end-to-end/6/input.png differ diff --git a/jsQR/tests/end-to-end/6/output.json b/jsQR/tests/end-to-end/6/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cd839639eafe7d74f282ff78ea593597e08c1628 --- /dev/null +++ b/jsQR/tests/end-to-end/6/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47 + ], + "data": "http://www.google.com/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47 + ], + "text": "http://www.google.com/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 87, + "y": 12 + }, + "topLeftCorner": { + "x": 12, + "y": 12 + }, + "bottomRightCorner": { + "x": 87, + "y": 87 + }, + "bottomLeftCorner": { + "x": 12, + "y": 87 + }, + "topRightFinderPattern": { + "x": 76.5, + "y": 22.5 + }, + "topLeftFinderPattern": { + "x": 22.5, + "y": 22.5 + }, + "bottomLeftFinderPattern": { + "x": 22.5, + "y": 76.5 + }, + "bottomRightAlignmentPattern": { + "x": 67.5, + "y": 67.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/60/input.png b/jsQR/tests/end-to-end/60/input.png new file mode 100755 index 0000000000000000000000000000000000000000..96aa633f6847654c6a3722ccf1822294439d7d63 Binary files /dev/null and b/jsQR/tests/end-to-end/60/input.png differ diff --git a/jsQR/tests/end-to-end/60/output.json b/jsQR/tests/end-to-end/60/output.json new file mode 100644 index 0000000000000000000000000000000000000000..93798338792f8c5eaa407bb5a059d8e7a29da9d9 --- /dev/null +++ b/jsQR/tests/end-to-end/60/output.json @@ -0,0 +1,170 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "data": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 59, + 84, + 69, + 76, + 58, + 43, + 49, + 50, + 49, + 50, + 53, + 54, + 53, + 56, + 55, + 55, + 48, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 59, + 59 + ], + "text": "MECARD:N:Sean Owen;TEL:+12125658770;EMAIL:srowen@google.com;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 207.2041901285296, + "y": 34.40135705017301 + }, + "topLeftCorner": { + "x": 74.48715613311458, + "y": 49.08476638595626 + }, + "bottomRightCorner": { + "x": 196.2497094492685, + "y": 196.38414699334 + }, + "bottomLeftCorner": { + "x": 52.00458760614269, + "y": 188.64881477180913 + }, + "topRightFinderPattern": { + "x": 190, + "y": 51.5 + }, + "topLeftFinderPattern": { + "x": 84.75, + "y": 61.5 + }, + "bottomLeftFinderPattern": { + "x": 67.75, + "y": 173 + }, + "bottomRightAlignmentPattern": { + "x": 167, + "y": 161 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/61/input.png b/jsQR/tests/end-to-end/61/input.png new file mode 100755 index 0000000000000000000000000000000000000000..9332ace22039ebfcfd1bced6741ce79283857e52 Binary files /dev/null and b/jsQR/tests/end-to-end/61/input.png differ diff --git a/jsQR/tests/end-to-end/61/output.json b/jsQR/tests/end-to-end/61/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1b5cb6c0856bd8bddca4414e934ee8f9f3035d8f --- /dev/null +++ b/jsQR/tests/end-to-end/61/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 207.7810586662029, + "y": 35.39166271880641 + }, + "topLeftCorner": { + "x": 37.31970355694221, + "y": 39.672933251301814 + }, + "bottomRightCorner": { + "x": 199.80450482609717, + "y": 207.49761061850413 + }, + "bottomLeftCorner": { + "x": 37.57948911702004, + "y": 204.27384025598016 + }, + "topRightFinderPattern": { + "x": 185.5, + "y": 57.5 + }, + "topLeftFinderPattern": { + "x": 57, + "y": 60 + }, + "bottomLeftFinderPattern": { + "x": 56.5, + "y": 185.5 + }, + "bottomRightAlignmentPattern": { + "x": 163.5, + "y": 170 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/62/input.png b/jsQR/tests/end-to-end/62/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ca10fc5df4134a3ec0ce2e10961c5e16f7a6d374 Binary files /dev/null and b/jsQR/tests/end-to-end/62/input.png differ diff --git a/jsQR/tests/end-to-end/62/output.json b/jsQR/tests/end-to-end/62/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e43868a4bb7d6bb5240694a3a2d942b319531bc8 --- /dev/null +++ b/jsQR/tests/end-to-end/62/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 177.9129243109161, + "y": 40.898685780961706 + }, + "topLeftCorner": { + "x": 34.82768101694381, + "y": 48.407689638675826 + }, + "bottomRightCorner": { + "x": 182.13030236218856, + "y": 186.95589162748487 + }, + "bottomLeftCorner": { + "x": 39.49792635678976, + "y": 197.76901679563827 + }, + "topRightFinderPattern": { + "x": 161.5, + "y": 59.5 + }, + "topLeftFinderPattern": { + "x": 53, + "y": 65.5 + }, + "bottomLeftFinderPattern": { + "x": 56.5, + "y": 178.5 + }, + "bottomRightAlignmentPattern": { + "x": 149.75, + "y": 156.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/63/input.png b/jsQR/tests/end-to-end/63/input.png new file mode 100755 index 0000000000000000000000000000000000000000..f0eea85fe31f2686c94cf1bd4a2d35a4c28f1d1f Binary files /dev/null and b/jsQR/tests/end-to-end/63/input.png differ diff --git a/jsQR/tests/end-to-end/63/output.json b/jsQR/tests/end-to-end/63/output.json new file mode 100644 index 0000000000000000000000000000000000000000..be5bc547d5d2612551ebd0d75220eb02172c7b2a --- /dev/null +++ b/jsQR/tests/end-to-end/63/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 178.7315144607494, + "y": 36.01276693419449 + }, + "topLeftCorner": { + "x": 42.233295311940594, + "y": 43.982645242133195 + }, + "bottomRightCorner": { + "x": 178.54198858139708, + "y": 174.19932987384863 + }, + "bottomLeftCorner": { + "x": 45.25600623100253, + "y": 181.68233394048613 + }, + "topRightFinderPattern": { + "x": 162.25, + "y": 54 + }, + "topLeftFinderPattern": { + "x": 59, + "y": 60 + }, + "bottomLeftFinderPattern": { + "x": 61, + "y": 164.5 + }, + "bottomRightAlignmentPattern": { + "x": 148.5, + "y": 145.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/64/input.png b/jsQR/tests/end-to-end/64/input.png new file mode 100755 index 0000000000000000000000000000000000000000..8922b2dd0dcbb08dfdb574771e138edc2c9db8fb Binary files /dev/null and b/jsQR/tests/end-to-end/64/input.png differ diff --git a/jsQR/tests/end-to-end/64/output.json b/jsQR/tests/end-to-end/64/output.json new file mode 100644 index 0000000000000000000000000000000000000000..619b807751d855792bf530282742b744595f9c67 --- /dev/null +++ b/jsQR/tests/end-to-end/64/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 191.23668731918312, + "y": 61.09083164501851 + }, + "topLeftCorner": { + "x": 48.88211039692348, + "y": 67.84979178548036 + }, + "bottomRightCorner": { + "x": 186.74175052312899, + "y": 200.01275256762779 + }, + "bottomLeftCorner": { + "x": 52.110747325360514, + "y": 205.49168879500496 + }, + "topRightFinderPattern": { + "x": 173.5, + "y": 79.5 + }, + "topLeftFinderPattern": { + "x": 66.25, + "y": 84.5 + }, + "bottomLeftFinderPattern": { + "x": 68, + "y": 189 + }, + "bottomRightAlignmentPattern": { + "x": 157, + "y": 171.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/65/input.png b/jsQR/tests/end-to-end/65/input.png new file mode 100755 index 0000000000000000000000000000000000000000..3a206bded8f40da7d8505e94f785747f9fcec0ba Binary files /dev/null and b/jsQR/tests/end-to-end/65/input.png differ diff --git a/jsQR/tests/end-to-end/65/output.json b/jsQR/tests/end-to-end/65/output.json new file mode 100644 index 0000000000000000000000000000000000000000..2bf74cf99c887dc2eb60bdc51827d1a38976a397 --- /dev/null +++ b/jsQR/tests/end-to-end/65/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 194.16576360970876, + "y": 51.399393480371074 + }, + "topLeftCorner": { + "x": 50.578357704744626, + "y": 54.11041104308349 + }, + "bottomRightCorner": { + "x": 193.2961993404016, + "y": 198.75167372504313 + }, + "bottomLeftCorner": { + "x": 45.86582044401154, + "y": 195.0855606364688 + }, + "topRightFinderPattern": { + "x": 176, + "y": 69 + }, + "topLeftFinderPattern": { + "x": 66.75, + "y": 70.5 + }, + "bottomLeftFinderPattern": { + "x": 63.5, + "y": 178 + }, + "bottomRightAlignmentPattern": { + "x": 159.5, + "y": 164.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/66/input.png b/jsQR/tests/end-to-end/66/input.png new file mode 100755 index 0000000000000000000000000000000000000000..5ea0640adb72429f6bb8281b1f5d944f2573f2fe Binary files /dev/null and b/jsQR/tests/end-to-end/66/input.png differ diff --git a/jsQR/tests/end-to-end/66/output.json b/jsQR/tests/end-to-end/66/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/66/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/67/input.png b/jsQR/tests/end-to-end/67/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1e3b8a4468b8d9d81f5f01523674f2832cc2a3a5 Binary files /dev/null and b/jsQR/tests/end-to-end/67/input.png differ diff --git a/jsQR/tests/end-to-end/67/output.json b/jsQR/tests/end-to-end/67/output.json new file mode 100644 index 0000000000000000000000000000000000000000..1a8ca66d5ac9db442c110509c7e9539195bc4139 --- /dev/null +++ b/jsQR/tests/end-to-end/67/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 182.62747042236464, + "y": 45.863580252860054 + }, + "topLeftCorner": { + "x": 41.612430415383294, + "y": 62.5368757224118 + }, + "bottomRightCorner": { + "x": 201.7323599370363, + "y": 188.48252772025876 + }, + "bottomLeftCorner": { + "x": 54.75685120975745, + "y": 203.3949101075668 + }, + "topRightFinderPattern": { + "x": 167.5, + "y": 64.5 + }, + "topLeftFinderPattern": { + "x": 60, + "y": 77 + }, + "bottomLeftFinderPattern": { + "x": 70.5, + "y": 184 + }, + "bottomRightAlignmentPattern": { + "x": 164.25, + "y": 159 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/68/input.png b/jsQR/tests/end-to-end/68/input.png new file mode 100755 index 0000000000000000000000000000000000000000..de12827c6a9b9a6aa4371a685a5fcf4493a7bd94 Binary files /dev/null and b/jsQR/tests/end-to-end/68/input.png differ diff --git a/jsQR/tests/end-to-end/68/output.json b/jsQR/tests/end-to-end/68/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f4a13aa77ed7d9c025982d5f3694666b846146c5 --- /dev/null +++ b/jsQR/tests/end-to-end/68/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 198.97054789280406, + "y": 59.00604944478448 + }, + "topLeftCorner": { + "x": 67.55070859306473, + "y": 60.66672993494301 + }, + "bottomRightCorner": { + "x": 213.77064904274286, + "y": 182.90350554895966 + }, + "bottomLeftCorner": { + "x": 63.158311884320696, + "y": 187.87897412436726 + }, + "topRightFinderPattern": { + "x": 184.75, + "y": 72.5 + }, + "topLeftFinderPattern": { + "x": 83.5, + "y": 74 + }, + "bottomLeftFinderPattern": { + "x": 82, + "y": 170 + }, + "bottomRightAlignmentPattern": { + "x": 178, + "y": 153 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/69/input.png b/jsQR/tests/end-to-end/69/input.png new file mode 100755 index 0000000000000000000000000000000000000000..82c965243ced664e6ece399c98899c1fb4b239e1 Binary files /dev/null and b/jsQR/tests/end-to-end/69/input.png differ diff --git a/jsQR/tests/end-to-end/69/output.json b/jsQR/tests/end-to-end/69/output.json new file mode 100644 index 0000000000000000000000000000000000000000..46306ea514f7ebba5190d4264a8f4c13d374558d --- /dev/null +++ b/jsQR/tests/end-to-end/69/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 195.85516631877286, + "y": 31.395922173921374 + }, + "topLeftCorner": { + "x": 39.24697894689316, + "y": 37.56268341999197 + }, + "bottomRightCorner": { + "x": 194.9897084223761, + "y": 176.33586610032543 + }, + "bottomLeftCorner": { + "x": 51.17480715906791, + "y": 190.2477060349186 + }, + "topRightFinderPattern": { + "x": 178, + "y": 51 + }, + "topLeftFinderPattern": { + "x": 60.5, + "y": 56.5 + }, + "bottomLeftFinderPattern": { + "x": 68.25, + "y": 171.5 + }, + "bottomRightAlignmentPattern": { + "x": 163.75, + "y": 148.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/7/input.png b/jsQR/tests/end-to-end/7/input.png new file mode 100755 index 0000000000000000000000000000000000000000..6b17f3efd5916b56c08a45e31407ac17fc5522c7 Binary files /dev/null and b/jsQR/tests/end-to-end/7/input.png differ diff --git a/jsQR/tests/end-to-end/7/output.json b/jsQR/tests/end-to-end/7/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cd839639eafe7d74f282ff78ea593597e08c1628 --- /dev/null +++ b/jsQR/tests/end-to-end/7/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47 + ], + "data": "http://www.google.com/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47 + ], + "text": "http://www.google.com/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 87, + "y": 12 + }, + "topLeftCorner": { + "x": 12, + "y": 12 + }, + "bottomRightCorner": { + "x": 87, + "y": 87 + }, + "bottomLeftCorner": { + "x": 12, + "y": 87 + }, + "topRightFinderPattern": { + "x": 76.5, + "y": 22.5 + }, + "topLeftFinderPattern": { + "x": 22.5, + "y": 22.5 + }, + "bottomLeftFinderPattern": { + "x": 22.5, + "y": 76.5 + }, + "bottomRightAlignmentPattern": { + "x": 67.5, + "y": 67.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/70/input.png b/jsQR/tests/end-to-end/70/input.png new file mode 100755 index 0000000000000000000000000000000000000000..6f1078590f6864250f37795f363ae2ccc06f91ee Binary files /dev/null and b/jsQR/tests/end-to-end/70/input.png differ diff --git a/jsQR/tests/end-to-end/70/output.json b/jsQR/tests/end-to-end/70/output.json new file mode 100644 index 0000000000000000000000000000000000000000..93d0b85092bdc5e15ef2ce176acb3e060540b34f --- /dev/null +++ b/jsQR/tests/end-to-end/70/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 179.3379693408968, + "y": 33.314998649378715 + }, + "topLeftCorner": { + "x": 28.851699448571672, + "y": 41.25117705281106 + }, + "bottomRightCorner": { + "x": 181.4150041444943, + "y": 180.49848258574792 + }, + "bottomLeftCorner": { + "x": 35.3133205786336, + "y": 188.21565063625218 + }, + "topRightFinderPattern": { + "x": 161.5, + "y": 52.5 + }, + "topLeftFinderPattern": { + "x": 47.75, + "y": 58.5 + }, + "bottomLeftFinderPattern": { + "x": 52.25, + "y": 170 + }, + "bottomRightAlignmentPattern": { + "x": 148, + "y": 150 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/71/input.png b/jsQR/tests/end-to-end/71/input.png new file mode 100755 index 0000000000000000000000000000000000000000..36604181348cb30d5bc73521de94f65c24caed75 Binary files /dev/null and b/jsQR/tests/end-to-end/71/input.png differ diff --git a/jsQR/tests/end-to-end/71/output.json b/jsQR/tests/end-to-end/71/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/71/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/72/input.png b/jsQR/tests/end-to-end/72/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d720caf4802bff0ae5983f685344ec545b1aba56 Binary files /dev/null and b/jsQR/tests/end-to-end/72/input.png differ diff --git a/jsQR/tests/end-to-end/72/output.json b/jsQR/tests/end-to-end/72/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/72/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/73/input.png b/jsQR/tests/end-to-end/73/input.png new file mode 100755 index 0000000000000000000000000000000000000000..b547f727291318e97d908490f98ca1ad338d2a77 Binary files /dev/null and b/jsQR/tests/end-to-end/73/input.png differ diff --git a/jsQR/tests/end-to-end/73/output.json b/jsQR/tests/end-to-end/73/output.json new file mode 100644 index 0000000000000000000000000000000000000000..10102f85391f7a4c1c28503429d46d5bb4be6366 --- /dev/null +++ b/jsQR/tests/end-to-end/73/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "data": "Google Print Ads - T.G.I.A.F. - January 31, 2008", + "chunks": [ + { + "type": "byte", + "bytes": [ + 71, + 111, + 111, + 103, + 108, + 101, + 32, + 80, + 114, + 105, + 110, + 116, + 32, + 65, + 100, + 115, + 32, + 45, + 32, + 84, + 46, + 71, + 46, + 73, + 46, + 65, + 46, + 70, + 46, + 32, + 45, + 32, + 74, + 97, + 110, + 117, + 97, + 114, + 121, + 32, + 51, + 49, + 44, + 32, + 50, + 48, + 48, + 56 + ], + "text": "Google Print Ads - T.G.I.A.F. - January 31, 2008" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 186.7344646823331, + "y": 42.45640552037425 + }, + "topLeftCorner": { + "x": 44.01472313320583, + "y": 48.03780943066097 + }, + "bottomRightCorner": { + "x": 188.88227699670293, + "y": 186.4073463662439 + }, + "bottomLeftCorner": { + "x": 46.34251526894994, + "y": 189.43952626771903 + }, + "topRightFinderPattern": { + "x": 169.5, + "y": 60.5 + }, + "topLeftFinderPattern": { + "x": 61.25, + "y": 64.5 + }, + "bottomLeftFinderPattern": { + "x": 63, + "y": 172 + }, + "bottomRightAlignmentPattern": { + "x": 156, + "y": 155 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/74/input.png b/jsQR/tests/end-to-end/74/input.png new file mode 100755 index 0000000000000000000000000000000000000000..fdf79a81739f57a3954560866d95f3748309d8db Binary files /dev/null and b/jsQR/tests/end-to-end/74/input.png differ diff --git a/jsQR/tests/end-to-end/74/output.json b/jsQR/tests/end-to-end/74/output.json new file mode 100644 index 0000000000000000000000000000000000000000..5c833cbffdb2a024b7366b2f35e20ebdb7a3147f --- /dev/null +++ b/jsQR/tests/end-to-end/74/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 185.61260831262294, + "y": 49.30483457826618 + }, + "topLeftCorner": { + "x": 68.40209429064569, + "y": 50.02362702328046 + }, + "bottomRightCorner": { + "x": 181.72593755372745, + "y": 166.38972111221676 + }, + "bottomLeftCorner": { + "x": 68.93151258305865, + "y": 166.645145537941 + }, + "topRightFinderPattern": { + "x": 171, + "y": 64 + }, + "topLeftFinderPattern": { + "x": 82.5, + "y": 64.5 + }, + "bottomLeftFinderPattern": { + "x": 82.5, + "y": 153 + }, + "bottomRightAlignmentPattern": { + "x": 157, + "y": 141 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/75/input.png b/jsQR/tests/end-to-end/75/input.png new file mode 100755 index 0000000000000000000000000000000000000000..5568fefed413922d5060428ae6cdfa1c060247e9 Binary files /dev/null and b/jsQR/tests/end-to-end/75/input.png differ diff --git a/jsQR/tests/end-to-end/75/output.json b/jsQR/tests/end-to-end/75/output.json new file mode 100644 index 0000000000000000000000000000000000000000..41d2d3a24ca5ecb0f4016653a91288a6234c57af --- /dev/null +++ b/jsQR/tests/end-to-end/75/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 103, + 119, + 116, + 47, + 110, + 63, + 117, + 61, + 98, + 108, + 117, + 101, + 110, + 105, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://google.com/gwt/n?u=bluenile.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 103, + 119, + 116, + 47, + 110, + 63, + 117, + 61, + 98, + 108, + 117, + 101, + 110, + 105, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://google.com/gwt/n?u=bluenile.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 223.7340619393033, + "y": 198.9945095676107 + }, + "topLeftCorner": { + "x": 225.8235611246986, + "y": 328.0561868756268 + }, + "bottomRightCorner": { + "x": 364.1031294711554, + "y": 199.35276592158394 + }, + "bottomLeftCorner": { + "x": 362.4776184099083, + "y": 329.49913750670703 + }, + "topRightFinderPattern": { + "x": 240.75, + "y": 215 + }, + "topLeftFinderPattern": { + "x": 242, + "y": 313 + }, + "bottomLeftFinderPattern": { + "x": 346, + "y": 314 + }, + "bottomRightAlignmentPattern": { + "x": 332.25, + "y": 229 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/76/input.png b/jsQR/tests/end-to-end/76/input.png new file mode 100755 index 0000000000000000000000000000000000000000..bcef3adfe83fa1da538fb56ebdf7c558f62d0f1b Binary files /dev/null and b/jsQR/tests/end-to-end/76/input.png differ diff --git a/jsQR/tests/end-to-end/76/output.json b/jsQR/tests/end-to-end/76/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/76/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/77/input.png b/jsQR/tests/end-to-end/77/input.png new file mode 100755 index 0000000000000000000000000000000000000000..bb2f55a65ba4164867e70f12796584600973b94b Binary files /dev/null and b/jsQR/tests/end-to-end/77/input.png differ diff --git a/jsQR/tests/end-to-end/77/output.json b/jsQR/tests/end-to-end/77/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/77/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/78/input.png b/jsQR/tests/end-to-end/78/input.png new file mode 100755 index 0000000000000000000000000000000000000000..1203c16477415afd745352a0e8c4870c1e6cb303 Binary files /dev/null and b/jsQR/tests/end-to-end/78/input.png differ diff --git a/jsQR/tests/end-to-end/78/output.json b/jsQR/tests/end-to-end/78/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/78/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/79/input.png b/jsQR/tests/end-to-end/79/input.png new file mode 100755 index 0000000000000000000000000000000000000000..bc4adad055dfc735aa8ba05ecfb9c5e52c91028b Binary files /dev/null and b/jsQR/tests/end-to-end/79/input.png differ diff --git a/jsQR/tests/end-to-end/79/output.json b/jsQR/tests/end-to-end/79/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d50b70c080c1cb6aa6702ac5a88f88df23b4bf2a --- /dev/null +++ b/jsQR/tests/end-to-end/79/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://code.google.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://code.google.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 195.9965184836062, + "y": 45.83833402993304 + }, + "topLeftCorner": { + "x": 40.649318577840226, + "y": 46.86864790352571 + }, + "bottomRightCorner": { + "x": 194.8935832708079, + "y": 191.63844916326443 + }, + "bottomLeftCorner": { + "x": 48.33200488559907, + "y": 194.82128078506523 + }, + "topRightFinderPattern": { + "x": 177.5, + "y": 64.5 + }, + "topLeftFinderPattern": { + "x": 60.5, + "y": 65.5 + }, + "bottomLeftFinderPattern": { + "x": 65.5, + "y": 177.5 + }, + "bottomRightAlignmentPattern": { + "x": 162.25, + "y": 161 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/8/input.png b/jsQR/tests/end-to-end/8/input.png new file mode 100755 index 0000000000000000000000000000000000000000..95b44c7aa8e07ec3bd74f6f0e17457c42558ebe9 Binary files /dev/null and b/jsQR/tests/end-to-end/8/input.png differ diff --git a/jsQR/tests/end-to-end/8/output.json b/jsQR/tests/end-to-end/8/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ad22e33604cecdbe2df843b2290f686cec010b15 --- /dev/null +++ b/jsQR/tests/end-to-end/8/output.json @@ -0,0 +1,130 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 115, + 46, + 107, + 101, + 105, + 104, + 105, + 110, + 46, + 107, + 116, + 114, + 46, + 109, + 108, + 105, + 116, + 46, + 103, + 111, + 46, + 106, + 112, + 47, + 107, + 101, + 105, + 116, + 97, + 105, + 47 + ], + "data": "http://wwws.keihin.ktr.mlit.go.jp/keitai/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 115, + 46, + 107, + 101, + 105, + 104, + 105, + 110, + 46, + 107, + 116, + 114, + 46, + 109, + 108, + 105, + 116, + 46, + 103, + 111, + 46, + 106, + 112, + 47, + 107, + 101, + 105, + 116, + 97, + 105, + 47 + ], + "text": "http://wwws.keihin.ktr.mlit.go.jp/keitai/" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 190.55665522241918, + "y": 95.73180178728573 + }, + "topLeftCorner": { + "x": 115.83534822990526, + "y": 99.73277865575905 + }, + "bottomRightCorner": { + "x": 193.38931122152792, + "y": 167.3045483910342 + }, + "bottomLeftCorner": { + "x": 115.07896770371389, + "y": 170.87989241726305 + }, + "topRightFinderPattern": { + "x": 181.75, + "y": 104.5 + }, + "topLeftFinderPattern": { + "x": 124.75, + "y": 107.5 + }, + "bottomLeftFinderPattern": { + "x": 124.5, + "y": 161.5 + }, + "bottomRightAlignmentPattern": { + "x": 175.25, + "y": 151.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/80/input.png b/jsQR/tests/end-to-end/80/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ed103fa1916e3b5c6a603a617e80ac2045012e9b Binary files /dev/null and b/jsQR/tests/end-to-end/80/input.png differ diff --git a/jsQR/tests/end-to-end/80/output.json b/jsQR/tests/end-to-end/80/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/80/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/81/input.png b/jsQR/tests/end-to-end/81/input.png new file mode 100755 index 0000000000000000000000000000000000000000..8591a93251b7c7272162b10aba11462e7675ff74 Binary files /dev/null and b/jsQR/tests/end-to-end/81/input.png differ diff --git a/jsQR/tests/end-to-end/81/output.json b/jsQR/tests/end-to-end/81/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/81/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/82/input.png b/jsQR/tests/end-to-end/82/input.png new file mode 100755 index 0000000000000000000000000000000000000000..5de6d841afe79c8279fd92f26e174f5b4ebcd6fe Binary files /dev/null and b/jsQR/tests/end-to-end/82/input.png differ diff --git a/jsQR/tests/end-to-end/82/output.json b/jsQR/tests/end-to-end/82/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8d6c99b076c9fa35eaebc1f1810bff3cceaac821 --- /dev/null +++ b/jsQR/tests/end-to-end/82/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 161.6951269176281, + "y": 61.745332923199555 + }, + "topLeftCorner": { + "x": 77.03759523249865, + "y": 51.8409703690389 + }, + "bottomRightCorner": { + "x": 147.85112998168927, + "y": 146.5334877662124 + }, + "bottomLeftCorner": { + "x": 67.25061775575521, + "y": 142.30094367891465 + }, + "topRightFinderPattern": { + "x": 148.5, + "y": 73 + }, + "topLeftFinderPattern": { + "x": 88, + "y": 66.5 + }, + "bottomLeftFinderPattern": { + "x": 80.5, + "y": 131 + }, + "bottomRightAlignmentPattern": { + "x": 131, + "y": 124 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/83/input.png b/jsQR/tests/end-to-end/83/input.png new file mode 100755 index 0000000000000000000000000000000000000000..7d39c4ac801ec4cf3a6c5586e9c214137172c7f0 Binary files /dev/null and b/jsQR/tests/end-to-end/83/input.png differ diff --git a/jsQR/tests/end-to-end/83/output.json b/jsQR/tests/end-to-end/83/output.json new file mode 100644 index 0000000000000000000000000000000000000000..71118f2adf3d1abe63cedbbf3510abb4210bf945 --- /dev/null +++ b/jsQR/tests/end-to-end/83/output.json @@ -0,0 +1,249 @@ +{ + "binaryData": [ + 83, + 101, + 97, + 110, + 32, + 79, + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 13, + 10, + 57, + 49, + 55, + 45, + 51, + 54, + 52, + 45, + 50, + 57, + 49, + 56, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 119, + 101, + 115, + 111, + 109, + 101, + 45, + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115, + 46, + 99, + 111, + 109 + ], + "data": "Sean Owen\r\nsrowen@google.com\r\n917-364-2918\r\nhttp://awesome-thoughts.com", + "chunks": [ + { + "type": "alphanumeric", + "text": "S" + }, + { + "type": "byte", + "bytes": [ + 101, + 97, + 110 + ], + "text": "ean" + }, + { + "type": "alphanumeric", + "text": " O" + }, + { + "type": "byte", + "bytes": [ + 119, + 101, + 110, + 13, + 10, + 115, + 114, + 111, + 119, + 101, + 110, + 64, + 103, + 111, + 111, + 103, + 108, + 101 + ], + "text": "wen\r\nsrowen@google" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109, + 13, + 10 + ], + "text": "com\r\n" + }, + { + "type": "numeric", + "text": "917" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "364" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "numeric", + "text": "2918" + }, + { + "type": "byte", + "bytes": [ + 13, + 10, + 104, + 116, + 116, + 112 + ], + "text": "\r\nhttp" + }, + { + "type": "alphanumeric", + "text": "://" + }, + { + "type": "byte", + "bytes": [ + 97, + 119, + 101, + 115, + 111, + 109, + 101 + ], + "text": "awesome" + }, + { + "type": "alphanumeric", + "text": "-" + }, + { + "type": "byte", + "bytes": [ + 116, + 104, + 111, + 117, + 103, + 104, + 116, + 115 + ], + "text": "thoughts" + }, + { + "type": "alphanumeric", + "text": "." + }, + { + "type": "byte", + "bytes": [ + 99, + 111, + 109 + ], + "text": "com" + } + ], + "version": 10, + "location": { + "topRightCorner": { + "x": 414.37349964854525, + "y": 366.922959567252 + }, + "topLeftCorner": { + "x": 429.1636058648266, + "y": 134.75463193533795 + }, + "bottomRightCorner": { + "x": 162.1937376277326, + "y": 348.57350251430745 + }, + "bottomLeftCorner": { + "x": 186.6286498275812, + "y": 118.94045725906837 + }, + "topRightFinderPattern": { + "x": 399.75, + "y": 351 + }, + "topLeftFinderPattern": { + "x": 413.25, + "y": 147.5 + }, + "bottomLeftFinderPattern": { + "x": 200, + "y": 133.5 + }, + "bottomRightAlignmentPattern": { + "x": 193.5, + "y": 323.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/84/input.png b/jsQR/tests/end-to-end/84/input.png new file mode 100644 index 0000000000000000000000000000000000000000..996f913b7bcbe4d2b75e607dfceb5f910a3d8589 Binary files /dev/null and b/jsQR/tests/end-to-end/84/input.png differ diff --git a/jsQR/tests/end-to-end/84/output.json b/jsQR/tests/end-to-end/84/output.json new file mode 100644 index 0000000000000000000000000000000000000000..b1dcddd48b01f3da97020e39e4a9b5a2513b4d8c --- /dev/null +++ b/jsQR/tests/end-to-end/84/output.json @@ -0,0 +1,60 @@ +{ + "binaryData": [ + 119, + 112, + 58, + 32, + 107, + 97 + ], + "data": "wp: ka", + "chunks": [ + { + "type": "byte", + "bytes": [ + 119, + 112, + 58, + 32, + 107, + 97 + ], + "text": "wp: ka" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 293.3125, + "y": 294.37500000000006 + }, + "topLeftCorner": { + "x": 123.23296456602323, + "y": 295.6754312101154 + }, + "bottomRightCorner": { + "x": 292.30438844839114, + "y": 460.641367978342 + }, + "bottomLeftCorner": { + "x": 123.43750000000001, + "y": 463.12500000000006 + }, + "topRightFinderPattern": { + "x": 265, + "y": 322.5 + }, + "topLeftFinderPattern": { + "x": 151.75, + "y": 323.5 + }, + "bottomLeftFinderPattern": { + "x": 151.75, + "y": 435 + }, + "bottomRightAlignmentPattern": { + "x": 240.48967581674742, + "y": 410.08484925166084 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/85/input.png b/jsQR/tests/end-to-end/85/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a79726bbc2782c6fcde3ed6aabec4a9f8cace204 Binary files /dev/null and b/jsQR/tests/end-to-end/85/input.png differ diff --git a/jsQR/tests/end-to-end/85/output.json b/jsQR/tests/end-to-end/85/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/85/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/86/input.png b/jsQR/tests/end-to-end/86/input.png new file mode 100755 index 0000000000000000000000000000000000000000..40205486488e82e44fd8cce55055379fb4c4aad5 Binary files /dev/null and b/jsQR/tests/end-to-end/86/input.png differ diff --git a/jsQR/tests/end-to-end/86/output.json b/jsQR/tests/end-to-end/86/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/86/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/87/input.png b/jsQR/tests/end-to-end/87/input.png new file mode 100755 index 0000000000000000000000000000000000000000..adfdcd93f3352e86673e056a4f6e69a6291f10e4 Binary files /dev/null and b/jsQR/tests/end-to-end/87/input.png differ diff --git a/jsQR/tests/end-to-end/87/output.json b/jsQR/tests/end-to-end/87/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/87/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/88/input.png b/jsQR/tests/end-to-end/88/input.png new file mode 100755 index 0000000000000000000000000000000000000000..406a7cf3de2366f1d62d66be8e22814f292c2a92 Binary files /dev/null and b/jsQR/tests/end-to-end/88/input.png differ diff --git a/jsQR/tests/end-to-end/88/output.json b/jsQR/tests/end-to-end/88/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/88/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/89/input.png b/jsQR/tests/end-to-end/89/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d284360cba66d02349ebbf4ca3a6722be5ab1f2a Binary files /dev/null and b/jsQR/tests/end-to-end/89/input.png differ diff --git a/jsQR/tests/end-to-end/89/output.json b/jsQR/tests/end-to-end/89/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e3ed0de882eeae36127fd1b4619484ecaf6b49ab --- /dev/null +++ b/jsQR/tests/end-to-end/89/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 84, + 73, + 84, + 76, + 69, + 58, + 59, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 46, + 107, + 97, + 121, + 119, + 97, + 46, + 99, + 111, + 109, + 47, + 50, + 48, + 50, + 48, + 52, + 48, + 48, + 49, + 48, + 50, + 59, + 59 + ], + "data": "MEBKM:TITLE:;URL:http://d.kaywa.com/2020400102;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 66, + 75, + 77, + 58, + 84, + 73, + 84, + 76, + 69, + 58, + 59, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 46, + 107, + 97, + 121, + 119, + 97, + 46, + 99, + 111, + 109, + 47, + 50, + 48, + 50, + 48, + 52, + 48, + 48, + 49, + 48, + 50, + 59, + 59 + ], + "text": "MEBKM:TITLE:;URL:http://d.kaywa.com/2020400102;;" + } + ], + "version": 8, + "location": { + "topRightCorner": { + "x": 102.20488431876605, + "y": 7.33650385604113 + }, + "topLeftCorner": { + "x": 8.31016510545132, + "y": 7.31016510545132 + }, + "bottomRightCorner": { + "x": 101.90884338433843, + "y": 100.90884338433843 + }, + "bottomLeftCorner": { + "x": 7.7045572242361455, + "y": 101.25349559813566 + }, + "topRightFinderPattern": { + "x": 95.5, + "y": 14 + }, + "topLeftFinderPattern": { + "x": 15, + "y": 14 + }, + "bottomLeftFinderPattern": { + "x": 14.5, + "y": 94.5 + }, + "bottomRightAlignmentPattern": { + "x": 89.5, + "y": 88.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/9/input.png b/jsQR/tests/end-to-end/9/input.png new file mode 100755 index 0000000000000000000000000000000000000000..40da63cf23a1dda43eb94d9ac7543c71a279d29c Binary files /dev/null and b/jsQR/tests/end-to-end/9/input.png differ diff --git a/jsQR/tests/end-to-end/9/output.json b/jsQR/tests/end-to-end/9/output.json new file mode 100644 index 0000000000000000000000000000000000000000..44872f6a576281227decf96a2d7f2adfb2f4c0fa --- /dev/null +++ b/jsQR/tests/end-to-end/9/output.json @@ -0,0 +1,102 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 46, + 107, + 97, + 121, + 119, + 97, + 46, + 99, + 111, + 109, + 47, + 50, + 48, + 50, + 48, + 55, + 49, + 48, + 48 + ], + "data": "http://d.kaywa.com/20207100", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 100, + 46, + 107, + 97, + 121, + 119, + 97, + 46, + 99, + 111, + 109, + 47, + 50, + 48, + 50, + 48, + 55, + 49, + 48, + 48 + ], + "text": "http://d.kaywa.com/20207100" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 217.5488694498388, + "y": 35.182843758759795 + }, + "topLeftCorner": { + "x": 120.0067304847263, + "y": 29.551988105538648 + }, + "bottomRightCorner": { + "x": 221.367991263292, + "y": 130.53075356041165 + }, + "bottomLeftCorner": { + "x": 117.9296348718266, + "y": 128.20477803359242 + }, + "topRightFinderPattern": { + "x": 206.5, + "y": 45.5 + }, + "topLeftFinderPattern": { + "x": 132, + "y": 41.5 + }, + "bottomLeftFinderPattern": { + "x": 131, + "y": 116 + }, + "bottomRightAlignmentPattern": { + "x": 198.25, + "y": 107.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/90/input.png b/jsQR/tests/end-to-end/90/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ca31d899480e6358adb57c1a857f8239e0435ca8 Binary files /dev/null and b/jsQR/tests/end-to-end/90/input.png differ diff --git a/jsQR/tests/end-to-end/90/output.json b/jsQR/tests/end-to-end/90/output.json new file mode 100644 index 0000000000000000000000000000000000000000..be9c037b7f3f227da79c255f2a5e2661c66b2697 --- /dev/null +++ b/jsQR/tests/end-to-end/90/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 168.47048131271634, + "y": 64.39750006224945 + }, + "topLeftCorner": { + "x": 65.56373988828969, + "y": 73.16588020030817 + }, + "bottomRightCorner": { + "x": 179.13812247644688, + "y": 170.7557200538358 + }, + "bottomLeftCorner": { + "x": 71.94254080127966, + "y": 176.20324410787032 + }, + "topRightFinderPattern": { + "x": 155, + "y": 80 + }, + "topLeftFinderPattern": { + "x": 80.5, + "y": 86 + }, + "bottomLeftFinderPattern": { + "x": 85.5, + "y": 160.5 + }, + "bottomRightAlignmentPattern": { + "x": 148, + "y": 144 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/91/input.png b/jsQR/tests/end-to-end/91/input.png new file mode 100755 index 0000000000000000000000000000000000000000..e57d2d29d64c2cdd29dd31f4ca67c6a096144ec5 Binary files /dev/null and b/jsQR/tests/end-to-end/91/input.png differ diff --git a/jsQR/tests/end-to-end/91/output.json b/jsQR/tests/end-to-end/91/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ad3414d1adb60b47ffea9b678631e7e8b0ecf979 --- /dev/null +++ b/jsQR/tests/end-to-end/91/output.json @@ -0,0 +1,136 @@ +{ + "binaryData": [ + 141, + 161, + 147, + 120, + 130, + 204, + 131, + 111, + 129, + 91, + 131, + 87, + 131, + 135, + 131, + 147, + 130, + 197, + 130, + 205, + 149, + 182, + 143, + 205, + 130, + 204, + 136, + 195, + 141, + 134, + 137, + 187, + 130, + 170, + 130, + 197, + 130, + 171, + 130, + 220, + 130, + 183, + 129, + 66 + ], + "data": "今度ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯æ–‡ç« ã®æš—å·åŒ–ãŒã§ãã¾ã™ã€‚", + "chunks": [ + { + "type": "kanji", + "bytes": [ + 141, + 161, + 147, + 120, + 130, + 204, + 131, + 111, + 129, + 91, + 131, + 87, + 131, + 135, + 131, + 147, + 130, + 197, + 130, + 205, + 149, + 182, + 143, + 205, + 130, + 204, + 136, + 195, + 141, + 134, + 137, + 187, + 130, + 170, + 130, + 197, + 130, + 171, + 130, + 220, + 130, + 183, + 129, + 66 + ], + "text": "今度ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯æ–‡ç« ã®æš—å·åŒ–ãŒã§ãã¾ã™ã€‚" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 247.50728649352763, + "y": 97.49271350647234 + }, + "topLeftCorner": { + "x": 35.4085133224136, + "y": 97.50023908111461 + }, + "bottomRightCorner": { + "x": 248.44772989945892, + "y": 309.7758742367368 + }, + "bottomLeftCorner": { + "x": 35.27950920245399, + "y": 309.720490797546 + }, + "topRightFinderPattern": { + "x": 222, + "y": 123 + }, + "topLeftFinderPattern": { + "x": 61, + "y": 123 + }, + "bottomLeftFinderPattern": { + "x": 61, + "y": 284 + }, + "bottomRightAlignmentPattern": { + "x": 200.5, + "y": 262 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/92/input.png b/jsQR/tests/end-to-end/92/input.png new file mode 100755 index 0000000000000000000000000000000000000000..d7f3de7b4ef72cf0454cfe291ad828ff7ce22442 Binary files /dev/null and b/jsQR/tests/end-to-end/92/input.png differ diff --git a/jsQR/tests/end-to-end/92/output.json b/jsQR/tests/end-to-end/92/output.json new file mode 100644 index 0000000000000000000000000000000000000000..65b991ca8c4f5764eb27fadc0ce2d5c15691f665 --- /dev/null +++ b/jsQR/tests/end-to-end/92/output.json @@ -0,0 +1,56 @@ +{ + "binaryData": [ + 50, + 48, + 50, + 49, + 50, + 48, + 48, + 48, + 48, + 48 + ], + "data": "2021200000", + "chunks": [ + { + "type": "numeric", + "text": "2021200000" + } + ], + "version": 1, + "location": { + "topRightCorner": { + "x": 190.37500000000003, + "y": 123.24999999999999 + }, + "topLeftCorner": { + "x": 140.82437472806706, + "y": 120.1954804763799 + }, + "bottomRightCorner": { + "x": 189.37498917656237, + "y": 172.48075757475945 + }, + "bottomLeftCorner": { + "x": 140.125, + "y": 169.74999999999997 + }, + "topRightFinderPattern": { + "x": 182, + "y": 131 + }, + "topLeftFinderPattern": { + "x": 149, + "y": 129 + }, + "bottomLeftFinderPattern": { + "x": 148.5, + "y": 162 + }, + "bottomRightAlignmentPattern": { + "x": 174.47561880331884, + "y": 156.4352817881895 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/93/input.png b/jsQR/tests/end-to-end/93/input.png new file mode 100755 index 0000000000000000000000000000000000000000..2b91e82206a831434038db4c62121ceb85ea747e Binary files /dev/null and b/jsQR/tests/end-to-end/93/input.png differ diff --git a/jsQR/tests/end-to-end/93/output.json b/jsQR/tests/end-to-end/93/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f7ec0499dcfcf15b8c353ee0969dd32d5fd4972e --- /dev/null +++ b/jsQR/tests/end-to-end/93/output.json @@ -0,0 +1,220 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "data": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 97, + 114, + 110, + 97, + 117, + 100, + 46, + 115, + 97, + 104, + 117, + 103, + 117, + 101, + 116, + 46, + 99, + 111, + 109, + 47, + 103, + 114, + 97, + 102, + 102, + 105, + 116, + 105, + 47, + 116, + 101, + 115, + 116, + 46, + 112, + 104, + 112, + 63, + 108, + 108, + 61, + 45, + 55, + 52, + 46, + 48, + 48, + 51, + 48, + 57, + 57, + 54, + 49, + 53, + 48, + 51, + 50, + 49, + 56, + 44, + 52, + 48, + 46, + 55, + 52, + 49, + 48, + 50, + 53, + 55, + 51, + 49, + 54, + 51, + 48, + 52, + 54, + 44, + 48 + ], + "text": "http://arnaud.sahuguet.com/graffiti/test.php?ll=-74.00309961503218,40.74102573163046,0" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 177.08910324198473, + "y": 30.9566734123605 + }, + "topLeftCorner": { + "x": 55.59223961265601, + "y": 78.21287353189206 + }, + "bottomRightCorner": { + "x": 219.87932720623422, + "y": 190.1963169120045 + }, + "bottomLeftCorner": { + "x": 92.21702815614998, + "y": 214.59447288633746 + }, + "topRightFinderPattern": { + "x": 168.75, + "y": 49 + }, + "topLeftFinderPattern": { + "x": 67.75, + "y": 86.5 + }, + "bottomLeftFinderPattern": { + "x": 98.5, + "y": 201 + }, + "bottomRightAlignmentPattern": { + "x": 190.25, + "y": 170 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/94/input.png b/jsQR/tests/end-to-end/94/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c9aa5ab79862b8614fa69ae5f1668bb08636146e Binary files /dev/null and b/jsQR/tests/end-to-end/94/input.png differ diff --git a/jsQR/tests/end-to-end/94/output.json b/jsQR/tests/end-to-end/94/output.json new file mode 100644 index 0000000000000000000000000000000000000000..febb88e7e855188a6b6ec459edeea07ecf1b7b46 --- /dev/null +++ b/jsQR/tests/end-to-end/94/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 209.51355745730348, + "y": 28.862689046730146 + }, + "topLeftCorner": { + "x": 29.23676041336614, + "y": 25.808825443291582 + }, + "bottomRightCorner": { + "x": 195.8683092978863, + "y": 169.81926539702602 + }, + "bottomLeftCorner": { + "x": 44.55958093441372, + "y": 167.70884194729203 + }, + "topRightFinderPattern": { + "x": 194.5, + "y": 41.5 + }, + "topLeftFinderPattern": { + "x": 44.5, + "y": 39 + }, + "bottomLeftFinderPattern": { + "x": 55.5, + "y": 158.5 + }, + "bottomRightAlignmentPattern": { + "x": 175.25, + "y": 152 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/95/input.png b/jsQR/tests/end-to-end/95/input.png new file mode 100755 index 0000000000000000000000000000000000000000..56fc693b93709a5b7966724d6d3b4e8871d62a40 Binary files /dev/null and b/jsQR/tests/end-to-end/95/input.png differ diff --git a/jsQR/tests/end-to-end/95/output.json b/jsQR/tests/end-to-end/95/output.json new file mode 100644 index 0000000000000000000000000000000000000000..bc6357b8de3fa30aa90f9b0055bf610b65f7499d --- /dev/null +++ b/jsQR/tests/end-to-end/95/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 203.79036683538786, + "y": 59.09320712739507 + }, + "topLeftCorner": { + "x": 72.73946558496442, + "y": 22.63526428278335 + }, + "bottomRightCorner": { + "x": 177.830610383989, + "y": 214.98390506645254 + }, + "bottomLeftCorner": { + "x": 40.79556215993111, + "y": 212.2905098824691 + }, + "topRightFinderPattern": { + "x": 193.25, + "y": 69 + }, + "topLeftFinderPattern": { + "x": 82.5, + "y": 40.5 + }, + "bottomLeftFinderPattern": { + "x": 56, + "y": 198 + }, + "bottomRightAlignmentPattern": { + "x": 165, + "y": 191.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/96/input.png b/jsQR/tests/end-to-end/96/input.png new file mode 100755 index 0000000000000000000000000000000000000000..ff41d0ef8ceb5dfe7d5fc9c51118e0bc7bde1de8 Binary files /dev/null and b/jsQR/tests/end-to-end/96/input.png differ diff --git a/jsQR/tests/end-to-end/96/output.json b/jsQR/tests/end-to-end/96/output.json new file mode 100644 index 0000000000000000000000000000000000000000..6f3c174bdbcef9029488e6ec7e96bd736a3f44bd --- /dev/null +++ b/jsQR/tests/end-to-end/96/output.json @@ -0,0 +1,204 @@ +{ + "binaryData": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "data": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n", + "chunks": [ + { + "type": "byte", + "bytes": [ + 85, + 73, + 32, + 111, + 102, + 102, + 105, + 99, + 101, + 32, + 104, + 111, + 117, + 114, + 115, + 32, + 115, + 105, + 103, + 110, + 117, + 112, + 13, + 10, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 99, + 111, + 114, + 112, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 115, + 112, + 97, + 114, + 114, + 111, + 119, + 47, + 117, + 105, + 95, + 111, + 102, + 102, + 105, + 99, + 101, + 95, + 104, + 111, + 117, + 114, + 115, + 47, + 32, + 13, + 10 + ], + "text": "UI office hours signup\r\nhttp://www.corp.google.com/sparrow/ui_office_hours/ \r\n" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 172.95423865294515, + "y": 56.92325495516057 + }, + "topLeftCorner": { + "x": 62.52318449791687, + "y": 41.112591119588885 + }, + "bottomRightCorner": { + "x": 163.7681469521871, + "y": 189.47785056515463 + }, + "bottomLeftCorner": { + "x": 53.70662900165528, + "y": 200.49500388855432 + }, + "topRightFinderPattern": { + "x": 165, + "y": 66.5 + }, + "topLeftFinderPattern": { + "x": 72, + "y": 55 + }, + "bottomLeftFinderPattern": { + "x": 64.5, + "y": 187.5 + }, + "bottomRightAlignmentPattern": { + "x": 151.5, + "y": 171.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/97/input.png b/jsQR/tests/end-to-end/97/input.png new file mode 100755 index 0000000000000000000000000000000000000000..a22d5b34c2be1e76ea834aead09c86acd5f94141 Binary files /dev/null and b/jsQR/tests/end-to-end/97/input.png differ diff --git a/jsQR/tests/end-to-end/97/output.json b/jsQR/tests/end-to-end/97/output.json new file mode 100644 index 0000000000000000000000000000000000000000..941e30f1e3135a202eeb325c2872d6ff6221181f --- /dev/null +++ b/jsQR/tests/end-to-end/97/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 103, + 119, + 116, + 47, + 110, + 63, + 117, + 61, + 98, + 108, + 117, + 101, + 110, + 105, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "data": "http://google.com/gwt/n?u=bluenile.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 103, + 119, + 116, + 47, + 110, + 63, + 117, + 61, + 98, + 108, + 117, + 101, + 110, + 105, + 108, + 101, + 46, + 99, + 111, + 109 + ], + "text": "http://google.com/gwt/n?u=bluenile.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 385.4700416680003, + "y": 337.85139043672837 + }, + "topLeftCorner": { + "x": 389.6317947083158, + "y": 190.43312690789986 + }, + "bottomRightCorner": { + "x": 226.37405952588355, + "y": 334.19169465636486 + }, + "bottomLeftCorner": { + "x": 231.57165018795394, + "y": 184.9416395871748 + }, + "topRightFinderPattern": { + "x": 367, + "y": 319.5 + }, + "topLeftFinderPattern": { + "x": 370.25, + "y": 207.5 + }, + "bottomLeftFinderPattern": { + "x": 250.25, + "y": 203.5 + }, + "bottomRightAlignmentPattern": { + "x": 263.5, + "y": 301.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/98/input.png b/jsQR/tests/end-to-end/98/input.png new file mode 100755 index 0000000000000000000000000000000000000000..19056ffc7ea73518589cd9ea66b7336d88b539b2 Binary files /dev/null and b/jsQR/tests/end-to-end/98/input.png differ diff --git a/jsQR/tests/end-to-end/98/output.json b/jsQR/tests/end-to-end/98/output.json new file mode 100644 index 0000000000000000000000000000000000000000..a61f16cd53e995c9c606f60176aa6c08320ef6ab --- /dev/null +++ b/jsQR/tests/end-to-end/98/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "data": "http://code.google.com/p/zxing/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 111, + 100, + 101, + 46, + 103, + 111, + 111, + 103, + 108, + 101, + 46, + 99, + 111, + 109, + 47, + 112, + 47, + 122, + 120, + 105, + 110, + 103, + 47 + ], + "text": "http://code.google.com/p/zxing/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 186.4027056544153, + "y": 61.576538739624176 + }, + "topLeftCorner": { + "x": 82.54110422115235, + "y": 47.023654923722034 + }, + "bottomRightCorner": { + "x": 170.10719411912126, + "y": 169.11099180069792 + }, + "bottomLeftCorner": { + "x": 63.82932523715705, + "y": 149.0793485559105 + }, + "topRightFinderPattern": { + "x": 169, + "y": 74 + }, + "topLeftFinderPattern": { + "x": 94, + "y": 63 + }, + "bottomLeftFinderPattern": { + "x": 80.75, + "y": 137 + }, + "bottomRightAlignmentPattern": { + "x": 146, + "y": 135.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/99/input.png b/jsQR/tests/end-to-end/99/input.png new file mode 100755 index 0000000000000000000000000000000000000000..c47eb553e560a8d99d89214ba421c7a5cd4a9cb4 Binary files /dev/null and b/jsQR/tests/end-to-end/99/input.png differ diff --git a/jsQR/tests/end-to-end/99/output.json b/jsQR/tests/end-to-end/99/output.json new file mode 100644 index 0000000000000000000000000000000000000000..71a17f961a398419a2440b77fb39577f944eba31 --- /dev/null +++ b/jsQR/tests/end-to-end/99/output.json @@ -0,0 +1,144 @@ +{ + "binaryData": [ + 77, + 69, + 66, + 75, + 77, + 58, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "data": "MEBKM:URL:http\\://en.wikipedia.org/wiki/Main_Page;;", + "chunks": [ + { + "type": "alphanumeric", + "text": "MEBKM:URL:" + }, + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 101, + 110, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 77, + 97, + 105, + 110, + 95, + 80, + 97, + 103, + 101, + 59, + 59 + ], + "text": "http\\://en.wikipedia.org/wiki/Main_Page;;" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 489.44040375998503, + "y": 369.3789132343906 + }, + "topLeftCorner": { + "x": 480.2495046538139, + "y": 199.27837357997404 + }, + "bottomRightCorner": { + "x": 306.46246878692966, + "y": 368.0385117151716 + }, + "bottomLeftCorner": { + "x": 305.6071089275937, + "y": 203.64319664974767 + }, + "topRightFinderPattern": { + "x": 468.5, + "y": 350.5 + }, + "topLeftFinderPattern": { + "x": 462, + "y": 217 + }, + "bottomLeftFinderPattern": { + "x": 323.75, + "y": 220 + }, + "bottomRightAlignmentPattern": { + "x": 341, + "y": 334.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/angel-hotel/input.png b/jsQR/tests/end-to-end/angel-hotel/input.png new file mode 100644 index 0000000000000000000000000000000000000000..70d589f47776320483bea505dc4bcd8c2f67b44e Binary files /dev/null and b/jsQR/tests/end-to-end/angel-hotel/input.png differ diff --git a/jsQR/tests/end-to-end/angel-hotel/output.json b/jsQR/tests/end-to-end/angel-hotel/output.json new file mode 100644 index 0000000000000000000000000000000000000000..24eb3fa4e7fce3e37e0309ba769dc0a0e8b15411 --- /dev/null +++ b/jsQR/tests/end-to-end/angel-hotel/output.json @@ -0,0 +1,136 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 101, + 110, + 46, + 113, + 114, + 119, + 112, + 46, + 111, + 114, + 103, + 47, + 84, + 104, + 101, + 95, + 65, + 110, + 103, + 101, + 108, + 95, + 72, + 111, + 116, + 101, + 108, + 44, + 95, + 77, + 111, + 110, + 109, + 111, + 117, + 116, + 104 + ], + "data": "http://en.qrwp.org/The_Angel_Hotel,_Monmouth", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 101, + 110, + 46, + 113, + 114, + 119, + 112, + 46, + 111, + 114, + 103, + 47, + 84, + 104, + 101, + 95, + 65, + 110, + 103, + 101, + 108, + 95, + 72, + 111, + 116, + 101, + 108, + 44, + 95, + 77, + 111, + 110, + 109, + 111, + 117, + 116, + 104 + ], + "text": "http://en.qrwp.org/The_Angel_Hotel,_Monmouth" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 352.5212851229128, + "y": 277.96215718515066 + }, + "topLeftCorner": { + "x": 229.40394700861776, + "y": 275.70107733557455 + }, + "bottomRightCorner": { + "x": 349.2471974131822, + "y": 395.1638729769499 + }, + "bottomLeftCorner": { + "x": 232.81103910827713, + "y": 390.08745648260555 + }, + "topRightFinderPattern": { + "x": 337, + "y": 292.5 + }, + "topLeftFinderPattern": { + "x": 244.25, + "y": 290.5 + }, + "bottomLeftFinderPattern": { + "x": 246.25, + "y": 377.5 + }, + "bottomRightAlignmentPattern": { + "x": 323, + "y": 369 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/battery/input.png b/jsQR/tests/end-to-end/battery/input.png new file mode 100644 index 0000000000000000000000000000000000000000..9432bb5773a4d0f929e98e3fda731de1ba806233 Binary files /dev/null and b/jsQR/tests/end-to-end/battery/input.png differ diff --git a/jsQR/tests/end-to-end/battery/output.json b/jsQR/tests/end-to-end/battery/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e0b33473130b12879f13692180a9a8243f368765 --- /dev/null +++ b/jsQR/tests/end-to-end/battery/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 110, + 69, + 103, + 67, + 83, + 54 + ], + "data": "http://bit.ly/nEgCS6", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 110, + 69, + 103, + 67, + 83, + 54 + ], + "text": "http://bit.ly/nEgCS6" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 260.1365977382876, + "y": 414.6985137318255 + }, + "topLeftCorner": { + "x": 125.29901655306719, + "y": 412.52577085361895 + }, + "bottomRightCorner": { + "x": 257.3591201513719, + "y": 541.2636076947335 + }, + "bottomLeftCorner": { + "x": 125.75523281596453, + "y": 539.7044345898005 + }, + "topRightFinderPattern": { + "x": 241, + "y": 432.5 + }, + "topLeftFinderPattern": { + "x": 144.25, + "y": 431 + }, + "bottomLeftFinderPattern": { + "x": 144.25, + "y": 522.5 + }, + "bottomRightAlignmentPattern": { + "x": 223.75, + "y": 508.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/bike-1/input.png b/jsQR/tests/end-to-end/bike-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..aae325a2097d60958111bc6aaa749f4b59c24f5e Binary files /dev/null and b/jsQR/tests/end-to-end/bike-1/input.png differ diff --git a/jsQR/tests/end-to-end/bike-1/output.json b/jsQR/tests/end-to-end/bike-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d01e90bebbf9f4831182726ef277f0db573fede6 --- /dev/null +++ b/jsQR/tests/end-to-end/bike-1/output.json @@ -0,0 +1,137 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 111, + 46, + 98, + 105, + 107, + 101, + 47, + 100, + 111, + 119, + 110, + 108, + 111, + 97, + 100, + 47, + 97, + 112, + 112, + 46, + 104, + 116, + 109, + 108, + 63, + 109, + 61, + 56, + 56, + 54, + 53, + 48, + 56, + 53, + 52, + 55 + ], + "data": "http://www.o.bike/download/app.html?m=886508547", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 111, + 46, + 98, + 105, + 107, + 101, + 47, + 100, + 111, + 119, + 110, + 108, + 111, + 97, + 100, + 47, + 97, + 112, + 112, + 46, + 104, + 116, + 109, + 108, + 63, + 109, + 61 + ], + "text": "http://www.o.bike/download/app.html?m=" + }, + { + "type": "numeric", + "text": "886508547" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 500.4925349976727, + "y": 380.35287463901227 + }, + "topLeftCorner": { + "x": 494.89430812530264, + "y": 178.67140556674238 + }, + "bottomRightCorner": { + "x": 294.4552876071494, + "y": 384.42006901252887 + }, + "bottomLeftCorner": { + "x": 294.58644033393915, + "y": 178.96887575852327 + }, + "topRightFinderPattern": { + "x": 482.75, + "y": 363 + }, + "topLeftFinderPattern": { + "x": 478.5, + "y": 195.5 + }, + "bottomLeftFinderPattern": { + "x": 312, + "y": 196 + }, + "bottomRightAlignmentPattern": { + "x": 327.5, + "y": 350.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/bike-2/input.png b/jsQR/tests/end-to-end/bike-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..93986fffaa53f15e83d891b3f12e1699545a5973 Binary files /dev/null and b/jsQR/tests/end-to-end/bike-2/input.png differ diff --git a/jsQR/tests/end-to-end/bike-2/output.json b/jsQR/tests/end-to-end/bike-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..323d4704e4f930d8cc8745dcd22b08741a054045 --- /dev/null +++ b/jsQR/tests/end-to-end/bike-2/output.json @@ -0,0 +1,142 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 111, + 46, + 98, + 105, + 107, + 101, + 47, + 100, + 111, + 119, + 110, + 108, + 111, + 97, + 100, + 47, + 97, + 112, + 112, + 46, + 104, + 116, + 109, + 108, + 63, + 109, + 61, + 48, + 54, + 53, + 48, + 48, + 50, + 48, + 54, + 52 + ], + "data": "http://www.o.bike/download/app.html?m=065002064", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 111, + 46, + 98, + 105, + 107, + 101, + 47, + 100, + 111, + 119, + 110, + 108, + 111, + 97, + 100, + 47, + 97, + 112, + 112, + 46, + 104, + 116, + 109, + 108, + 63, + 109, + 61, + 48, + 54, + 53, + 48, + 48, + 50, + 48, + 54, + 52 + ], + "text": "http://www.o.bike/download/app.html?m=065002064" + } + ], + "version": 6, + "location": { + "topRightCorner": { + "x": 455.2368926638933, + "y": 336.9674484353179 + }, + "topLeftCorner": { + "x": 309.24466998139013, + "y": 297.58718698705735 + }, + "bottomRightCorner": { + "x": 414.99085169999336, + "y": 495.8198411178558 + }, + "bottomLeftCorner": { + "x": 269.8212054974724, + "y": 451.53323887961056 + }, + "topRightFinderPattern": { + "x": 439, + "y": 347 + }, + "topLeftFinderPattern": { + "x": 318, + "y": 314 + }, + "bottomLeftFinderPattern": { + "x": 285.25, + "y": 442 + }, + "bottomRightAlignmentPattern": { + "x": 397.75, + "y": 463.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/billboard-1/input.png b/jsQR/tests/end-to-end/billboard-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..80bbf9e00bae823c7902675a752d3f57901044d4 Binary files /dev/null and b/jsQR/tests/end-to-end/billboard-1/input.png differ diff --git a/jsQR/tests/end-to-end/billboard-1/output.json b/jsQR/tests/end-to-end/billboard-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/billboard-1/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/billboard-2/input.png b/jsQR/tests/end-to-end/billboard-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..19534c0fa94ebc08dbdeec40590e515e58d6a689 Binary files /dev/null and b/jsQR/tests/end-to-end/billboard-2/input.png differ diff --git a/jsQR/tests/end-to-end/billboard-2/output.json b/jsQR/tests/end-to-end/billboard-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..39f7704406a9e4cfef5cf210e890a3ab3b9fe839 --- /dev/null +++ b/jsQR/tests/end-to-end/billboard-2/output.json @@ -0,0 +1,226 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 115, + 97, + 103, + 97, + 115, + 111, + 117, + 46, + 109, + 111, + 98, + 105, + 32, + 13, + 10, + 13, + 10, + 77, + 69, + 66, + 75, + 77, + 58, + 84, + 73, + 84, + 76, + 69, + 58, + 146, + 84, + 130, + 187, + 130, + 164, + 131, + 130, + 131, + 114, + 130, + 197, + 144, + 234, + 150, + 229, + 138, + 119, + 141, + 90, + 146, + 84, + 130, + 181, + 129, + 73, + 59, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 115, + 97, + 103, + 97, + 115, + 111, + 117, + 46, + 109, + 111, + 98, + 105, + 59, + 59 + ], + "data": "", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 115, + 97, + 103, + 97, + 115, + 111, + 117, + 46, + 109, + 111, + 98, + 105, + 32, + 13, + 10, + 13, + 10, + 77, + 69, + 66, + 75, + 77, + 58, + 84, + 73, + 84, + 76, + 69, + 58, + 146, + 84, + 130, + 187, + 130, + 164, + 131, + 130, + 131, + 114, + 130, + 197, + 144, + 234, + 150, + 229, + 138, + 119, + 141, + 90, + 146, + 84, + 130, + 181, + 129, + 73, + 59, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 92, + 58, + 47, + 47, + 115, + 97, + 103, + 97, + 115, + 111, + 117, + 46, + 109, + 111, + 98, + 105, + 59, + 59 + ], + "text": "" + } + ], + "version": 5, + "location": { + "topRightCorner": { + "x": 386.3656064976469, + "y": 128.91824806436924 + }, + "topLeftCorner": { + "x": 163.1396918817908, + "y": 66.4327631081276 + }, + "bottomRightCorner": { + "x": 398.65016233766244, + "y": 338.14908919777156 + }, + "bottomLeftCorner": { + "x": 145.52005241280298, + "y": 279.1761932315504 + }, + "topRightFinderPattern": { + "x": 367, + "y": 141 + }, + "topLeftFinderPattern": { + "x": 184, + "y": 90.5 + }, + "bottomLeftFinderPattern": { + "x": 172.25, + "y": 262.5 + }, + "bottomRightAlignmentPattern": { + "x": 354.75, + "y": 287.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/bitcoin-tag/input.png b/jsQR/tests/end-to-end/bitcoin-tag/input.png new file mode 100644 index 0000000000000000000000000000000000000000..1d42705341e7e0fd7c607f8df7d8a9603de1d7d3 Binary files /dev/null and b/jsQR/tests/end-to-end/bitcoin-tag/input.png differ diff --git a/jsQR/tests/end-to-end/bitcoin-tag/output.json b/jsQR/tests/end-to-end/bitcoin-tag/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/bitcoin-tag/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/bus-stop-1/input.png b/jsQR/tests/end-to-end/bus-stop-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..307ca61d9ee04c79cb2d895e1e524aebeaf03d02 Binary files /dev/null and b/jsQR/tests/end-to-end/bus-stop-1/input.png differ diff --git a/jsQR/tests/end-to-end/bus-stop-1/output.json b/jsQR/tests/end-to-end/bus-stop-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..03996d444ee06be904b4dbaaf0fb1237ee45b3c1 --- /dev/null +++ b/jsQR/tests/end-to-end/bus-stop-1/output.json @@ -0,0 +1,274 @@ +{ + "binaryData": [ + 66, + 114, + 105, + 116, + 97, + 105, + 110, + 226, + 128, + 153, + 115, + 32, + 108, + 111, + 110, + 103, + 101, + 115, + 116, + 32, + 102, + 117, + 110, + 105, + 99, + 117, + 108, + 97, + 114, + 32, + 114, + 97, + 105, + 108, + 119, + 97, + 121, + 32, + 111, + 112, + 101, + 110, + 101, + 100, + 32, + 105, + 110, + 32, + 49, + 57, + 48, + 50, + 46, + 32, + 84, + 114, + 97, + 109, + 99, + 97, + 114, + 115, + 32, + 114, + 117, + 110, + 32, + 102, + 114, + 111, + 109, + 32, + 76, + 108, + 97, + 110, + 100, + 117, + 100, + 110, + 111, + 32, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 115, + 117, + 109, + 109, + 105, + 116, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 71, + 114, + 101, + 97, + 116, + 32, + 79, + 114, + 109, + 101 + ], + "data": "Britain’s longest funicular railway opened in 1902. Tramcars run from Llandudno to the summit of the Great Orme", + "chunks": [ + { + "type": "byte", + "bytes": [ + 66, + 114, + 105, + 116, + 97, + 105, + 110, + 226, + 128, + 153, + 115, + 32, + 108, + 111, + 110, + 103, + 101, + 115, + 116, + 32, + 102, + 117, + 110, + 105, + 99, + 117, + 108, + 97, + 114, + 32, + 114, + 97, + 105, + 108, + 119, + 97, + 121, + 32, + 111, + 112, + 101, + 110, + 101, + 100, + 32, + 105, + 110, + 32, + 49, + 57, + 48, + 50, + 46, + 32, + 84, + 114, + 97, + 109, + 99, + 97, + 114, + 115, + 32, + 114, + 117, + 110, + 32, + 102, + 114, + 111, + 109, + 32, + 76, + 108, + 97, + 110, + 100, + 117, + 100, + 110, + 111, + 32, + 116, + 111, + 32, + 116, + 104, + 101, + 32, + 115, + 117, + 109, + 109, + 105, + 116, + 32, + 111, + 102, + 32, + 116, + 104, + 101, + 32, + 71, + 114, + 101, + 97, + 116, + 32, + 79, + 114, + 109, + 101 + ], + "text": "Britain’s longest funicular railway opened in 1902. Tramcars run from Llandudno to the summit of the Great Orme" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 213.7760243675093, + "y": 127.26106229325633 + }, + "topLeftCorner": { + "x": 104.70320846732119, + "y": 130.09391608295 + }, + "bottomRightCorner": { + "x": 217.9579614338697, + "y": 235.32779419351064 + }, + "bottomLeftCorner": { + "x": 110.45364199934413, + "y": 239.76107747922416 + }, + "topRightFinderPattern": { + "x": 205.75, + "y": 136 + }, + "topLeftFinderPattern": { + "x": 113.75, + "y": 138.5 + }, + "bottomLeftFinderPattern": { + "x": 118.5, + "y": 231 + }, + "bottomRightAlignmentPattern": { + "x": 202, + "y": 220.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/bus-stop-2/input.png b/jsQR/tests/end-to-end/bus-stop-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..e9896111c5f74ac8d834f51ae4fdfc88baec9130 Binary files /dev/null and b/jsQR/tests/end-to-end/bus-stop-2/input.png differ diff --git a/jsQR/tests/end-to-end/bus-stop-2/output.json b/jsQR/tests/end-to-end/bus-stop-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cf9b4a0cfa531f72e8ca9791f1bfbeb39c02da7d --- /dev/null +++ b/jsQR/tests/end-to-end/bus-stop-2/output.json @@ -0,0 +1,164 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 104, + 105, + 115, + 116, + 111, + 114, + 121, + 112, + 111, + 105, + 110, + 116, + 115, + 46, + 111, + 114, + 103, + 47, + 105, + 110, + 100, + 101, + 120, + 46, + 112, + 104, + 112, + 63, + 112, + 97, + 103, + 101, + 61, + 103, + 114, + 101, + 97, + 116, + 45, + 111, + 114, + 109, + 101, + 45, + 116, + 114, + 97, + 109, + 119, + 97, + 121 + ], + "data": "http://historypoints.org/index.php?page=great-orme-tramway", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 104, + 105, + 115, + 116, + 111, + 114, + 121, + 112, + 111, + 105, + 110, + 116, + 115, + 46, + 111, + 114, + 103, + 47, + 105, + 110, + 100, + 101, + 120, + 46, + 112, + 104, + 112, + 63, + 112, + 97, + 103, + 101, + 61, + 103, + 114, + 101, + 97, + 116, + 45, + 111, + 114, + 109, + 101, + 45, + 116, + 114, + 97, + 109, + 119, + 97, + 121 + ], + "text": "http://historypoints.org/index.php?page=great-orme-tramway" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 280.95333771415346, + "y": 96.1102276679217 + }, + "topLeftCorner": { + "x": 180.51762705744903, + "y": 103.66199059514503 + }, + "bottomRightCorner": { + "x": 284.33524748251625, + "y": 194.59190641572113 + }, + "bottomLeftCorner": { + "x": 185.4431300756951, + "y": 202.72627340387518 + }, + "topRightFinderPattern": { + "x": 270.75, + "y": 107.5 + }, + "topLeftFinderPattern": { + "x": 191.75, + "y": 113.5 + }, + "bottomLeftFinderPattern": { + "x": 195.5, + "y": 191.5 + }, + "bottomRightAlignmentPattern": { + "x": 264.25, + "y": 177 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/bus-stop-3/input.png b/jsQR/tests/end-to-end/bus-stop-3/input.png new file mode 100644 index 0000000000000000000000000000000000000000..c432992b205b4990f0697b4ba540bf664c014e9a Binary files /dev/null and b/jsQR/tests/end-to-end/bus-stop-3/input.png differ diff --git a/jsQR/tests/end-to-end/bus-stop-3/output.json b/jsQR/tests/end-to-end/bus-stop-3/output.json new file mode 100644 index 0000000000000000000000000000000000000000..33dfab36cfd0b2aab9779d8dfc89efa283c546b9 --- /dev/null +++ b/jsQR/tests/end-to-end/bus-stop-3/output.json @@ -0,0 +1,90 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 79, + 72, + 65, + 73, + 80, + 85, + 90, + 90, + 76, + 69, + 46, + 67, + 79, + 77 + ], + "data": "http://OHAIPUZZLE.COM", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 79, + 72, + 65, + 73, + 80, + 85, + 90, + 90, + 76, + 69, + 46, + 67, + 79, + 77 + ], + "text": "http://OHAIPUZZLE.COM" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 156.0990704080627, + "y": 95.03936394872025 + }, + "topLeftCorner": { + "x": 83.24842797635381, + "y": 98.68319576018746 + }, + "bottomRightCorner": { + "x": 156.3167315669272, + "y": 169.95178743966295 + }, + "bottomLeftCorner": { + "x": 84.97909222757205, + "y": 169.33434115512568 + }, + "topRightFinderPattern": { + "x": 148, + "y": 103.5 + }, + "topLeftFinderPattern": { + "x": 90.75, + "y": 106 + }, + "bottomLeftFinderPattern": { + "x": 92, + "y": 162 + }, + "bottomRightAlignmentPattern": { + "x": 141.5, + "y": 155.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/business-card-1/input.png b/jsQR/tests/end-to-end/business-card-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..a0480aca4111d46fc609607c4850c9319f91f491 Binary files /dev/null and b/jsQR/tests/end-to-end/business-card-1/input.png differ diff --git a/jsQR/tests/end-to-end/business-card-1/output.json b/jsQR/tests/end-to-end/business-card-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..8b44bb366ef04c6630500d71c4ee52e03bfc2072 --- /dev/null +++ b/jsQR/tests/end-to-end/business-card-1/output.json @@ -0,0 +1,328 @@ +{ + "binaryData": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 84, + 111, + 109, + 32, + 83, + 116, + 97, + 115, + 105, + 117, + 107, + 59, + 84, + 69, + 76, + 58, + 55, + 49, + 57, + 45, + 51, + 53, + 55, + 45, + 55, + 48, + 57, + 57, + 59, + 85, + 82, + 76, + 58, + 112, + 108, + 97, + 110, + 101, + 116, + 49, + 48, + 116, + 101, + 99, + 104, + 46, + 99, + 111, + 109, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 116, + 111, + 109, + 64, + 112, + 108, + 97, + 110, + 101, + 116, + 49, + 48, + 116, + 101, + 99, + 104, + 46, + 99, + 111, + 109, + 59, + 78, + 79, + 84, + 69, + 58, + 71, + 111, + 32, + 80, + 97, + 112, + 101, + 114, + 108, + 101, + 115, + 115, + 45, + 87, + 111, + 114, + 107, + 32, + 65, + 110, + 121, + 119, + 104, + 101, + 114, + 101, + 45, + 72, + 97, + 114, + 110, + 101, + 115, + 115, + 32, + 83, + 111, + 99, + 105, + 97, + 108, + 32, + 77, + 101, + 100, + 105, + 97, + 59, + 59 + ], + "data": "MECARD:N:Tom Stasiuk;TEL:719-357-7099;URL:planet10tech.com;EMAIL:tom@planet10tech.com;NOTE:Go Paperless-Work Anywhere-Harness Social Media;;", + "chunks": [ + { + "type": "byte", + "bytes": [ + 77, + 69, + 67, + 65, + 82, + 68, + 58, + 78, + 58, + 84, + 111, + 109, + 32, + 83, + 116, + 97, + 115, + 105, + 117, + 107, + 59, + 84, + 69, + 76, + 58, + 55, + 49, + 57, + 45, + 51, + 53, + 55, + 45, + 55, + 48, + 57, + 57, + 59, + 85, + 82, + 76, + 58, + 112, + 108, + 97, + 110, + 101, + 116, + 49, + 48, + 116, + 101, + 99, + 104, + 46, + 99, + 111, + 109, + 59, + 69, + 77, + 65, + 73, + 76, + 58, + 116, + 111, + 109, + 64, + 112, + 108, + 97, + 110, + 101, + 116, + 49, + 48, + 116, + 101, + 99, + 104, + 46, + 99, + 111, + 109, + 59, + 78, + 79, + 84, + 69, + 58, + 71, + 111, + 32, + 80, + 97, + 112, + 101, + 114, + 108, + 101, + 115, + 115, + 45, + 87, + 111, + 114, + 107, + 32, + 65, + 110, + 121, + 119, + 104, + 101, + 114, + 101, + 45, + 72, + 97, + 114, + 110, + 101, + 115, + 115, + 32, + 83, + 111, + 99, + 105, + 97, + 108, + 32, + 77, + 101, + 100, + 105, + 97, + 59, + 59 + ], + "text": "MECARD:N:Tom Stasiuk;TEL:719-357-7099;URL:planet10tech.com;EMAIL:tom@planet10tech.com;NOTE:Go Paperless-Work Anywhere-Harness Social Media;;" + } + ], + "version": 7, + "location": { + "topRightCorner": { + "x": 339.8726768974589, + "y": 414.30982163247916 + }, + "topLeftCorner": { + "x": 237.95456424221058, + "y": 415.5164421659519 + }, + "bottomRightCorner": { + "x": 337.81540138199426, + "y": 521.1756504944972 + }, + "bottomLeftCorner": { + "x": 232.99285719553998, + "y": 522.0778392820595 + }, + "topRightFinderPattern": { + "x": 331.75, + "y": 422.5 + }, + "topLeftFinderPattern": { + "x": 245.5, + "y": 423.5 + }, + "bottomLeftFinderPattern": { + "x": 241.5, + "y": 513.5 + }, + "bottomRightAlignmentPattern": { + "x": 323, + "y": 505.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/business-card-2/input.png b/jsQR/tests/end-to-end/business-card-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e8ec9cced16f9be8c36ef6d4faf4aa621655e3 Binary files /dev/null and b/jsQR/tests/end-to-end/business-card-2/input.png differ diff --git a/jsQR/tests/end-to-end/business-card-2/output.json b/jsQR/tests/end-to-end/business-card-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/business-card-2/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/business-card-3/input.png b/jsQR/tests/end-to-end/business-card-3/input.png new file mode 100644 index 0000000000000000000000000000000000000000..adf4f8e455b8178dbdf3619faa424eca15ba911d Binary files /dev/null and b/jsQR/tests/end-to-end/business-card-3/input.png differ diff --git a/jsQR/tests/end-to-end/business-card-3/output.json b/jsQR/tests/end-to-end/business-card-3/output.json new file mode 100644 index 0000000000000000000000000000000000000000..21fc6fcf6f98686d589d212db702c2c7a54a2ee3 --- /dev/null +++ b/jsQR/tests/end-to-end/business-card-3/output.json @@ -0,0 +1,444 @@ +{ + "binaryData": [ + 66, + 69, + 71, + 73, + 78, + 58, + 86, + 67, + 65, + 82, + 68, + 10, + 78, + 58, + 87, + 105, + 108, + 107, + 105, + 110, + 115, + 111, + 110, + 59, + 80, + 97, + 117, + 108, + 10, + 84, + 69, + 76, + 58, + 48, + 50, + 48, + 32, + 56, + 56, + 53, + 56, + 32, + 49, + 49, + 48, + 52, + 10, + 69, + 77, + 65, + 73, + 76, + 58, + 112, + 97, + 117, + 108, + 46, + 119, + 105, + 108, + 107, + 105, + 110, + 115, + 111, + 110, + 64, + 112, + 119, + 99, + 111, + 109, + 46, + 99, + 111, + 46, + 117, + 107, + 10, + 79, + 82, + 71, + 58, + 112, + 119, + 99, + 111, + 109, + 46, + 99, + 111, + 46, + 117, + 107, + 32, + 76, + 105, + 109, + 105, + 116, + 101, + 100, + 10, + 84, + 73, + 84, + 76, + 69, + 58, + 68, + 114, + 10, + 65, + 68, + 82, + 58, + 51, + 51, + 32, + 71, + 108, + 101, + 110, + 108, + 117, + 99, + 101, + 32, + 82, + 111, + 97, + 100, + 44, + 32, + 76, + 111, + 110, + 100, + 111, + 110, + 32, + 83, + 69, + 51, + 32, + 55, + 83, + 68, + 10, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 112, + 119, + 99, + 111, + 109, + 46, + 99, + 111, + 46, + 117, + 107, + 10, + 86, + 69, + 82, + 83, + 73, + 79, + 78, + 58, + 51, + 46, + 48, + 10, + 69, + 78, + 68, + 58, + 86, + 67, + 65, + 82, + 68 + ], + "data": "BEGIN:VCARD\nN:Wilkinson;Paul\nTEL:020 8858 1104\nEMAIL:paul.wilkinson@pwcom.co.uk\nORG:pwcom.co.uk Limited\nTITLE:Dr\nADR:33 Glenluce Road, London SE3 7SD\nURL:http://www.pwcom.co.uk\nVERSION:3.0\nEND:VCARD", + "chunks": [ + { + "type": "byte", + "bytes": [ + 66, + 69, + 71, + 73, + 78, + 58, + 86, + 67, + 65, + 82, + 68, + 10, + 78, + 58, + 87, + 105, + 108, + 107, + 105, + 110, + 115, + 111, + 110, + 59, + 80, + 97, + 117, + 108, + 10, + 84, + 69, + 76, + 58, + 48, + 50, + 48, + 32, + 56, + 56, + 53, + 56, + 32, + 49, + 49, + 48, + 52, + 10, + 69, + 77, + 65, + 73, + 76, + 58, + 112, + 97, + 117, + 108, + 46, + 119, + 105, + 108, + 107, + 105, + 110, + 115, + 111, + 110, + 64, + 112, + 119, + 99, + 111, + 109, + 46, + 99, + 111, + 46, + 117, + 107, + 10, + 79, + 82, + 71, + 58, + 112, + 119, + 99, + 111, + 109, + 46, + 99, + 111, + 46, + 117, + 107, + 32, + 76, + 105, + 109, + 105, + 116, + 101, + 100, + 10, + 84, + 73, + 84, + 76, + 69, + 58, + 68, + 114, + 10, + 65, + 68, + 82, + 58, + 51, + 51, + 32, + 71, + 108, + 101, + 110, + 108, + 117, + 99, + 101, + 32, + 82, + 111, + 97, + 100, + 44, + 32, + 76, + 111, + 110, + 100, + 111, + 110, + 32, + 83, + 69, + 51, + 32, + 55, + 83, + 68, + 10, + 85, + 82, + 76, + 58, + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 112, + 119, + 99, + 111, + 109, + 46, + 99, + 111, + 46, + 117, + 107, + 10, + 86, + 69, + 82, + 83, + 73, + 79, + 78, + 58, + 51, + 46, + 48, + 10, + 69, + 78, + 68, + 58, + 86, + 67, + 65, + 82, + 68 + ], + "text": "BEGIN:VCARD\nN:Wilkinson;Paul\nTEL:020 8858 1104\nEMAIL:paul.wilkinson@pwcom.co.uk\nORG:pwcom.co.uk Limited\nTITLE:Dr\nADR:33 Glenluce Road, London SE3 7SD\nURL:http://www.pwcom.co.uk\nVERSION:3.0\nEND:VCARD" + } + ], + "version": 9, + "location": { + "topRightCorner": { + "x": 414.88825680409997, + "y": 414.9051364090377 + }, + "topLeftCorner": { + "x": 657.6585605129388, + "y": 418.30594285972694 + }, + "bottomRightCorner": { + "x": 419.06802374803755, + "y": 169.85119785648357 + }, + "bottomLeftCorner": { + "x": 662.6056487162122, + "y": 174.1007879921472 + }, + "topRightFinderPattern": { + "x": 431.25, + "y": 399 + }, + "topLeftFinderPattern": { + "x": 642, + "y": 402 + }, + "bottomLeftFinderPattern": { + "x": 646.25, + "y": 190 + }, + "bottomRightAlignmentPattern": { + "x": 448.5, + "y": 200.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/cache-flyer/input.png b/jsQR/tests/end-to-end/cache-flyer/input.png new file mode 100644 index 0000000000000000000000000000000000000000..12bcffb395a1e3cd55bd24b827f0ab1093eb2257 Binary files /dev/null and b/jsQR/tests/end-to-end/cache-flyer/input.png differ diff --git a/jsQR/tests/end-to-end/cache-flyer/output.json b/jsQR/tests/end-to-end/cache-flyer/output.json new file mode 100644 index 0000000000000000000000000000000000000000..dd36a6a8489d703252dc904a02a67c50270da936 --- /dev/null +++ b/jsQR/tests/end-to-end/cache-flyer/output.json @@ -0,0 +1,136 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 97, + 99, + 104, + 101, + 46, + 111, + 114, + 103, + 46, + 104, + 107, + 47, + 98, + 108, + 111, + 103, + 47, + 115, + 121, + 112, + 95, + 115, + 99, + 104, + 111, + 111, + 108, + 95, + 115, + 116, + 108, + 111, + 117, + 105, + 115, + 47 + ], + "data": "http://cache.org.hk/blog/syp_school_stlouis/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 99, + 97, + 99, + 104, + 101, + 46, + 111, + 114, + 103, + 46, + 104, + 107, + 47, + 98, + 108, + 111, + 103, + 47, + 115, + 121, + 112, + 95, + 115, + 99, + 104, + 111, + 111, + 108, + 95, + 115, + 116, + 108, + 111, + 117, + 105, + 115, + 47 + ], + "text": "http://cache.org.hk/blog/syp_school_stlouis/" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 247.96526509690233, + "y": 324.9639430135446 + }, + "topLeftCorner": { + "x": 71.24284381661616, + "y": 323.0248849551155 + }, + "bottomRightCorner": { + "x": 243.83259142184275, + "y": 491.44213316768827 + }, + "bottomLeftCorner": { + "x": 72.97613555732114, + "y": 494.3507840367927 + }, + "topRightFinderPattern": { + "x": 226.75, + "y": 345.5 + }, + "topLeftFinderPattern": { + "x": 93.25, + "y": 344.5 + }, + "bottomLeftFinderPattern": { + "x": 94, + "y": 474 + }, + "bottomRightAlignmentPattern": { + "x": 207, + "y": 455.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/cgi/input.png b/jsQR/tests/end-to-end/cgi/input.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c4bd11cc03923ae8095d946293bcbb29048e46 Binary files /dev/null and b/jsQR/tests/end-to-end/cgi/input.png differ diff --git a/jsQR/tests/end-to-end/cgi/output.json b/jsQR/tests/end-to-end/cgi/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cb9bf88f1fa352f155f2277931d9aac5b531277d --- /dev/null +++ b/jsQR/tests/end-to-end/cgi/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 110, + 111, + 114, + 101, + 98, + 98, + 111, + 46, + 99, + 111, + 109 + ], + "data": "http://www.norebbo.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 110, + 111, + 114, + 101, + 98, + 98, + 111, + 46, + 99, + 111, + 109 + ], + "text": "http://www.norebbo.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 391.6669650668367, + "y": 137.24275074145362 + }, + "topLeftCorner": { + "x": 183.52801382318995, + "y": 140.74681336656948 + }, + "bottomRightCorner": { + "x": 389.53345304807044, + "y": 350.92547511718425 + }, + "bottomLeftCorner": { + "x": 185.36071603343404, + "y": 363.32276166304194 + }, + "topRightFinderPattern": { + "x": 367.25, + "y": 164 + }, + "topLeftFinderPattern": { + "x": 209.75, + "y": 167.5 + }, + "bottomLeftFinderPattern": { + "x": 210.75, + "y": 335.5 + }, + "bottomRightAlignmentPattern": { + "x": 345.5, + "y": 306 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/chevy-ad/input.png b/jsQR/tests/end-to-end/chevy-ad/input.png new file mode 100644 index 0000000000000000000000000000000000000000..fdcd6d71684e590f07bdf52ac2bf5a7a87b3f30e Binary files /dev/null and b/jsQR/tests/end-to-end/chevy-ad/input.png differ diff --git a/jsQR/tests/end-to-end/chevy-ad/output.json b/jsQR/tests/end-to-end/chevy-ad/output.json new file mode 100644 index 0000000000000000000000000000000000000000..57e72d9c311b513b1a366406f4776069bff9e38b --- /dev/null +++ b/jsQR/tests/end-to-end/chevy-ad/output.json @@ -0,0 +1,94 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 99, + 122, + 97, + 105, + 114, + 98, + 97, + 103, + 115 + ], + "data": "http://bit.ly/czairbags", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 99, + 122, + 97, + 105, + 114, + 98, + 97, + 103, + 115 + ], + "text": "http://bit.ly/czairbags" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 234.2082012596795, + "y": 31.553463760873377 + }, + "topLeftCorner": { + "x": 0.7334430633547991, + "y": 34.97679352144757 + }, + "bottomRightCorner": { + "x": 233.17146329652817, + "y": 257.5399959015776 + }, + "bottomLeftCorner": { + "x": 16.149608286461746, + "y": 255.22022024474873 + }, + "topRightFinderPattern": { + "x": 205.5, + "y": 61 + }, + "topLeftFinderPattern": { + "x": 30, + "y": 63 + }, + "bottomLeftFinderPattern": { + "x": 40.25, + "y": 230.5 + }, + "bottomRightAlignmentPattern": { + "x": 183, + "y": 209.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/cupake-5/input.png b/jsQR/tests/end-to-end/cupake-5/input.png new file mode 100644 index 0000000000000000000000000000000000000000..0a89c7e0303562a8d6905b89cf0a970f101058d6 Binary files /dev/null and b/jsQR/tests/end-to-end/cupake-5/input.png differ diff --git a/jsQR/tests/end-to-end/cupake-5/output.json b/jsQR/tests/end-to-end/cupake-5/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/cupake-5/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/cupcake-1/input.png b/jsQR/tests/end-to-end/cupcake-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..fd54e149cb9c6559122c0262ded9c0cf62975f21 Binary files /dev/null and b/jsQR/tests/end-to-end/cupcake-1/input.png differ diff --git a/jsQR/tests/end-to-end/cupcake-1/output.json b/jsQR/tests/end-to-end/cupcake-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..900e85ac03d275ba89f0cf6416dbf7a2635404d2 --- /dev/null +++ b/jsQR/tests/end-to-end/cupcake-1/output.json @@ -0,0 +1,86 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47 + ], + "data": "http://geoloqi.com/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47 + ], + "text": "http://geoloqi.com/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 52.23568700197095, + "y": 114.71250622781096 + }, + "topLeftCorner": { + "x": 118.99533062743382, + "y": 174.15575369746148 + }, + "bottomRightCorner": { + "x": 105.99896947580555, + "y": 24.068744268980367 + }, + "bottomLeftCorner": { + "x": 180.20527234061936, + "y": 85.50205740051082 + }, + "topRightFinderPattern": { + "x": 68.5, + "y": 111 + }, + "topLeftFinderPattern": { + "x": 117.25, + "y": 154 + }, + "bottomLeftFinderPattern": { + "x": 160.5, + "y": 90 + }, + "bottomRightAlignmentPattern": { + "x": 109.5, + "y": 64.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/cupcake-2/input.png b/jsQR/tests/end-to-end/cupcake-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..2967a3d7ea405e64b4bd35c46092bd5dc2cdda69 Binary files /dev/null and b/jsQR/tests/end-to-end/cupcake-2/input.png differ diff --git a/jsQR/tests/end-to-end/cupcake-2/output.json b/jsQR/tests/end-to-end/cupcake-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..02e94183d23a4f2335fabdf200a66199e7fa0202 --- /dev/null +++ b/jsQR/tests/end-to-end/cupcake-2/output.json @@ -0,0 +1,86 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47 + ], + "data": "http://geoloqi.com/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47 + ], + "text": "http://geoloqi.com/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 127.46497636162992, + "y": 34.06874732856506 + }, + "topLeftCorner": { + "x": 41.953364086855075, + "y": 105.74936541101754 + }, + "bottomRightCorner": { + "x": 189.71164362381936, + "y": 96.54063410843052 + }, + "bottomLeftCorner": { + "x": 99.62566806959562, + "y": 178.13716773984265 + }, + "topRightFinderPattern": { + "x": 124, + "y": 52 + }, + "topLeftFinderPattern": { + "x": 62, + "y": 104.5 + }, + "bottomLeftFinderPattern": { + "x": 104, + "y": 155.5 + }, + "bottomRightAlignmentPattern": { + "x": 150.25, + "y": 99 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/cupcake-3/input.png b/jsQR/tests/end-to-end/cupcake-3/input.png new file mode 100644 index 0000000000000000000000000000000000000000..cfca35533bbb2d4ded7c33be940428fa843000ad Binary files /dev/null and b/jsQR/tests/end-to-end/cupcake-3/input.png differ diff --git a/jsQR/tests/end-to-end/cupcake-3/output.json b/jsQR/tests/end-to-end/cupcake-3/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cfdbf89e4dbb6b5ea21010245fff8ad0744f12b4 --- /dev/null +++ b/jsQR/tests/end-to-end/cupcake-3/output.json @@ -0,0 +1,86 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47 + ], + "data": "http://geoloqi.com/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47 + ], + "text": "http://geoloqi.com/" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 214.48640833894393, + "y": 74.1161753390401 + }, + "topLeftCorner": { + "x": 105.36872551552081, + "y": 44.624139961393276 + }, + "bottomRightCorner": { + "x": 164.94495183976292, + "y": 195.88860112507186 + }, + "bottomLeftCorner": { + "x": 53.71983104023025, + "y": 158.14535828998763 + }, + "topRightFinderPattern": { + "x": 191.75, + "y": 86 + }, + "topLeftFinderPattern": { + "x": 113, + "y": 64 + }, + "bottomLeftFinderPattern": { + "x": 76, + "y": 146.5 + }, + "bottomRightAlignmentPattern": { + "x": 148.25, + "y": 153.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/cupcake-4/input.png b/jsQR/tests/end-to-end/cupcake-4/input.png new file mode 100644 index 0000000000000000000000000000000000000000..c3555fb1c9aaba4df07880a17219100b3f0d5db6 Binary files /dev/null and b/jsQR/tests/end-to-end/cupcake-4/input.png differ diff --git a/jsQR/tests/end-to-end/cupcake-4/output.json b/jsQR/tests/end-to-end/cupcake-4/output.json new file mode 100644 index 0000000000000000000000000000000000000000..0051ba85f28f82af20519525bc0c6574db5846a5 --- /dev/null +++ b/jsQR/tests/end-to-end/cupcake-4/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47, + 116 + ], + "data": "http://geoloqi.com/t", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 101, + 111, + 108, + 111, + 113, + 105, + 46, + 99, + 111, + 109, + 47, + 116 + ], + "text": "http://geoloqi.com/t" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 249.63414362140875, + "y": 200.73124522548534 + }, + "topLeftCorner": { + "x": 189.1295291054368, + "y": 63.88430053936782 + }, + "bottomRightCorner": { + "x": 114.15628617648461, + "y": 268.28062763058944 + }, + "bottomLeftCorner": { + "x": 65.66619121582137, + "y": 131.1781441269646 + }, + "topRightFinderPattern": { + "x": 221.25, + "y": 190 + }, + "topLeftFinderPattern": { + "x": 179, + "y": 91.5 + }, + "bottomLeftFinderPattern": { + "x": 89, + "y": 140 + }, + "bottomRightAlignmentPattern": { + "x": 134.25, + "y": 213.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/damaged/input.png b/jsQR/tests/end-to-end/damaged/input.png new file mode 100644 index 0000000000000000000000000000000000000000..6106a923296d5958491982a65d29f84a3eae6ac1 Binary files /dev/null and b/jsQR/tests/end-to-end/damaged/input.png differ diff --git a/jsQR/tests/end-to-end/damaged/output.json b/jsQR/tests/end-to-end/damaged/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/damaged/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/emblem-patch/input.png b/jsQR/tests/end-to-end/emblem-patch/input.png new file mode 100644 index 0000000000000000000000000000000000000000..25223fb5d85a34050c1b7bc8f957baa828bff20e Binary files /dev/null and b/jsQR/tests/end-to-end/emblem-patch/input.png differ diff --git a/jsQR/tests/end-to-end/emblem-patch/output.json b/jsQR/tests/end-to-end/emblem-patch/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/emblem-patch/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/hk-ikea/input.png b/jsQR/tests/end-to-end/hk-ikea/input.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf5433cdbc088f1a677fd74a2a8ee480f38bea7 Binary files /dev/null and b/jsQR/tests/end-to-end/hk-ikea/input.png differ diff --git a/jsQR/tests/end-to-end/hk-ikea/output.json b/jsQR/tests/end-to-end/hk-ikea/output.json new file mode 100644 index 0000000000000000000000000000000000000000..0600252e31365d37ac33743467e19af9cf1c2d3f --- /dev/null +++ b/jsQR/tests/end-to-end/hk-ikea/output.json @@ -0,0 +1,122 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 109, + 46, + 104, + 107, + 99, + 108, + 101, + 97, + 110, + 46, + 110, + 101, + 116, + 47, + 103, + 111, + 111, + 100, + 115, + 46, + 112, + 104, + 112, + 63, + 105, + 100, + 61, + 49, + 53, + 50 + ], + "data": "http://m.hkclean.net/goods.php?id=152", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 109, + 46, + 104, + 107, + 99, + 108, + 101, + 97, + 110, + 46, + 110, + 101, + 116, + 47, + 103, + 111, + 111, + 100, + 115, + 46, + 112, + 104, + 112, + 63, + 105, + 100, + 61, + 49, + 53, + 50 + ], + "text": "http://m.hkclean.net/goods.php?id=152" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 380.977093206951, + "y": 190.4162717219589 + }, + "topLeftCorner": { + "x": 431.2353725860779, + "y": 133.6204407060878 + }, + "bottomRightCorner": { + "x": 311.01449192816204, + "y": 145.0700483877941 + }, + "bottomLeftCorner": { + "x": 362.49428587126727, + "y": 94.04163347160792 + }, + "topRightFinderPattern": { + "x": 378.5, + "y": 177.5 + }, + "topLeftFinderPattern": { + "x": 416.75, + "y": 135 + }, + "bottomLeftFinderPattern": { + "x": 364.5, + "y": 104.5 + }, + "bottomRightAlignmentPattern": { + "x": 338, + "y": 142.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/hudson-highlands-state-park/input.png b/jsQR/tests/end-to-end/hudson-highlands-state-park/input.png new file mode 100644 index 0000000000000000000000000000000000000000..1b93647f4f974a1b1edf63a09016379f4e7a0347 Binary files /dev/null and b/jsQR/tests/end-to-end/hudson-highlands-state-park/input.png differ diff --git a/jsQR/tests/end-to-end/hudson-highlands-state-park/output.json b/jsQR/tests/end-to-end/hudson-highlands-state-park/output.json new file mode 100644 index 0000000000000000000000000000000000000000..728f0e953023752d9c60e29dd830f3f87e70cd56 --- /dev/null +++ b/jsQR/tests/end-to-end/hudson-highlands-state-park/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 46, + 98, + 121, + 47, + 119, + 107, + 69, + 116, + 99, + 111 + ], + "data": "http://goo.by/wkEtco", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 111, + 111, + 46, + 98, + 121, + 47, + 119, + 107, + 69, + 116, + 99, + 111 + ], + "text": "http://goo.by/wkEtco" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 424.6663135009608, + "y": 233.03582243782023 + }, + "topLeftCorner": { + "x": 180.65131543896337, + "y": 244.20488690277125 + }, + "bottomRightCorner": { + "x": 414.6848248507361, + "y": 454.71121811970966 + }, + "bottomLeftCorner": { + "x": 186.41386455407053, + "y": 469.89904427714856 + }, + "topRightFinderPattern": { + "x": 390, + "y": 267.5 + }, + "topLeftFinderPattern": { + "x": 216, + "y": 276 + }, + "bottomLeftFinderPattern": { + "x": 218.5, + "y": 438 + }, + "bottomRightAlignmentPattern": { + "x": 357.75, + "y": 403.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-14-regression/input.png b/jsQR/tests/end-to-end/issue-14-regression/input.png new file mode 100644 index 0000000000000000000000000000000000000000..15600366c5524dd31d3531a836a767f47ed5cbe2 Binary files /dev/null and b/jsQR/tests/end-to-end/issue-14-regression/input.png differ diff --git a/jsQR/tests/end-to-end/issue-14-regression/output.json b/jsQR/tests/end-to-end/issue-14-regression/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/issue-14-regression/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-32-regression/input.png b/jsQR/tests/end-to-end/issue-32-regression/input.png new file mode 100644 index 0000000000000000000000000000000000000000..e83646324062bf57866e9420a9d0b96428ebe780 Binary files /dev/null and b/jsQR/tests/end-to-end/issue-32-regression/input.png differ diff --git a/jsQR/tests/end-to-end/issue-32-regression/output.json b/jsQR/tests/end-to-end/issue-32-regression/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f4859e84070874578c8eafc56a366699439f72c9 --- /dev/null +++ b/jsQR/tests/end-to-end/issue-32-regression/output.json @@ -0,0 +1,132 @@ +{ + "binaryData": [ + 119, + 120, + 112, + 58, + 47, + 47, + 102, + 50, + 102, + 48, + 45, + 49, + 68, + 76, + 111, + 114, + 65, + 109, + 67, + 71, + 87, + 48, + 109, + 53, + 81, + 110, + 83, + 66, + 110, + 101, + 120, + 70, + 65, + 122, + 83, + 115, + 48, + 83, + 106, + 84, + 84, + 103 + ], + "data": "wxp://f2f0-1DLorAmCGW0m5QnSBnexFAzSs0SjTTg", + "chunks": [ + { + "type": "byte", + "bytes": [ + 119, + 120, + 112, + 58, + 47, + 47, + 102, + 50, + 102, + 48, + 45, + 49, + 68, + 76, + 111, + 114, + 65, + 109, + 67, + 71, + 87, + 48, + 109, + 53, + 81, + 110, + 83, + 66, + 110, + 101, + 120, + 70, + 65, + 122, + 83, + 115, + 48, + 83, + 106, + 84, + 84, + 103 + ], + "text": "wxp://f2f0-1DLorAmCGW0m5QnSBnexFAzSs0SjTTg" + } + ], + "version": 5, + "location": { + "topRightCorner": { + "x": 668.9369578427243, + "y": 688.3656882516823 + }, + "topLeftCorner": { + "x": 463.10362888076054, + "y": 529.3025013808211 + }, + "bottomRightCorner": { + "x": 502.97045781966176, + "y": 897.7269895058389 + }, + "bottomLeftCorner": { + "x": 298.9310146415016, + "y": 731.5330482918249 + }, + "topRightFinderPattern": { + "x": 633.5, + "y": 692.5 + }, + "topLeftFinderPattern": { + "x": 466.75, + "y": 563 + }, + "bottomLeftFinderPattern": { + "x": 333.5, + "y": 727.5 + }, + "bottomRightAlignmentPattern": { + "x": 495.75, + "y": 831 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-34-regression/input.png b/jsQR/tests/end-to-end/issue-34-regression/input.png new file mode 100644 index 0000000000000000000000000000000000000000..89367fcd8a5858eda60f8316599b7bdd39d09ed9 Binary files /dev/null and b/jsQR/tests/end-to-end/issue-34-regression/input.png differ diff --git a/jsQR/tests/end-to-end/issue-34-regression/output.json b/jsQR/tests/end-to-end/issue-34-regression/output.json new file mode 100644 index 0000000000000000000000000000000000000000..316c6315f127b120f09d75451389515c1ea36601 --- /dev/null +++ b/jsQR/tests/end-to-end/issue-34-regression/output.json @@ -0,0 +1,248 @@ +{ + "binaryData": [ + 66, + 65, + 103, + 65, + 88, + 65, + 61, + 61, + 72, + 104, + 119, + 112, + 121, + 47, + 54, + 51, + 121, + 80, + 54, + 98, + 119, + 116, + 49, + 120, + 75, + 68, + 82, + 83, + 65, + 81, + 82, + 112, + 111, + 107, + 98, + 89, + 78, + 84, + 115, + 86, + 85, + 88, + 55, + 69, + 90, + 43, + 43, + 109, + 115, + 99, + 118, + 106, + 76, + 102, + 48, + 77, + 97, + 119, + 101, + 120, + 78, + 68, + 89, + 53, + 67, + 75, + 108, + 118, + 99, + 119, + 102, + 47, + 68, + 74, + 111, + 115, + 113, + 79, + 112, + 97, + 107, + 77, + 76, + 75, + 103, + 120, + 122, + 98, + 69, + 98, + 119, + 47, + 69, + 51, + 119, + 107, + 83, + 75, + 57, + 47 + ], + "data": "BAgAXA==Hhwpy/63yP6bwt1xKDRSAQRpokbYNTsVUX7EZ++mscvjLf0MawexNDY5CKlvcwf/DJosqOpakMLKgxzbEbw/E3wkSK9/", + "chunks": [ + { + "type": "byte", + "bytes": [ + 66, + 65, + 103, + 65, + 88, + 65, + 61, + 61, + 72, + 104, + 119, + 112, + 121, + 47, + 54, + 51, + 121, + 80, + 54, + 98, + 119, + 116, + 49, + 120, + 75, + 68, + 82, + 83, + 65, + 81, + 82, + 112, + 111, + 107, + 98, + 89, + 78, + 84, + 115, + 86, + 85, + 88, + 55, + 69, + 90, + 43, + 43, + 109, + 115, + 99, + 118, + 106, + 76, + 102, + 48, + 77, + 97, + 119, + 101, + 120, + 78, + 68, + 89, + 53, + 67, + 75, + 108, + 118, + 99, + 119, + 102, + 47, + 68, + 74, + 111, + 115, + 113, + 79, + 112, + 97, + 107, + 77, + 76, + 75, + 103, + 120, + 122, + 98, + 69, + 98, + 119, + 47, + 69, + 51, + 119, + 107, + 83, + 75, + 57, + 47 + ], + "text": "BAgAXA==Hhwpy/63yP6bwt1xKDRSAQRpokbYNTsVUX7EZ++mscvjLf0MawexNDY5CKlvcwf/DJosqOpakMLKgxzbEbw/E3wkSK9/" + } + ], + "version": 10, + "location": { + "topRightCorner": { + "x": 424.0000000000001, + "y": 25.000000000000004 + }, + "topLeftCorner": { + "x": 25.000000000000004, + "y": 25.000000000000004 + }, + "bottomRightCorner": { + "x": 424.0000000000001, + "y": 424.0000000000001 + }, + "bottomLeftCorner": { + "x": 25.000000000000004, + "y": 424.0000000000001 + }, + "topRightFinderPattern": { + "x": 399.5, + "y": 49.5 + }, + "topLeftFinderPattern": { + "x": 49.5, + "y": 49.5 + }, + "bottomLeftFinderPattern": { + "x": 49.5, + "y": 399.5 + }, + "bottomRightAlignmentPattern": { + "x": 378.5, + "y": 378.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-54-1/input.png b/jsQR/tests/end-to-end/issue-54-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..adfb27fab8cb902645083eb37d3483bfeb601f0a Binary files /dev/null and b/jsQR/tests/end-to-end/issue-54-1/input.png differ diff --git a/jsQR/tests/end-to-end/issue-54-1/output.json b/jsQR/tests/end-to-end/issue-54-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/issue-54-1/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-54-2/input.png b/jsQR/tests/end-to-end/issue-54-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..a719fca2aed5da0e7702d5124aac3849ad5933cc Binary files /dev/null and b/jsQR/tests/end-to-end/issue-54-2/input.png differ diff --git a/jsQR/tests/end-to-end/issue-54-2/output.json b/jsQR/tests/end-to-end/issue-54-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/issue-54-2/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-59-inverted/input.png b/jsQR/tests/end-to-end/issue-59-inverted/input.png new file mode 100644 index 0000000000000000000000000000000000000000..b3e58b6ed90bb9c28d042512b1d6f08162dbdde8 Binary files /dev/null and b/jsQR/tests/end-to-end/issue-59-inverted/input.png differ diff --git a/jsQR/tests/end-to-end/issue-59-inverted/output.json b/jsQR/tests/end-to-end/issue-59-inverted/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4e94b44d01d81a679b9abe1cf4bccaf711b0d71b --- /dev/null +++ b/jsQR/tests/end-to-end/issue-59-inverted/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 113, + 114, + 115, + 116, + 117, + 102, + 102, + 46, + 99, + 111, + 109 + ], + "data": "http://www.qrstuff.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 113, + 114, + 115, + 116, + 117, + 102, + 102, + 46, + 99, + 111, + 109 + ], + "text": "http://www.qrstuff.com" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 159.66666666666669, + "y": 20.333333333333332 + }, + "topLeftCorner": { + "x": 26.085501858736055, + "y": 20.08550185873606 + }, + "bottomRightCorner": { + "x": 158.18365235385414, + "y": 152.18365235385411 + }, + "bottomLeftCorner": { + "x": 26.333333333333332, + "y": 153.66666666666666 + }, + "topRightFinderPattern": { + "x": 141, + "y": 39 + }, + "topLeftFinderPattern": { + "x": 45, + "y": 39 + }, + "bottomLeftFinderPattern": { + "x": 45, + "y": 135 + }, + "bottomRightAlignmentPattern": { + "x": 124.5, + "y": 118.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-59/input.png b/jsQR/tests/end-to-end/issue-59/input.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c4a7a56cf255fe2269bb4753e02291f8458004 Binary files /dev/null and b/jsQR/tests/end-to-end/issue-59/input.png differ diff --git a/jsQR/tests/end-to-end/issue-59/output.json b/jsQR/tests/end-to-end/issue-59/output.json new file mode 100644 index 0000000000000000000000000000000000000000..f6b891352e9d6127faf0c447a8fba441f21ddbdd --- /dev/null +++ b/jsQR/tests/end-to-end/issue-59/output.json @@ -0,0 +1,92 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 113, + 114, + 115, + 116, + 117, + 102, + 102, + 46, + 99, + 111, + 109 + ], + "data": "http://www.qrstuff.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 113, + 114, + 115, + 116, + 117, + 102, + 102, + 46, + 99, + 111, + 109 + ], + "text": "http://www.qrstuff.com" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 153.66666666666666, + "y": 20.333333333333332 + }, + "topLeftCorner": { + "x": 20.08550185873606, + "y": 20.08550185873606 + }, + "bottomRightCorner": { + "x": 152.18365235385411, + "y": 152.18365235385411 + }, + "bottomLeftCorner": { + "x": 20.333333333333332, + "y": 153.66666666666666 + }, + "topRightFinderPattern": { + "x": 135, + "y": 39 + }, + "topLeftFinderPattern": { + "x": 39, + "y": 39 + }, + "bottomLeftFinderPattern": { + "x": 39, + "y": 135 + }, + "bottomRightAlignmentPattern": { + "x": 118.5, + "y": 118.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/issue-61/input.png b/jsQR/tests/end-to-end/issue-61/input.png new file mode 100644 index 0000000000000000000000000000000000000000..53a6c0a790f4124f4cc0120dc11d6d46f0f18e1e Binary files /dev/null and b/jsQR/tests/end-to-end/issue-61/input.png differ diff --git a/jsQR/tests/end-to-end/issue-61/output.json b/jsQR/tests/end-to-end/issue-61/output.json new file mode 100644 index 0000000000000000000000000000000000000000..fb0b46ec1a519800cc125db0c91d861044c30538 --- /dev/null +++ b/jsQR/tests/end-to-end/issue-61/output.json @@ -0,0 +1,130 @@ +{ + "binaryData": [ + 55, + 57, + 52, + 56, + 44, + 51, + 50, + 56, + 44, + 49, + 48, + 49, + 57, + 44, + 49, + 52, + 57, + 44, + 49, + 50, + 44, + 49, + 50, + 44, + 49, + 53, + 44, + 52, + 44, + 49, + 52, + 44, + 49, + 49, + 44, + 51, + 50, + 44, + 52 + ], + "data": "7948,328,1019,149,12,12,15,4,14,11,32,4", + "chunks": [ + { + "type": "eci", + "assignmentNumber": 26 + }, + { + "type": "byte", + "bytes": [ + 55, + 57, + 52, + 56, + 44, + 51, + 50, + 56, + 44, + 49, + 48, + 49, + 57, + 44, + 49, + 52, + 57, + 44, + 49, + 50, + 44, + 49, + 50, + 44, + 49, + 53, + 44, + 52, + 44, + 49, + 52, + 44, + 49, + 49, + 44, + 51, + 50, + 44, + 52 + ], + "text": "7948,328,1019,149,12,12,15,4,14,11,32,4" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 383.84809348093484, + "y": 488.1519065190653 + }, + "topLeftCorner": { + "x": 173.02219884001437, + "y": 488.1141764615306 + }, + "bottomRightCorner": { + "x": 384.45612961610846, + "y": 698.7848078485414 + }, + "bottomLeftCorner": { + "x": 172.9384938617451, + "y": 699.061506138255 + }, + "topRightFinderPattern": { + "x": 358.5, + "y": 513.5 + }, + "topLeftFinderPattern": { + "x": 198.5, + "y": 513.5 + }, + "bottomLeftFinderPattern": { + "x": 198.5, + "y": 673.5 + }, + "bottomRightAlignmentPattern": { + "x": 337, + "y": 651.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/japan-visa/input.png b/jsQR/tests/end-to-end/japan-visa/input.png new file mode 100644 index 0000000000000000000000000000000000000000..44fad38c9abedab4a7fff69e3a4602c635e97f38 Binary files /dev/null and b/jsQR/tests/end-to-end/japan-visa/input.png differ diff --git a/jsQR/tests/end-to-end/japan-visa/output.json b/jsQR/tests/end-to-end/japan-visa/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/japan-visa/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/japanese-jean-ad/input.png b/jsQR/tests/end-to-end/japanese-jean-ad/input.png new file mode 100644 index 0000000000000000000000000000000000000000..8b61f814ad1b36aa3903a298dc05e790ca4bbed8 Binary files /dev/null and b/jsQR/tests/end-to-end/japanese-jean-ad/input.png differ diff --git a/jsQR/tests/end-to-end/japanese-jean-ad/output.json b/jsQR/tests/end-to-end/japanese-jean-ad/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/japanese-jean-ad/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/kanji/input.png b/jsQR/tests/end-to-end/kanji/input.png new file mode 100644 index 0000000000000000000000000000000000000000..ba3e5430c5dca5104a0df7a76679b09ef92fe09c Binary files /dev/null and b/jsQR/tests/end-to-end/kanji/input.png differ diff --git a/jsQR/tests/end-to-end/kanji/output.json b/jsQR/tests/end-to-end/kanji/output.json new file mode 100644 index 0000000000000000000000000000000000000000..fa8a877fdfc9537bb0885beedb8843af21eaa8d4 --- /dev/null +++ b/jsQR/tests/end-to-end/kanji/output.json @@ -0,0 +1,112 @@ +{ + "binaryData": [ + 144, + 206, + 144, + 207, + 144, + 208, + 144, + 209, + 144, + 210, + 144, + 211, + 144, + 212, + 144, + 213, + 144, + 214, + 144, + 215, + 144, + 216, + 144, + 217, + 144, + 218, + 144, + 219, + 144, + 220, + 144, + 221 + ], + "data": "石ç©ç±ç¸¾è„Šè²¬èµ¤è·¡è¹Ÿç¢©åˆ‡æ‹™æŽ¥æ‘‚折è¨", + "chunks": [ + { + "type": "kanji", + "bytes": [ + 144, + 206, + 144, + 207, + 144, + 208, + 144, + 209, + 144, + 210, + 144, + 211, + 144, + 212, + 144, + 213, + 144, + 214, + 144, + 215, + 144, + 216, + 144, + 217, + 144, + 218, + 144, + 219, + 144, + 220, + 144, + 221 + ], + "text": "石ç©ç±ç¸¾è„Šè²¬èµ¤è·¡è¹Ÿç¢©åˆ‡æ‹™æŽ¥æ‘‚折è¨" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 131.51388888888889, + "y": 183.98611111111114 + }, + "topLeftCorner": { + "x": 34.77896995708155, + "y": 183.77896995708156 + }, + "bottomRightCorner": { + "x": 130.27929803688284, + "y": 279.27929803688284 + }, + "bottomLeftCorner": { + "x": 34.986111111111114, + "y": 280.5138888888889 + }, + "topRightFinderPattern": { + "x": 118, + "y": 197.5 + }, + "topLeftFinderPattern": { + "x": 48.5, + "y": 197.5 + }, + "bottomLeftFinderPattern": { + "x": 48.5, + "y": 267 + }, + "bottomRightAlignmentPattern": { + "x": 106, + "y": 255 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/key-flyer/input.png b/jsQR/tests/end-to-end/key-flyer/input.png new file mode 100644 index 0000000000000000000000000000000000000000..ca3c3c010c97305c68cc7dc7c588e2643d140b9f Binary files /dev/null and b/jsQR/tests/end-to-end/key-flyer/input.png differ diff --git a/jsQR/tests/end-to-end/key-flyer/output.json b/jsQR/tests/end-to-end/key-flyer/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/key-flyer/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/museum-1/input.png b/jsQR/tests/end-to-end/museum-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad3e001c909fee6e9a7fbb78228b4c2389ea2aa Binary files /dev/null and b/jsQR/tests/end-to-end/museum-1/input.png differ diff --git a/jsQR/tests/end-to-end/museum-1/output.json b/jsQR/tests/end-to-end/museum-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..78b0cbbba15d81fecd6d39e6442561358c4cb602 --- /dev/null +++ b/jsQR/tests/end-to-end/museum-1/output.json @@ -0,0 +1,98 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 100, + 73, + 101, + 98, + 83, + 120, + 63, + 114, + 61, + 113, + 114 + ], + "data": "http://bit.ly/dIebSx?r=qr", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 100, + 73, + 101, + 98, + 83, + 120, + 63, + 114, + 61, + 113, + 114 + ], + "text": "http://bit.ly/dIebSx?r=qr" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 687.8485761943585, + "y": 348.6658264206267 + }, + "topLeftCorner": { + "x": 600.9290141766379, + "y": 351.64425269736205 + }, + "bottomRightCorner": { + "x": 691.7636320514273, + "y": 435.3627945174445 + }, + "bottomLeftCorner": { + "x": 603.1263385496964, + "y": 436.8602869195784 + }, + "topRightFinderPattern": { + "x": 676, + "y": 361 + }, + "topLeftFinderPattern": { + "x": 613.25, + "y": 363 + }, + "bottomLeftFinderPattern": { + "x": 615, + "y": 424.5 + }, + "bottomRightAlignmentPattern": { + "x": 667.5, + "y": 413 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/museum-2/input.png b/jsQR/tests/end-to-end/museum-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebefde213b6c08c621eb525fc5a44688c6b6976 Binary files /dev/null and b/jsQR/tests/end-to-end/museum-2/input.png differ diff --git a/jsQR/tests/end-to-end/museum-2/output.json b/jsQR/tests/end-to-end/museum-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/museum-2/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/paper-flyer/input.png b/jsQR/tests/end-to-end/paper-flyer/input.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8ddc141dd1eb8e54016a099b0d7b8c22be8714 Binary files /dev/null and b/jsQR/tests/end-to-end/paper-flyer/input.png differ diff --git a/jsQR/tests/end-to-end/paper-flyer/output.json b/jsQR/tests/end-to-end/paper-flyer/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4cd01a15af204b6bf8c23a4e775371b85b4e4547 --- /dev/null +++ b/jsQR/tests/end-to-end/paper-flyer/output.json @@ -0,0 +1,98 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 103, + 108, + 52, + 88, + 74, + 73, + 63, + 114, + 61, + 113, + 114 + ], + "data": "http://bit.ly/gl4XJI?r=qr", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 98, + 105, + 116, + 46, + 108, + 121, + 47, + 103, + 108, + 52, + 88, + 74, + 73, + 63, + 114, + 61, + 113, + 114 + ], + "text": "http://bit.ly/gl4XJI?r=qr" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 323.81948661889146, + "y": 591.8933155188469 + }, + "topLeftCorner": { + "x": 246.74957129957474, + "y": 587.1736948849344 + }, + "bottomRightCorner": { + "x": 320.7843998922592, + "y": 667.0314875242346 + }, + "bottomLeftCorner": { + "x": 246.02277942745917, + "y": 661.3546612254828 + }, + "topRightFinderPattern": { + "x": 312.5, + "y": 602 + }, + "topLeftFinderPattern": { + "x": 257.25, + "y": 598.5 + }, + "bottomLeftFinderPattern": { + "x": 256.5, + "y": 652 + }, + "bottomRightAlignmentPattern": { + "x": 301.75, + "y": 646.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/pepsi-bottle/input.png b/jsQR/tests/end-to-end/pepsi-bottle/input.png new file mode 100644 index 0000000000000000000000000000000000000000..173cae05229fe08cea3e3305f1c72d966dc154d9 Binary files /dev/null and b/jsQR/tests/end-to-end/pepsi-bottle/input.png differ diff --git a/jsQR/tests/end-to-end/pepsi-bottle/output.json b/jsQR/tests/end-to-end/pepsi-bottle/output.json new file mode 100644 index 0000000000000000000000000000000000000000..b0e494658871aa637cf6e7d0739f10f89abce12c --- /dev/null +++ b/jsQR/tests/end-to-end/pepsi-bottle/output.json @@ -0,0 +1,98 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 97, + 112, + 46, + 112, + 101, + 112, + 115, + 105, + 46, + 99, + 111, + 46, + 117, + 107, + 47, + 114, + 53 + ], + "data": "http://wap.pepsi.co.uk/r5", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 97, + 112, + 46, + 112, + 101, + 112, + 115, + 105, + 46, + 99, + 111, + 46, + 117, + 107, + 47, + 114, + 53 + ], + "text": "http://wap.pepsi.co.uk/r5" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 340.69267931944637, + "y": 420.8069618236638 + }, + "topLeftCorner": { + "x": 271.69882293389213, + "y": 419.1666224466976 + }, + "bottomRightCorner": { + "x": 339.7128409020394, + "y": 493.05839505406743 + }, + "bottomLeftCorner": { + "x": 269.8506931021152, + "y": 488.1763016577924 + }, + "topRightFinderPattern": { + "x": 330.5, + "y": 430.5 + }, + "topLeftFinderPattern": { + "x": 280.75, + "y": 429 + }, + "bottomLeftFinderPattern": { + "x": 279.5, + "y": 479 + }, + "bottomRightAlignmentPattern": { + "x": 321.25, + "y": 473 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/report.json b/jsQR/tests/end-to-end/report.json new file mode 100644 index 0000000000000000000000000000000000000000..c8cfddc5879014994ab12e00043d56fbd52650b0 --- /dev/null +++ b/jsQR/tests/end-to-end/report.json @@ -0,0 +1,262 @@ +{ + "counts": { + "failed": 40, + "successful": 214 + }, + "tests": { + "0": true, + "1": true, + "2": true, + "3": true, + "4": true, + "5": false, + "6": true, + "7": true, + "8": true, + "9": true, + "10": true, + "11": true, + "12": true, + "13": true, + "14": true, + "15": true, + "16": true, + "17": true, + "18": true, + "19": true, + "20": true, + "21": true, + "23": true, + "24": true, + "25": true, + "26": true, + "27": true, + "28": true, + "29": true, + "30": true, + "31": true, + "32": true, + "33": true, + "34": true, + "35": true, + "36": true, + "37": true, + "38": true, + "39": true, + "40": true, + "41": true, + "42": true, + "43": true, + "44": true, + "45": true, + "46": true, + "47": true, + "48": true, + "49": true, + "50": true, + "51": true, + "52": true, + "53": true, + "54": true, + "55": true, + "56": true, + "57": true, + "58": true, + "59": true, + "60": true, + "61": true, + "62": true, + "63": true, + "64": true, + "65": true, + "66": false, + "67": true, + "68": true, + "69": true, + "70": true, + "71": false, + "72": false, + "73": true, + "74": true, + "75": true, + "76": false, + "77": false, + "78": false, + "79": true, + "80": false, + "81": false, + "82": true, + "83": true, + "84": true, + "85": false, + "86": false, + "87": false, + "88": false, + "89": true, + "90": true, + "91": true, + "92": true, + "93": true, + "94": true, + "95": true, + "96": true, + "97": true, + "98": true, + "99": true, + "100": true, + "101": true, + "102": true, + "103": true, + "104": true, + "105": true, + "106": true, + "107": true, + "108": true, + "109": true, + "110": true, + "111": true, + "112": true, + "113": true, + "114": true, + "115": true, + "116": true, + "117": true, + "118": true, + "119": true, + "120": true, + "121": true, + "122": true, + "123": true, + "124": true, + "125": true, + "126": true, + "127": true, + "128": true, + "129": true, + "130": true, + "131": true, + "132": true, + "133": true, + "134": true, + "135": true, + "136": true, + "137": true, + "138": true, + "139": true, + "140": true, + "141": false, + "142": true, + "143": true, + "144": true, + "145": true, + "146": true, + "147": true, + "148": true, + "149": true, + "150": false, + "151": true, + "152": true, + "153": true, + "154": true, + "155": true, + "156": true, + "157": true, + "158": true, + "159": true, + "160": true, + "161": true, + "162": true, + "163": true, + "164": true, + "165": true, + "166": true, + "167": true, + "168": true, + "169": true, + "170": true, + "171": false, + "172": true, + "173": true, + "174": true, + "175": true, + "176": true, + "177": true, + "178": true, + "179": true, + "180": true, + "181": true, + "182": true, + "184": true, + "185": true, + "186": true, + "angel-hotel": true, + "battery": true, + "bike-1": true, + "bike-2": true, + "billboard-1": false, + "billboard-2": true, + "bitcoin-tag": false, + "bus-stop-1": true, + "bus-stop-2": true, + "bus-stop-3": true, + "business-card-1": true, + "business-card-2": false, + "business-card-3": true, + "cache-flyer": true, + "cgi": true, + "chevy-ad": true, + "cupake-5": false, + "cupcake-1": true, + "cupcake-2": true, + "cupcake-3": true, + "cupcake-4": true, + "damaged": false, + "emblem-patch": false, + "hk-ikea": true, + "hudson-highlands-state-park": true, + "issue-14-regression": false, + "issue-32-regression": true, + "issue-34-regression": true, + "issue-54-1": false, + "issue-54-2": false, + "issue-59": true, + "issue-59-inverted": true, + "issue-61": true, + "japan-visa": false, + "japanese-jean-ad": false, + "kanji": true, + "key-flyer": false, + "museum-1": true, + "museum-2": false, + "paper-flyer": true, + "pepsi-bottle": true, + "ring": true, + "schiller-denkmal": true, + "school-flyer": false, + "sd-card-1": true, + "sd-card-2": true, + "sheep": false, + "sidewalk": false, + "square-des-fusilles": true, + "starbucks-app": false, + "stickerbook-1": true, + "stickerbook-2": true, + "stickerbook-3": true, + "stickerbook-4": true, + "stickerbook-5": true, + "stickerbook-6": false, + "subway-station": false, + "tattoo-scan": true, + "trackable-book-1": false, + "trackable-book-2": false, + "trackable-book-3": true, + "trackable-book-4": false, + "trackable-book-5": true, + "trackable-book-6": true, + "tree-1": true, + "tree-2": true, + "videogame-frame": false, + "weekend-tirana-2016-agenda": true, + "windows-screenshot": false + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/ring/input.png b/jsQR/tests/end-to-end/ring/input.png new file mode 100644 index 0000000000000000000000000000000000000000..3c62c7f6d0162ff703788932ed9e7e7e420f6c4a Binary files /dev/null and b/jsQR/tests/end-to-end/ring/input.png differ diff --git a/jsQR/tests/end-to-end/ring/output.json b/jsQR/tests/end-to-end/ring/output.json new file mode 100644 index 0000000000000000000000000000000000000000..9c7b07141614075ac250dff99466fac8bf41591b --- /dev/null +++ b/jsQR/tests/end-to-end/ring/output.json @@ -0,0 +1,104 @@ +{ + "binaryData": [ + 81, + 82, + 105, + 110, + 103, + 32, + 111, + 110, + 32, + 119, + 119, + 119, + 46, + 102, + 108, + 117, + 105, + 100, + 45, + 102, + 111, + 114, + 109, + 115, + 46, + 99, + 111, + 109 + ], + "data": "QRing on www.fluid-forms.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 81, + 82, + 105, + 110, + 103, + 32, + 111, + 110, + 32, + 119, + 119, + 119, + 46, + 102, + 108, + 117, + 105, + 100, + 45, + 102, + 111, + 114, + 109, + 115, + 46, + 99, + 111, + 109 + ], + "text": "QRing on www.fluid-forms.com" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 386.94416729016575, + "y": 204.14340871267436 + }, + "topLeftCorner": { + "x": 274.15841104808476, + "y": 369.75759483336157 + }, + "bottomRightCorner": { + "x": 532.7744556174987, + "y": 278.97128611173156 + }, + "bottomLeftCorner": { + "x": 419.596469028325, + "y": 437.57262964930214 + }, + "topRightFinderPattern": { + "x": 391.75, + "y": 238.5 + }, + "topLeftFinderPattern": { + "x": 310.5, + "y": 357 + }, + "bottomLeftFinderPattern": { + "x": 415.25, + "y": 406.5 + }, + "bottomRightAlignmentPattern": { + "x": 465.75, + "y": 302.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/schiller-denkmal/input.png b/jsQR/tests/end-to-end/schiller-denkmal/input.png new file mode 100644 index 0000000000000000000000000000000000000000..6cdb0cda360f28f3323bd2c001c8623a42629d14 Binary files /dev/null and b/jsQR/tests/end-to-end/schiller-denkmal/input.png differ diff --git a/jsQR/tests/end-to-end/schiller-denkmal/output.json b/jsQR/tests/end-to-end/schiller-denkmal/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d750f3cad48efff0d0442409ac5185fc2762e4b4 --- /dev/null +++ b/jsQR/tests/end-to-end/schiller-denkmal/output.json @@ -0,0 +1,124 @@ +{ + "binaryData": [ + 119, + 119, + 119, + 46, + 107, + 117, + 110, + 115, + 116, + 45, + 105, + 110, + 45, + 102, + 102, + 109, + 46, + 100, + 101, + 47, + 109, + 111, + 98, + 105, + 108, + 101, + 47, + 111, + 98, + 106, + 50, + 57, + 56, + 46, + 104, + 116, + 109, + 108 + ], + "data": "www.kunst-in-ffm.de/mobile/obj298.html", + "chunks": [ + { + "type": "byte", + "bytes": [ + 119, + 119, + 119, + 46, + 107, + 117, + 110, + 115, + 116, + 45, + 105, + 110, + 45, + 102, + 102, + 109, + 46, + 100, + 101, + 47, + 109, + 111, + 98, + 105, + 108, + 101, + 47, + 111, + 98, + 106, + 50, + 57, + 56, + 46, + 104, + 116, + 109, + 108 + ], + "text": "www.kunst-in-ffm.de/mobile/obj298.html" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 644.4237011732126, + "y": 249.4851602368938 + }, + "topLeftCorner": { + "x": 523.0074487366696, + "y": 249.40694453540218 + }, + "bottomRightCorner": { + "x": 645.7009809833613, + "y": 354.1628258688348 + }, + "bottomLeftCorner": { + "x": 523.2092318398226, + "y": 354.83386133292913 + }, + "topRightFinderPattern": { + "x": 631.75, + "y": 260.5 + }, + "topLeftFinderPattern": { + "x": 536, + "y": 260.5 + }, + "bottomLeftFinderPattern": { + "x": 536.25, + "y": 343.5 + }, + "bottomRightAlignmentPattern": { + "x": 621.5, + "y": 333.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/school-flyer/input.png b/jsQR/tests/end-to-end/school-flyer/input.png new file mode 100644 index 0000000000000000000000000000000000000000..c181f4b28540bd935ec0975abb86d1b6e5236b58 Binary files /dev/null and b/jsQR/tests/end-to-end/school-flyer/input.png differ diff --git a/jsQR/tests/end-to-end/school-flyer/output.json b/jsQR/tests/end-to-end/school-flyer/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/school-flyer/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/sd-card-1/input.png b/jsQR/tests/end-to-end/sd-card-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..120aa3408b9160daa121c7183c52ab46da638c02 Binary files /dev/null and b/jsQR/tests/end-to-end/sd-card-1/input.png differ diff --git a/jsQR/tests/end-to-end/sd-card-1/output.json b/jsQR/tests/end-to-end/sd-card-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..5a911df2f736f63e4abe64954aae04ed218306c7 --- /dev/null +++ b/jsQR/tests/end-to-end/sd-card-1/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 66, + 71, + 73, + 74, + 51, + 55 + ], + "data": "http://if.gs/1BGIJ37", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 66, + 71, + 73, + 74, + 51, + 55 + ], + "text": "http://if.gs/1BGIJ37" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 311.5866809594223, + "y": 132.7830437169698 + }, + "topLeftCorner": { + "x": 170.97726899178593, + "y": 259.7266323470322 + }, + "bottomRightCorner": { + "x": 436.66978739308655, + "y": 272.2004595020229 + }, + "bottomLeftCorner": { + "x": 298.3921661009707, + "y": 400.1455816382237 + }, + "topRightFinderPattern": { + "x": 309.75, + "y": 170 + }, + "topLeftFinderPattern": { + "x": 208.75, + "y": 261.5 + }, + "bottomLeftFinderPattern": { + "x": 300.25, + "y": 362.5 + }, + "bottomRightAlignmentPattern": { + "x": 368.5, + "y": 269 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/sd-card-2/input.png b/jsQR/tests/end-to-end/sd-card-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..9b0353a41187b4c896ce35b1a5f6ce7025863371 Binary files /dev/null and b/jsQR/tests/end-to-end/sd-card-2/input.png differ diff --git a/jsQR/tests/end-to-end/sd-card-2/output.json b/jsQR/tests/end-to-end/sd-card-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e8999065f5968485935b85cfd390e843e133f195 --- /dev/null +++ b/jsQR/tests/end-to-end/sd-card-2/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 66, + 71, + 73, + 74, + 51, + 55 + ], + "data": "http://if.gs/1BGIJ37", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 66, + 71, + 73, + 74, + 51, + 55 + ], + "text": "http://if.gs/1BGIJ37" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 315.57592932661794, + "y": 194.1362224712729 + }, + "topLeftCorner": { + "x": 218.68331657569664, + "y": 193.3723786268314 + }, + "bottomRightCorner": { + "x": 313.4762000284592, + "y": 277.7255172059416 + }, + "bottomLeftCorner": { + "x": 214.17556930402597, + "y": 277.4789841336773 + }, + "topRightFinderPattern": { + "x": 301.75, + "y": 205.5 + }, + "topLeftFinderPattern": { + "x": 231.75, + "y": 205 + }, + "bottomLeftFinderPattern": { + "x": 228.75, + "y": 265.5 + }, + "bottomRightAlignmentPattern": { + "x": 288.5, + "y": 255.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/sheep/input.png b/jsQR/tests/end-to-end/sheep/input.png new file mode 100644 index 0000000000000000000000000000000000000000..90e707497a296ee486654b3a83365e350d85c82f Binary files /dev/null and b/jsQR/tests/end-to-end/sheep/input.png differ diff --git a/jsQR/tests/end-to-end/sheep/output.json b/jsQR/tests/end-to-end/sheep/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/sheep/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/sidewalk/input.png b/jsQR/tests/end-to-end/sidewalk/input.png new file mode 100644 index 0000000000000000000000000000000000000000..8532bc4f69f2dd9582fc425a9d8f6140dbdb7ac0 Binary files /dev/null and b/jsQR/tests/end-to-end/sidewalk/input.png differ diff --git a/jsQR/tests/end-to-end/sidewalk/output.json b/jsQR/tests/end-to-end/sidewalk/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/sidewalk/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/square-des-fusilles/input.png b/jsQR/tests/end-to-end/square-des-fusilles/input.png new file mode 100644 index 0000000000000000000000000000000000000000..e52c6b3d2aa8c4de1f74330b16d3b70c73e17aeb Binary files /dev/null and b/jsQR/tests/end-to-end/square-des-fusilles/input.png differ diff --git a/jsQR/tests/end-to-end/square-des-fusilles/output.json b/jsQR/tests/end-to-end/square-des-fusilles/output.json new file mode 100644 index 0000000000000000000000000000000000000000..c01e84d51cdc7189562dae966612eb92e601b78f --- /dev/null +++ b/jsQR/tests/end-to-end/square-des-fusilles/output.json @@ -0,0 +1,84 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 108, + 45, + 51, + 56, + 46, + 102, + 114, + 47, + 108, + 53 + ], + "data": "http://gl-38.fr/l5", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 103, + 108, + 45, + 51, + 56, + 46, + 102, + 114, + 47, + 108, + 53 + ], + "text": "http://gl-38.fr/l5" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 649.5757939640441, + "y": 255.8753434403206 + }, + "topLeftCorner": { + "x": 535.153845561457, + "y": 256.8254645625965 + }, + "bottomRightCorner": { + "x": 650.9501719960692, + "y": 371.36767915856666 + }, + "bottomLeftCorner": { + "x": 535.3391881098588, + "y": 370.4591730205064 + }, + "topRightFinderPattern": { + "x": 633.5, + "y": 272 + }, + "topLeftFinderPattern": { + "x": 551, + "y": 272.5 + }, + "bottomLeftFinderPattern": { + "x": 551.25, + "y": 354.5 + }, + "bottomRightAlignmentPattern": { + "x": 620.25, + "y": 341 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/starbucks-app/input.png b/jsQR/tests/end-to-end/starbucks-app/input.png new file mode 100644 index 0000000000000000000000000000000000000000..52b8a32decee1df197f535c4c39bcf941de379f3 Binary files /dev/null and b/jsQR/tests/end-to-end/starbucks-app/input.png differ diff --git a/jsQR/tests/end-to-end/starbucks-app/output.json b/jsQR/tests/end-to-end/starbucks-app/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/starbucks-app/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/stickerbook-1/input.png b/jsQR/tests/end-to-end/stickerbook-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..a53b3c6dcc0479692112ce3a1c0664a8dd0d60b5 Binary files /dev/null and b/jsQR/tests/end-to-end/stickerbook-1/input.png differ diff --git a/jsQR/tests/end-to-end/stickerbook-1/output.json b/jsQR/tests/end-to-end/stickerbook-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4f80798ff89de0e53373ae85f95104f0f21ed1e2 --- /dev/null +++ b/jsQR/tests/end-to-end/stickerbook-1/output.json @@ -0,0 +1,120 @@ +{ + "binaryData": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "data": "Dan Burzynski <contax@phrenetic.org>", + "chunks": [ + { + "type": "byte", + "bytes": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "text": "Dan Burzynski <contax@phrenetic.org>" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 416.24426498626394, + "y": 285.2201112282005 + }, + "topLeftCorner": { + "x": 358.48866576321296, + "y": 302.8594616237526 + }, + "bottomRightCorner": { + "x": 445.7674954310082, + "y": 338.07723499847697 + }, + "bottomLeftCorner": { + "x": 385.9171834973709, + "y": 357.0821086692733 + }, + "topRightFinderPattern": { + "x": 412.75, + "y": 293.5 + }, + "topLeftFinderPattern": { + "x": 368.75, + "y": 307 + }, + "bottomLeftFinderPattern": { + "x": 389.75, + "y": 348 + }, + "bottomRightAlignmentPattern": { + "x": 425.75, + "y": 330 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/stickerbook-2/input.png b/jsQR/tests/end-to-end/stickerbook-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3179e99fc9691935221f27efd3b6c05a8af1f0 Binary files /dev/null and b/jsQR/tests/end-to-end/stickerbook-2/input.png differ diff --git a/jsQR/tests/end-to-end/stickerbook-2/output.json b/jsQR/tests/end-to-end/stickerbook-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..a59c676f32f1c7026efdd93481bc76ed85144767 --- /dev/null +++ b/jsQR/tests/end-to-end/stickerbook-2/output.json @@ -0,0 +1,120 @@ +{ + "binaryData": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "data": "Dan Burzynski <contax@phrenetic.org>", + "chunks": [ + { + "type": "byte", + "bytes": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "text": "Dan Burzynski <contax@phrenetic.org>" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 331.6088797843783, + "y": 315.0528257057499 + }, + "topLeftCorner": { + "x": 268.527968350622, + "y": 335.3202249502425 + }, + "bottomRightCorner": { + "x": 358.74776885015444, + "y": 370.49065565345006 + }, + "bottomLeftCorner": { + "x": 294.03264401521665, + "y": 392.1829938635026 + }, + "topRightFinderPattern": { + "x": 327.25, + "y": 324 + }, + "topLeftFinderPattern": { + "x": 279.25, + "y": 339.5 + }, + "bottomLeftFinderPattern": { + "x": 298.75, + "y": 382.5 + }, + "bottomRightAlignmentPattern": { + "x": 338.25, + "y": 362.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/stickerbook-3/input.png b/jsQR/tests/end-to-end/stickerbook-3/input.png new file mode 100644 index 0000000000000000000000000000000000000000..0ef9c0e41af0348d88853b281cf0d010d5a9aee2 Binary files /dev/null and b/jsQR/tests/end-to-end/stickerbook-3/input.png differ diff --git a/jsQR/tests/end-to-end/stickerbook-3/output.json b/jsQR/tests/end-to-end/stickerbook-3/output.json new file mode 100644 index 0000000000000000000000000000000000000000..4424e02888f10b14b1df1904f7aa13daa0df932f --- /dev/null +++ b/jsQR/tests/end-to-end/stickerbook-3/output.json @@ -0,0 +1,120 @@ +{ + "binaryData": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "data": "Dan Burzynski <contax@phrenetic.org>", + "chunks": [ + { + "type": "byte", + "bytes": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "text": "Dan Burzynski <contax@phrenetic.org>" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 247.84366613802706, + "y": 343.779348888827 + }, + "topLeftCorner": { + "x": 182.0178693212373, + "y": 363.95030923730303 + }, + "bottomRightCorner": { + "x": 272.09504668961887, + "y": 403.047637286558 + }, + "bottomLeftCorner": { + "x": 202.6674979292043, + "y": 425.55810593837475 + }, + "topRightFinderPattern": { + "x": 242.75, + "y": 353 + }, + "topLeftFinderPattern": { + "x": 192.5, + "y": 368.5 + }, + "bottomLeftFinderPattern": { + "x": 208.5, + "y": 415 + }, + "bottomRightAlignmentPattern": { + "x": 251.25, + "y": 394 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/stickerbook-4/input.png b/jsQR/tests/end-to-end/stickerbook-4/input.png new file mode 100644 index 0000000000000000000000000000000000000000..84031bcef31bdc52469981bc6bbb6d89cd28ab7d Binary files /dev/null and b/jsQR/tests/end-to-end/stickerbook-4/input.png differ diff --git a/jsQR/tests/end-to-end/stickerbook-4/output.json b/jsQR/tests/end-to-end/stickerbook-4/output.json new file mode 100644 index 0000000000000000000000000000000000000000..105ba2721f11314914b1692527905ea1d448c7e3 --- /dev/null +++ b/jsQR/tests/end-to-end/stickerbook-4/output.json @@ -0,0 +1,120 @@ +{ + "binaryData": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "data": "Dan Burzynski <contax@phrenetic.org>", + "chunks": [ + { + "type": "byte", + "bytes": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "text": "Dan Burzynski <contax@phrenetic.org>" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 383.6563265349775, + "y": 226.96758392778838 + }, + "topLeftCorner": { + "x": 328.47531312499297, + "y": 241.14519390844794 + }, + "bottomRightCorner": { + "x": 409.7901004545709, + "y": 273.21299736236597 + }, + "bottomLeftCorner": { + "x": 352.9796869307698, + "y": 290.3000011751848 + }, + "topRightFinderPattern": { + "x": 380.25, + "y": 234 + }, + "topLeftFinderPattern": { + "x": 338.25, + "y": 245 + }, + "bottomLeftFinderPattern": { + "x": 357, + "y": 282 + }, + "bottomRightAlignmentPattern": { + "x": 391.5, + "y": 266 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/stickerbook-5/input.png b/jsQR/tests/end-to-end/stickerbook-5/input.png new file mode 100644 index 0000000000000000000000000000000000000000..bed3c751dee89a4e662e56f0b66bd89a0906ddc8 Binary files /dev/null and b/jsQR/tests/end-to-end/stickerbook-5/input.png differ diff --git a/jsQR/tests/end-to-end/stickerbook-5/output.json b/jsQR/tests/end-to-end/stickerbook-5/output.json new file mode 100644 index 0000000000000000000000000000000000000000..53ca90964739f27cc100eb50111ad532f6a542f8 --- /dev/null +++ b/jsQR/tests/end-to-end/stickerbook-5/output.json @@ -0,0 +1,120 @@ +{ + "binaryData": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "data": "Dan Burzynski <contax@phrenetic.org>", + "chunks": [ + { + "type": "byte", + "bytes": [ + 68, + 97, + 110, + 32, + 66, + 117, + 114, + 122, + 121, + 110, + 115, + 107, + 105, + 32, + 60, + 99, + 111, + 110, + 116, + 97, + 120, + 64, + 112, + 104, + 114, + 101, + 110, + 101, + 116, + 105, + 99, + 46, + 111, + 114, + 103, + 62 + ], + "text": "Dan Burzynski <contax@phrenetic.org>" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 304.36257876643856, + "y": 248.0402071629893 + }, + "topLeftCorner": { + "x": 245.37375626542982, + "y": 265.09626982192543 + }, + "bottomRightCorner": { + "x": 328.6204485328826, + "y": 298.85529710089247 + }, + "bottomLeftCorner": { + "x": 266.78668695282965, + "y": 316.5997290685214 + }, + "topRightFinderPattern": { + "x": 300, + "y": 256 + }, + "topLeftFinderPattern": { + "x": 255, + "y": 269 + }, + "bottomLeftFinderPattern": { + "x": 271.5, + "y": 308 + }, + "bottomRightAlignmentPattern": { + "x": 309.25, + "y": 291 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/stickerbook-6/input.png b/jsQR/tests/end-to-end/stickerbook-6/input.png new file mode 100644 index 0000000000000000000000000000000000000000..52455f7efe9c3dc1963fab4abeb022a21ec1a0d9 Binary files /dev/null and b/jsQR/tests/end-to-end/stickerbook-6/input.png differ diff --git a/jsQR/tests/end-to-end/stickerbook-6/output.json b/jsQR/tests/end-to-end/stickerbook-6/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/stickerbook-6/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/subway-station/input.png b/jsQR/tests/end-to-end/subway-station/input.png new file mode 100644 index 0000000000000000000000000000000000000000..3f7cc1f7e8682c44d95ff8f8f9f6d2748c0f12ee Binary files /dev/null and b/jsQR/tests/end-to-end/subway-station/input.png differ diff --git a/jsQR/tests/end-to-end/subway-station/output.json b/jsQR/tests/end-to-end/subway-station/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/subway-station/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/tattoo-scan/input.png b/jsQR/tests/end-to-end/tattoo-scan/input.png new file mode 100644 index 0000000000000000000000000000000000000000..094df612bbae659e3cce2eb36662adbc8091d790 Binary files /dev/null and b/jsQR/tests/end-to-end/tattoo-scan/input.png differ diff --git a/jsQR/tests/end-to-end/tattoo-scan/output.json b/jsQR/tests/end-to-end/tattoo-scan/output.json new file mode 100644 index 0000000000000000000000000000000000000000..40439cc9dddd986e70962965d5415fdc9e6e42c2 --- /dev/null +++ b/jsQR/tests/end-to-end/tattoo-scan/output.json @@ -0,0 +1,98 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 98, + 97, + 114, + 99, + 111, + 100, + 101, + 97, + 114, + 116, + 46, + 99, + 111, + 109 + ], + "data": "http://www.barcodeart.com", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 119, + 119, + 119, + 46, + 98, + 97, + 114, + 99, + 111, + 100, + 101, + 97, + 114, + 116, + 46, + 99, + 111, + 109 + ], + "text": "http://www.barcodeart.com" + } + ], + "version": 3, + "location": { + "topRightCorner": { + "x": 211.25780501584336, + "y": 81.18094618162168 + }, + "topLeftCorner": { + "x": 123.14665320052936, + "y": 89.05401546284043 + }, + "bottomRightCorner": { + "x": 218.7240706781086, + "y": 168.5744268041864 + }, + "bottomLeftCorner": { + "x": 128.8674257801371, + "y": 176.753786095041 + }, + "topRightFinderPattern": { + "x": 201.5, + "y": 92.5 + }, + "topLeftFinderPattern": { + "x": 134.5, + "y": 98.5 + }, + "bottomLeftFinderPattern": { + "x": 139, + "y": 165 + }, + "bottomRightAlignmentPattern": { + "x": 197, + "y": 150.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/trackable-book-1/input.png b/jsQR/tests/end-to-end/trackable-book-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..dd85709eeddde4a5d568c47441b639027c338a82 Binary files /dev/null and b/jsQR/tests/end-to-end/trackable-book-1/input.png differ diff --git a/jsQR/tests/end-to-end/trackable-book-1/output.json b/jsQR/tests/end-to-end/trackable-book-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/trackable-book-1/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/trackable-book-2/input.png b/jsQR/tests/end-to-end/trackable-book-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..305e436058afc760943da13dd95052f19ab82a1d Binary files /dev/null and b/jsQR/tests/end-to-end/trackable-book-2/input.png differ diff --git a/jsQR/tests/end-to-end/trackable-book-2/output.json b/jsQR/tests/end-to-end/trackable-book-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/trackable-book-2/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/trackable-book-3/input.png b/jsQR/tests/end-to-end/trackable-book-3/input.png new file mode 100644 index 0000000000000000000000000000000000000000..076d08b0b74260a693e140efeef8bc6b0a5f9125 Binary files /dev/null and b/jsQR/tests/end-to-end/trackable-book-3/input.png differ diff --git a/jsQR/tests/end-to-end/trackable-book-3/output.json b/jsQR/tests/end-to-end/trackable-book-3/output.json new file mode 100644 index 0000000000000000000000000000000000000000..85a2c3739c5a5a38e29d067af8df09cee27c836f --- /dev/null +++ b/jsQR/tests/end-to-end/trackable-book-3/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 80, + 71, + 50, + 82, + 57, + 67 + ], + "data": "http://if.gs/1PG2R9C", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 49, + 80, + 71, + 50, + 82, + 57, + 67 + ], + "text": "http://if.gs/1PG2R9C" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 209.87668320340188, + "y": 234.04110559886607 + }, + "topLeftCorner": { + "x": 137.94136574901682, + "y": 204.9120486235252 + }, + "bottomRightCorner": { + "x": 196.40407717510013, + "y": 292.6061157626502 + }, + "bottomLeftCorner": { + "x": 122.36296840558416, + "y": 263.21234386480535 + }, + "topRightFinderPattern": { + "x": 198, + "y": 238 + }, + "topLeftFinderPattern": { + "x": 146, + "y": 217 + }, + "bottomLeftFinderPattern": { + "x": 135, + "y": 259 + }, + "bottomRightAlignmentPattern": { + "x": 181, + "y": 269.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/trackable-book-4/input.png b/jsQR/tests/end-to-end/trackable-book-4/input.png new file mode 100644 index 0000000000000000000000000000000000000000..fde1f1b3a3df47648ed8bee4dd1ea25e6d17902d Binary files /dev/null and b/jsQR/tests/end-to-end/trackable-book-4/input.png differ diff --git a/jsQR/tests/end-to-end/trackable-book-4/output.json b/jsQR/tests/end-to-end/trackable-book-4/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/trackable-book-4/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/trackable-book-5/input.png b/jsQR/tests/end-to-end/trackable-book-5/input.png new file mode 100644 index 0000000000000000000000000000000000000000..24b640321ecc9c4a3563afec7c5491d9fd486ce1 Binary files /dev/null and b/jsQR/tests/end-to-end/trackable-book-5/input.png differ diff --git a/jsQR/tests/end-to-end/trackable-book-5/output.json b/jsQR/tests/end-to-end/trackable-book-5/output.json new file mode 100644 index 0000000000000000000000000000000000000000..e528fd3580d101f8258dcf658777fc32c578fca6 --- /dev/null +++ b/jsQR/tests/end-to-end/trackable-book-5/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 50, + 87, + 85, + 52, + 53, + 81, + 55 + ], + "data": "http://if.gs/2WU45Q7", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 50, + 87, + 85, + 52, + 53, + 81, + 55 + ], + "text": "http://if.gs/2WU45Q7" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 321.2562628052142, + "y": 391.53557101297815 + }, + "topLeftCorner": { + "x": 250.08965257132715, + "y": 364.30421085326356 + }, + "bottomRightCorner": { + "x": 313.8566949793214, + "y": 455.16182683328145 + }, + "bottomLeftCorner": { + "x": 239.9644856745366, + "y": 429.05485276559847 + }, + "topRightFinderPattern": { + "x": 310.5, + "y": 396.5 + }, + "topLeftFinderPattern": { + "x": 259, + "y": 377 + }, + "bottomLeftFinderPattern": { + "x": 252, + "y": 423.5 + }, + "bottomRightAlignmentPattern": { + "x": 297.25, + "y": 431.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/trackable-book-6/input.png b/jsQR/tests/end-to-end/trackable-book-6/input.png new file mode 100644 index 0000000000000000000000000000000000000000..f804119b9439938581a5ccf02ac56d55a3f17cbe Binary files /dev/null and b/jsQR/tests/end-to-end/trackable-book-6/input.png differ diff --git a/jsQR/tests/end-to-end/trackable-book-6/output.json b/jsQR/tests/end-to-end/trackable-book-6/output.json new file mode 100644 index 0000000000000000000000000000000000000000..cef7855fb5682c4804470fcf4370514195b8394b --- /dev/null +++ b/jsQR/tests/end-to-end/trackable-book-6/output.json @@ -0,0 +1,88 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 51, + 88, + 65, + 74, + 75, + 86, + 71 + ], + "data": "http://if.gs/3XAJKVG", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 105, + 102, + 46, + 103, + 115, + 47, + 51, + 88, + 65, + 74, + 75, + 86, + 71 + ], + "text": "http://if.gs/3XAJKVG" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 184.7894885295224, + "y": 337.1573019177347 + }, + "topLeftCorner": { + "x": 108.49671591763747, + "y": 307.81171864924045 + }, + "bottomRightCorner": { + "x": 170.99291555442258, + "y": 401.97265943533 + }, + "bottomLeftCorner": { + "x": 91.32750582137366, + "y": 373.98618729715383 + }, + "topRightFinderPattern": { + "x": 172.5, + "y": 342 + }, + "topLeftFinderPattern": { + "x": 117.25, + "y": 321 + }, + "bottomLeftFinderPattern": { + "x": 105.25, + "y": 368.5 + }, + "bottomRightAlignmentPattern": { + "x": 154.75, + "y": 377.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/tree-1/input.png b/jsQR/tests/end-to-end/tree-1/input.png new file mode 100644 index 0000000000000000000000000000000000000000..9eb03a428b1dfbe1f49f32bedefcbd006e31fbc5 Binary files /dev/null and b/jsQR/tests/end-to-end/tree-1/input.png differ diff --git a/jsQR/tests/end-to-end/tree-1/output.json b/jsQR/tests/end-to-end/tree-1/output.json new file mode 100644 index 0000000000000000000000000000000000000000..d9b1d779f749382a29b230448998aa1c5bfac751 --- /dev/null +++ b/jsQR/tests/end-to-end/tree-1/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 110, + 108, + 46, + 113, + 114, + 119, + 112, + 46, + 111, + 114, + 103, + 47, + 86, + 108, + 101, + 99, + 104, + 116, + 104, + 101, + 103, + 37, + 48, + 65 + ], + "data": "http://nl.qrwp.org/Vlechtheg%0A", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 110, + 108, + 46, + 113, + 114, + 119, + 112, + 46, + 111, + 114, + 103, + 47, + 86, + 108, + 101, + 99, + 104, + 116, + 104, + 101, + 103, + 37, + 48, + 65 + ], + "text": "http://nl.qrwp.org/Vlechtheg%0A" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 362.87361274630825, + "y": 379.11333599952656 + }, + "topLeftCorner": { + "x": 274.38374113507894, + "y": 372.8076658116977 + }, + "bottomRightCorner": { + "x": 357.2912434169693, + "y": 466.9639246845982 + }, + "bottomLeftCorner": { + "x": 268.42830568688674, + "y": 461.0585288893188 + }, + "topRightFinderPattern": { + "x": 349.75, + "y": 390.5 + }, + "topLeftFinderPattern": { + "x": 286, + "y": 386 + }, + "bottomLeftFinderPattern": { + "x": 281.75, + "y": 449.5 + }, + "bottomRightAlignmentPattern": { + "x": 335.75, + "y": 442.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/tree-2/input.png b/jsQR/tests/end-to-end/tree-2/input.png new file mode 100644 index 0000000000000000000000000000000000000000..753b13bed0ba851b3b3d3628aa896fe5a9fe9c14 Binary files /dev/null and b/jsQR/tests/end-to-end/tree-2/input.png differ diff --git a/jsQR/tests/end-to-end/tree-2/output.json b/jsQR/tests/end-to-end/tree-2/output.json new file mode 100644 index 0000000000000000000000000000000000000000..9224143e295901a1af81478c7b7aa308371ce2ef --- /dev/null +++ b/jsQR/tests/end-to-end/tree-2/output.json @@ -0,0 +1,110 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 110, + 108, + 46, + 113, + 114, + 119, + 112, + 46, + 111, + 114, + 103, + 47, + 86, + 108, + 101, + 99, + 104, + 116, + 104, + 101, + 103, + 37, + 48, + 65 + ], + "data": "http://nl.qrwp.org/Vlechtheg%0A", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 58, + 47, + 47, + 110, + 108, + 46, + 113, + 114, + 119, + 112, + 46, + 111, + 114, + 103, + 47, + 86, + 108, + 101, + 99, + 104, + 116, + 104, + 101, + 103, + 37, + 48, + 65 + ], + "text": "http://nl.qrwp.org/Vlechtheg%0A" + } + ], + "version": 2, + "location": { + "topRightCorner": { + "x": 378.6836091350098, + "y": 199.78126758286837 + }, + "topLeftCorner": { + "x": 372.14188156468265, + "y": 288.92215685926027 + }, + "bottomRightCorner": { + "x": 465.8547737452526, + "y": 206.819711497522 + }, + "bottomLeftCorner": { + "x": 461.3224989613329, + "y": 294.2257130986662 + }, + "topRightFinderPattern": { + "x": 390.25, + "y": 213 + }, + "topLeftFinderPattern": { + "x": 385.75, + "y": 277 + }, + "bottomLeftFinderPattern": { + "x": 449.75, + "y": 281 + }, + "bottomRightAlignmentPattern": { + "x": 442.25, + "y": 227.5 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/videogame-frame/input.png b/jsQR/tests/end-to-end/videogame-frame/input.png new file mode 100644 index 0000000000000000000000000000000000000000..2d66a86896042b50cf9ece36bd50afc855b3b13b Binary files /dev/null and b/jsQR/tests/end-to-end/videogame-frame/input.png differ diff --git a/jsQR/tests/end-to-end/videogame-frame/output.json b/jsQR/tests/end-to-end/videogame-frame/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/videogame-frame/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/end-to-end/weekend-tirana-2016-agenda/input.png b/jsQR/tests/end-to-end/weekend-tirana-2016-agenda/input.png new file mode 100644 index 0000000000000000000000000000000000000000..c60a23c8e4149c983ac63da9b9a5f866d75a3870 Binary files /dev/null and b/jsQR/tests/end-to-end/weekend-tirana-2016-agenda/input.png differ diff --git a/jsQR/tests/end-to-end/weekend-tirana-2016-agenda/output.json b/jsQR/tests/end-to-end/weekend-tirana-2016-agenda/output.json new file mode 100644 index 0000000000000000000000000000000000000000..34245fa0080ca21a8e2df49db1d7fea1bd05c4c5 --- /dev/null +++ b/jsQR/tests/end-to-end/weekend-tirana-2016-agenda/output.json @@ -0,0 +1,198 @@ +{ + "binaryData": [ + 104, + 116, + 116, + 112, + 115, + 58, + 47, + 47, + 115, + 113, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 87, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 58, + 87, + 105, + 107, + 105, + 95, + 87, + 101, + 101, + 107, + 101, + 110, + 100, + 95, + 84, + 105, + 114, + 97, + 110, + 97, + 95, + 50, + 48, + 49, + 54, + 47, + 80, + 114, + 111, + 103, + 114, + 97, + 109, + 105 + ], + "data": "https://sq.wikipedia.org/wiki/Wikipedia:Wiki_Weekend_Tirana_2016/Programi", + "chunks": [ + { + "type": "byte", + "bytes": [ + 104, + 116, + 116, + 112, + 115, + 58, + 47, + 47, + 115, + 113, + 46, + 119, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 46, + 111, + 114, + 103, + 47, + 119, + 105, + 107, + 105, + 47, + 87, + 105, + 107, + 105, + 112, + 101, + 100, + 105, + 97, + 58, + 87, + 105, + 107, + 105, + 95, + 87, + 101, + 101, + 107, + 101, + 110, + 100, + 95, + 84, + 105, + 114, + 97, + 110, + 97, + 95 + ], + "text": "https://sq.wikipedia.org/wiki/Wikipedia:Wiki_Weekend_Tirana_" + }, + { + "type": "alphanumeric", + "text": "2016/P" + }, + { + "type": "byte", + "bytes": [ + 114, + 111, + 103, + 114, + 97, + 109, + 105 + ], + "text": "rogrami" + } + ], + "version": 4, + "location": { + "topRightCorner": { + "x": 497.4647015159505, + "y": 188.1676042326725 + }, + "topLeftCorner": { + "x": 335.4166988920438, + "y": 186.4860556019044 + }, + "bottomRightCorner": { + "x": 500.24616930683646, + "y": 360.8862694601366 + }, + "bottomLeftCorner": { + "x": 343.04568204436146, + "y": 385.7985303876691 + }, + "topRightFinderPattern": { + "x": 482.75, + "y": 207 + }, + "topLeftFinderPattern": { + "x": 355.75, + "y": 208 + }, + "bottomLeftFinderPattern": { + "x": 361.25, + "y": 362.5 + }, + "bottomRightAlignmentPattern": { + "x": 472, + "y": 331 + } + } +} \ No newline at end of file diff --git a/jsQR/tests/end-to-end/windows-screenshot/input.png b/jsQR/tests/end-to-end/windows-screenshot/input.png new file mode 100644 index 0000000000000000000000000000000000000000..44478eb033069d3e9b36d8e229fea5e0da4a8733 Binary files /dev/null and b/jsQR/tests/end-to-end/windows-screenshot/input.png differ diff --git a/jsQR/tests/end-to-end/windows-screenshot/output.json b/jsQR/tests/end-to-end/windows-screenshot/output.json new file mode 100644 index 0000000000000000000000000000000000000000..ec747fa47ddb81e9bf2d282011ed32aa4c59f932 --- /dev/null +++ b/jsQR/tests/end-to-end/windows-screenshot/output.json @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/jsQR/tests/generate-test-data.ts b/jsQR/tests/generate-test-data.ts new file mode 100644 index 0000000000000000000000000000000000000000..cc459aa63b9e6e08a102d7c4954008e6654894c0 --- /dev/null +++ b/jsQR/tests/generate-test-data.ts @@ -0,0 +1,28 @@ +import * as fs from "fs-extra"; +import * as path from "path"; +import jsQR from "../src"; + +import * as helpers from "./helpers"; + +const report = { + counts: { + failed: 0, + successful: 0, + }, + tests: {}, +}; + +(async () => { + const tests = (await fs.readdir(path.join("tests", "end-to-end"))).filter((n) => !n.includes(".")); + + for (const t of tests) { + const imageData = await helpers.loadPng(path.join("tests", "end-to-end", t, "input.png")); + const output = jsQR(imageData.data, imageData.width, imageData.height); + + await fs.writeFile(path.join("tests", "end-to-end", t, "output.json"), JSON.stringify(output, null, 2), "utf8"); + report.tests[t] = !!output; + report.counts[!!output ? "successful" : "failed"]++; + } + + await fs.writeFile(path.join("tests", "end-to-end", "report.json"), JSON.stringify(report, null, 2)); +})().then(() => process.exit(0)).catch((e) => { throw e; }); diff --git a/jsQR/tests/helpers.ts b/jsQR/tests/helpers.ts new file mode 100644 index 0000000000000000000000000000000000000000..f524940058373abf9cefd747384e122a6ead9026 --- /dev/null +++ b/jsQR/tests/helpers.ts @@ -0,0 +1,44 @@ +import * as fs from "fs-extra"; +import * as png from "upng-js"; + +import { BitMatrix } from "../src/BitMatrix"; + +export function bitMatrixToPng(matrix: BitMatrix) { + const output = new Uint8ClampedArray(matrix.width * matrix.height * 4); + for (let y = 0; y < matrix.height; y++) { + for (let x = 0; x < matrix.width; x++) { + const v = matrix.get(x, y); + const i = (y * matrix.width + x) * 4; + output[i + 0] = v ? 0x00 : 0xff; + output[i + 1] = v ? 0x00 : 0xff; + output[i + 2] = v ? 0x00 : 0xff; + output[i + 3] = 0xff; + } + } + return new Buffer(png.encode(output, matrix.width, matrix.height, 0)); +} + +export async function loadPng(path) { + const data = png.decode(await fs.readFile(path)); + const out: { + data: Uint8ClampedArray, + height: number, + width: number, + } = { + data: png.toRGBA8(data), + height: data.height, + width: data.width, + }; + return out; +} + +export async function loadBinarized(path) { + const image = await loadPng(path); + const out = BitMatrix.createEmpty(image.width, image.height); + for (let x = 0; x < image.width; x++) { + for (let y = 0; y < image.height; y++) { + out.set(x, y, image.data[(y * image.width + x) * 4] === 0x00); + } + } + return out; +} diff --git a/jsQR/tests/tsconfig.json b/jsQR/tests/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..1dc786450d0f782f8942f7994e21d455e72ec435 --- /dev/null +++ b/jsQR/tests/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": ["es2017"], + "target": "es6", + "typeRoots": [ + "../node_modules/@types", + "../src/common", + "./types" + ] + }, + "files": [ + "./generate-test-data.ts" + ] +} diff --git a/jsQR/tests/types/upng-js/index.d.ts b/jsQR/tests/types/upng-js/index.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..fecb6e15936330f89c1c55a67abf13e3f6a06a89 --- /dev/null +++ b/jsQR/tests/types/upng-js/index.d.ts @@ -0,0 +1,14 @@ +declare module "upng-js" { + export interface DecodedPng { + height: number; + width: number; + data: Uint8ClampedArray; + depth: number, + tabs: any[], + ctype: string, + } + + export function decode(data: Buffer): DecodedPng; + export function encode(data: Uint8ClampedArray, width: number, height: number, cnum: number): ArrayBuffer; + export function toRGBA8(data: DecodedPng): Uint8ClampedArray; +} diff --git a/jsQR/tsconfig.json b/jsQR/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..9ffcf44e7f156b0760ceb0270ac94a423f15564a --- /dev/null +++ b/jsQR/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "module": "commonjs", + "noImplicitAny": true, + "target": "es5", + "typeRoots": [], + "declaration": true, + "outDir": "./dist", + "newLine": "LF" + }, + "files": [ + "./src/index.ts" + ] +} diff --git a/jsQR/tslint.json b/jsQR/tslint.json new file mode 100644 index 0000000000000000000000000000000000000000..a9423b627e227687f5911d6b56ffa9c1ccf67b76 --- /dev/null +++ b/jsQR/tslint.json @@ -0,0 +1,14 @@ +{ + "defaultSeverity": "error", + "extends": [ + "tslint:recommended" + ], + "jsRules": {}, + "rules": { + "arrow-parens": false, + "max-line-length": [true, 140], + "interface-name": false, + "object-literal-sort-keys": false + }, + "rulesDirectory": [] +} diff --git a/jsQR/webpack.config.js b/jsQR/webpack.config.js new file mode 100644 index 0000000000000000000000000000000000000000..03d077d2d485233479ed3777013dc6ddb5da7d11 --- /dev/null +++ b/jsQR/webpack.config.js @@ -0,0 +1,20 @@ +module.exports = { + entry: { + './dist/jsQR.js': './src/index.ts', + './docs/jsQR.js': './src/index.ts', + }, + output: { + filename: '[name]', + libraryTarget: 'umd', + libraryExport: "default", + library: "jsQR", + }, + resolve: { + extensions: [".ts"] + }, + module: { + rules: [ + { test: /\.ts$/, use: [{ loader: "awesome-typescript-loader" }] } + ] + } +} diff --git a/jsQR/yarn.lock b/jsQR/yarn.lock new file mode 100644 index 0000000000000000000000000000000000000000..759501c27ed57669e1ce7b9c30e41d56823f237d --- /dev/null +++ b/jsQR/yarn.lock @@ -0,0 +1,5627 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@types/fs-extra@^4.0.2": + version "4.0.15" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.15.tgz#82d70b4a2e5e3dd17474ce9e8fe951a03aeddd31" + integrity sha512-zU/EU2kZ1tv+p4pswQLntA7dFQq84wXrSCfmLjZvMbLjf4N46cPOWHg+WKfc27YnEOQ0chVFlBui55HRsvzHPA== + dependencies: + "@types/node" "*" + +"@types/jest@^20.0.8": + version "20.0.8" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-20.0.8.tgz#7f8c97f73d20d3bf5448fbe33661a342002b5954" + integrity sha512-+vFMPCwOffrTy685X9Kj+Iz83I56Q8j0JK6xvsm6TA5qxbtPUJZcXtJY05WMGlhCKp/9qbpRCwyOp6GkMuyuLg== + +"@types/node@*": + version "22.13.10" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4" + integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== + dependencies: + undici-types "~6.20.0" + +"@types/node@^8.0.27": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +abab@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha512-GKp5tQ8h0KMPWIYGRHHXI1s5tUpZixZ3IHF2jAu42wSCf6In/G873s6/y4DdKdhWvzhu1T6mE1JgvnhAKqyYYQ== + dependencies: + acorn "^4.0.3" + +acorn-globals@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== + dependencies: + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug== + +acorn@^5.0.0, acorn@^5.5.3: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + +acorn@^6.0.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +ajv-keywords@^3.1.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.12.3: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + 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" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg== + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-transform@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + integrity sha512-Yisb7ew0ZEyDtRYQ+b+26o9KbiYPFxwcsxKzbssigzRRMJ9LpExPVUg6Fos7eP7yP3q7///tzze4nm4lTptPBw== + dependencies: + default-require-extensions "^1.0.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA== + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-equal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.2.tgz#a8572e64e822358271250b9156d20d96ef5dec04" + integrity sha512-gUHx76KtnhEgB3HOuFYiCm3FIdEs6ocM2asHvNTkfu/Y09qQVrrVVaOKENmS2KkSaGoxgXNqC+ZVtR/n0MOkSA== + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +asn1.js@^4.10.1: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assert@^1.1.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.1.tgz#038ab248e4ff078e7bc2485ba6e6388466c78f76" + integrity sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A== + dependencies: + object.assign "^4.1.4" + util "^0.10.4" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" + integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.1.2, async@^2.1.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +awesome-typescript-loader@^3.2.3: + version "3.5.0" + resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-3.5.0.tgz#4d4d10cba7a04ed433dfa0334250846fb11a1a5a" + integrity sha512-qzgm9SEvodVkSi9QY7Me1/rujg+YBNMjayNSAyzNghwTEez++gXoPCwMvpbHRG7wrOkDCiF6dquvv9ESmUBAuw== + dependencies: + chalk "^2.3.1" + enhanced-resolve "3.3.0" + loader-utils "^1.1.0" + lodash "^4.17.4" + micromatch "^3.0.3" + mkdirp "^0.5.1" + source-map-support "^0.5.3" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g== + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ== + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" + integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== + dependencies: + babel-plugin-istanbul "^4.1.6" + babel-preset-jest "^23.2.0" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w== + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.1.6: + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" + integrity sha512-N0MlMjZtahXK0yb0K3V9hWPrq5e7tThbghvDr0k3X75UuOOqwsWW6mk8XHD2QvEC0Ca9dLIfTgNU36TeJD6Hnw== + +babel-plugin-syntax-object-rest-spread@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha512-C4Aq+GaAj83pRQ0EFgTvw5YO6T3Qz2KGrNRwIj9mSoNHVvdZY4KO2uA6HNtNXCw993iSZnckY1aLW8nOi8i4+w== + +babel-preset-jest@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" + integrity sha512-AdfWwc0PYvDtwr009yyVNh72Ev68os7SsPmOFVX7zSA+STXuk5CV2iMVazZU01bEoHCSwTkgv4E4HOOcODPkPg== + dependencies: + babel-plugin-jest-hoist "^23.2.0" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A== + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg== + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA== + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== + +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw== + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.4, browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz#06e530907fe2949dc21fc3c2e2302e10b1437238" + integrity sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ== + dependencies: + bn.js "^5.2.1" + randombytes "^2.1.0" + safe-buffer "^5.2.1" + +browserify-sign@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" + integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== + dependencies: + bn.js "^5.2.1" + browserify-rsa "^4.1.0" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.5" + hash-base "~3.0" + inherits "^2.0.4" + parse-asn1 "^5.1.7" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@1.x, buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g== + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== + +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + integrity sha512-IS4lTgp57lUcpXzyCaiUQcRZBxZAkzl+jNXrMUXZjdnr2yujpKUMG9OYeYL29i6fL66ihypvVJ/MeX0B+9pWOg== + dependencies: + rsvp "^3.3.3" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ== + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A== + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + 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" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA== + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.12.1: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +component-emitter@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== + +convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +create-ecdh@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0: + version "6.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.1" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz#bb8921bec9acc81633379aa8f52d69b0b69e0dac" + integrity sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ== + dependencies: + browserify-cipher "^1.0.1" + browserify-sign "^4.2.3" + create-ecdh "^4.0.4" + create-hash "^1.2.0" + create-hmac "^1.1.7" + diffie-hellman "^5.0.3" + hash-base "~3.0.4" + inherits "^2.0.4" + pbkdf2 "^3.1.2" + public-encrypt "^4.0.3" + randombytes "^2.1.0" + randomfill "^1.0.4" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" + integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== + dependencies: + cssom "0.3.x" + +d@1, d@^1.0.1, d@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.2.tgz#2aefd554b81981e7dccf72d6842ae725cb17e5de" + integrity sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw== + dependencies: + es5-ext "^0.10.64" + type "^2.7.2" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.0.0, decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-require-extensions@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + integrity sha512-Dn2eAftOqXhNXs5f/Xjn7QTZ6kDYkx7u0EXQInN1oyYwsZysu11q7oTtaKcbzLxZRJiDHa8VmwpWmb4lY5FqgA== + dependencies: + strip-bom "^2.0.0" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +des.js@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" + integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A== + dependencies: + repeating "^2.0.0" + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + integrity sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg== + +diff@^3.1.0, diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diffie-hellman@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== + dependencies: + webidl-conversions "^4.0.2" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +elliptic@^6.5.3, elliptic@^6.5.5: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz#950964ecc7f0332a42321b673b38dc8ff15535b3" + integrity sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" + +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha512-ZaAux1rigq1e2nQrztHn4h2ugvpzZxs64qneNah+8Mh/K0CRqJFJc+UoXnUsq+1yX+DmQFPPdVqboKAJ89e0Iw== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.62, es5-ext@^0.10.64, es5-ext@~0.10.14: + version "0.10.64" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.64.tgz#12e4ffb48f1ba2ea777f1fcdd1918ef73ea21714" + integrity sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + esniff "^2.0.1" + next-tick "^1.1.0" + +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A== + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.6.tgz#5669e3b2aa01d61a50ba79964f733673574983b8" + integrity sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + es6-iterator "~2.0.3" + es6-symbol "^3.1.3" + event-emitter "^0.3.5" + type "^2.7.2" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3, es6-symbol@~3.1.1: + version "3.1.4" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.4.tgz#f4e7d28013770b4208ecbf3e0bf14d3bcb557b8c" + integrity sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg== + dependencies: + d "^1.0.2" + ext "^1.7.0" + +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escodegen@^1.9.1: + version "1.14.3" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" + integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ== + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esniff@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/esniff/-/esniff-2.0.1.tgz#a4d4b43a5c71c7ec51c51098c1d8a29081f9b308" + integrity sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg== + dependencies: + d "^1.0.1" + es5-ext "^0.10.62" + event-emitter "^0.3.5" + type "^2.7.2" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1, estraverse@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +event-emitter@^0.3.5, event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== + dependencies: + d "1" + es5-ext "~0.10.14" + +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== + dependencies: + merge "^1.2.0" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA== + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA== + dependencies: + fill-range "^2.1.0" + +expect@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" + integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== + dependencies: + ansi-styles "^3.2.0" + jest-diff "^23.6.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + +ext@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg== + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ== + +fileset@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha512-UxowFKnAFIwtmSxgKjWAVgjE3Fk7MQJT0ZIyl0NwIFZTrx4913rLaonGJ84V+x/2+w/pe4ULHRns+GZPs1TVuw== + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw== + dependencies: + for-in "^1.0.1" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + +fs-extra@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^1.2.3, fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA== + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w== + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw== + +handlebars@^4.0.3: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg== + dependencies: + ansi-regex "^2.0.0" + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash-base@~3.0, hash-base@~3.0.4: + version "3.0.5" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.5.tgz#52480e285395cf7fba17dc4c9e47acdc7f248a8a" + integrity sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0, hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.2, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +is-accessor-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" + integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== + dependencies: + hasown "^2.0.0" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== + dependencies: + hasown "^2.0.0" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-descriptor@^0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" + integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== + dependencies: + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" + integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== + dependencies: + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg== + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA== + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww== + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + integrity sha512-95jJZX6O/gdekidH2usRBr9WdRw4LU56CttPstXFxvG0r3QUE9eaIdz2p2Y7zrm6jxz7SjByAo1AtzwGlRvfOg== + +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg== + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg== + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ== + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-api@^1.3.1: + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" + integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== + +istanbul-lib-hook@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== + dependencies: + handlebars "^4.0.3" + +jest-changed-files@^23.4.2: + version "23.4.2" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" + integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA== + dependencies: + throat "^4.0.0" + +jest-cli@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" + integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.3.1" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-source-maps "^1.2.4" + jest-changed-files "^23.4.2" + jest-config "^23.6.0" + jest-environment-jsdom "^23.4.0" + jest-get-type "^22.1.0" + jest-haste-map "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve-dependencies "^23.6.0" + jest-runner "^23.6.0" + jest-runtime "^23.6.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + jest-watcher "^23.4.0" + jest-worker "^23.2.0" + micromatch "^2.3.11" + node-notifier "^5.2.1" + prompts "^0.1.9" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^11.0.0" + +jest-config@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" + integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== + dependencies: + babel-core "^6.0.0" + babel-jest "^23.6.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^23.4.0" + jest-environment-node "^23.4.0" + jest-get-type "^22.1.0" + jest-jasmine2 "^23.6.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + micromatch "^2.3.11" + pretty-format "^23.6.0" + +jest-diff@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" + integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + +jest-docblock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" + integrity sha512-CB8MdScYLkzQ0Q/I4FYlt2UBkG9tFzi+ngSPVhSBB70nifaC+5iWz6GEfa/lB4T2KCqGy+DLzi1v34r9R1XzuA== + dependencies: + detect-newline "^2.1.0" + +jest-each@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" + integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== + dependencies: + chalk "^2.0.1" + pretty-format "^23.6.0" + +jest-environment-jsdom@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" + integrity sha512-UIXe32cMl/+DtyNHC15X+aFZMh04wx7PjWFBfz+nwoLgsIN2loKoNiKGSzUhMW/fVwbHrk8Qopglb7V4XB4EfQ== + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + jsdom "^11.5.1" + +jest-environment-node@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" + integrity sha512-bk8qScgIfkb+EdwJ0JZ9xGvN7N3m6Qok73G8hi6tzvNadpe4kOxxuGmK2cJzAM3tPC/HBulzrOeNHEvaThQFrQ== + dependencies: + jest-mock "^23.2.0" + jest-util "^23.4.0" + +jest-get-type@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== + +jest-haste-map@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" + integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg== + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + invariant "^2.2.4" + jest-docblock "^23.2.0" + jest-serializer "^23.0.1" + jest-worker "^23.2.0" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" + integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== + dependencies: + babel-traverse "^6.0.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^23.6.0" + is-generator-fn "^1.0.0" + jest-diff "^23.6.0" + jest-each "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + pretty-format "^23.6.0" + +jest-leak-detector@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" + integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg== + dependencies: + pretty-format "^23.6.0" + +jest-matcher-utils@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" + integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^23.6.0" + +jest-message-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" + integrity sha512-Tjqy7T8jHhPgV4Gsi+pKMMfaz3uP5DPtMGnm8RWNWUHIk2igqxQ3/9rud3JkINCvZDGqlpJVuFGIDXbltG4xLA== + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" + integrity sha512-lz+Rf6dwRNDVowuGCXm93ib8hMyPntl1GGVt9PuZfBAmTjP5yKYgK14IASiEjs7XoMo4i/R7+dkrJY3eESwTJg== + +jest-regex-util@^23.3.0: + version "23.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" + integrity sha512-pNilf1tXhv5z0qjJy2Hl6Ar6dsi+XX2zpCAuzxRs4qoputI0Bm9rU7pa2ErrFTfiHYe8VboTR7WATPZXqzpQ/g== + +jest-resolve-dependencies@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" + integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA== + dependencies: + jest-regex-util "^23.3.0" + jest-snapshot "^23.6.0" + +jest-resolve@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" + integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== + dependencies: + browser-resolve "^1.11.3" + chalk "^2.0.1" + realpath-native "^1.0.0" + +jest-runner@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" + integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA== + dependencies: + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^23.6.0" + jest-docblock "^23.2.0" + jest-haste-map "^23.6.0" + jest-jasmine2 "^23.6.0" + jest-leak-detector "^23.6.0" + jest-message-util "^23.4.0" + jest-runtime "^23.6.0" + jest-util "^23.4.0" + jest-worker "^23.2.0" + source-map-support "^0.5.6" + throat "^4.0.0" + +jest-runtime@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" + integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw== + dependencies: + babel-core "^6.0.0" + babel-plugin-istanbul "^4.1.6" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.11" + jest-config "^23.6.0" + jest-haste-map "^23.6.0" + jest-message-util "^23.4.0" + jest-regex-util "^23.3.0" + jest-resolve "^23.6.0" + jest-snapshot "^23.6.0" + jest-util "^23.4.0" + jest-validate "^23.6.0" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^11.0.0" + +jest-serializer@^23.0.1: + version "23.0.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" + integrity sha512-l6cPuiGEQI72H4+qMePF62E+URkZscnAqdHBYHkMrhKJOwU08AHvGmftXdosUzfCGhh/Ih4Xk1VgxnJSwrvQvQ== + +jest-snapshot@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" + integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== + dependencies: + babel-types "^6.0.0" + chalk "^2.0.1" + jest-diff "^23.6.0" + jest-matcher-utils "^23.6.0" + jest-message-util "^23.4.0" + jest-resolve "^23.6.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^23.6.0" + semver "^5.5.0" + +jest-util@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" + integrity sha512-OS1/0QSbbMF9N93MxF1hUmK93EF3NGQGbbaTBZZk95aytWtWmzxsFWwt/UXIIkfHbPCK1fXTrPklbL+ohuFFOA== + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^23.4.0" + mkdirp "^0.5.1" + slash "^1.0.0" + source-map "^0.6.0" + +jest-validate@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" + integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^23.6.0" + +jest-watcher@^23.4.0: + version "23.4.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" + integrity sha512-BZGZYXnte/vazfnmkD4ERByi2O2mW+C++W8Sb7dvOnwcSccvCKNQgmcz1L+9hxVD7HWtqymPctIY7v5ZbQGNyg== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + string-length "^2.0.0" + +jest-worker@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" + integrity sha512-zx0uwPCDxToGfYyQiSHh7T/sKIxQFnQqT6Uug7Y/L7PzEkFITPaufjQe6yaf1OXSnGvKC5Fwol1hIym0zDzyvw== + dependencies: + merge-stream "^1.0.1" + +jest@^23.1.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" + integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw== + dependencies: + import-local "^1.0.0" + jest-cli "^23.6.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== + +js-yaml@^3.13.1, js-yaml@^3.7.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA== + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@2.x: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw== + +json5@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" + integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ== + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== + dependencies: + invert-kv "^1.0.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.1.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" + integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha512-nOBDrc/wgpkd3X/JOhMqYR+/eLqlfLP4oQfoBA6QExIxEl+GU01oyEkwWyueyO8110pUKijtiHGhEmYoOn88oQ== + dependencies: + mimic-fn "^1.0.0" + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha512-e6RM36aegd4f+r8BZCcYXlO2P3H6xbUM6ktL2Xmf45GAOit9bI4z6/3VU7JwllVO1L7u0UDSg/EhzQ5lmMLolA== + dependencies: + readable-stream "^2.0.1" + +merge@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" + integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== + +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA== + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.0.3, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.x, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nan@^2.12.1: + version "2.22.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.2.tgz#6b504fd029fb8f38c0990e52ad5c26772fdacfbb" + integrity sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +neo-async@^2.5.0, neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-notifier@^5.2.1: + version "5.4.5" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.5.tgz#0cbc1a2b0f658493b4025775a13ad938e96091ef" + integrity sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ== + dependencies: + growly "^1.3.0" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +nwsapi@^2.0.7: + version "2.2.18" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.18.tgz#3c4d7927e1ef4d042d319438ecfda6cd81b7ee41" + integrity sha512-p1TRH/edngVEHVbwqWnxUViEmq5znDvyB+Sik5cmuLpGOIfDf/39zLiq3swPF8Vakqn+gvNiOQAZu8djYlQILA== + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA== + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-locale@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +pako@^1.0.5, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-asn1@^5.0.0, parse-asn1@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" + integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== + dependencies: + asn1.js "^4.10.1" + browserify-aes "^1.2.0" + evp_bytestokey "^1.0.3" + hash-base "~3.0" + pbkdf2 "^3.1.2" + safe-buffer "^5.2.1" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA== + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-parse@^1.0.5, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== + dependencies: + pify "^2.0.0" + +pbkdf2@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha512-ojakdnUgL5pzJYWw2AIDEupaQCX5OPbM688ZevubICjdIX01PRSYKqm33fJoCOJBRseYCTUlQRnBNX+Pchaejw== + dependencies: + find-up "^2.1.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ== + +pretty-format@^23.6.0: + version "23.6.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" + integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +prompts@^0.1.9: + version "0.1.14" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" + integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w== + dependencies: + kleur "^2.0.1" + sisteransi "^0.1.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +public-encrypt@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@^6.12.3: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== + +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +realpath-native@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== + dependencies: + util.promisify "^1.0.0" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A== + dependencies: + is-finite "^1.0.0" + +request-promise-core@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" + integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== + dependencies: + lodash "^4.17.19" + +request-promise-native@^1.0.5: + version "1.0.9" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" + integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== + dependencies: + request-promise-core "1.1.4" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + +request@^2.87.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg== + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.x, resolve@^1.10.0, resolve@^1.3.2: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg== + dependencies: + align-text "^0.1.1" + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== + +safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^2.0.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + integrity sha512-OuZwD1QJ2R9Dbnhd7Ur8zzD8l+oADp9npyxK63Q9nZ4AjhB2QwDQcQlD8iuUsGm5AZZqtEuCaJvK1rxGRxyQ1Q== + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + +sax@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5, semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" + integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.0, source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.3, source-map-support@^0.5.6: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.21" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" + integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.5.tgz#a19b0b01947e0029c8e451d5d61a498f5bb1471b" + integrity sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ== + dependencies: + escape-string-regexp "^2.0.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + integrity sha512-Qka42GGrS8Mm3SZ+7cH8UXiIWI867/b/Z/feQSpQx/rbfB8UGknGEZVaUQMOUVj+soY6NpWAxily63HI1OckVQ== + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-bom@3.0.0, strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== + dependencies: + is-utf8 "^0.2.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-json-comments@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g== + +supports-color@^3.1.2: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw== + dependencies: + has-flag "^2.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-tree@^3.2.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tapable@^0.2.5, tapable@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" + integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== + +test-exclude@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" + integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== + dependencies: + arrify "^1.0.1" + micromatch "^2.3.11" + object-assign "^4.1.0" + read-pkg-up "^1.0.1" + require-main-filename "^1.0.1" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + integrity sha512-wCVxLDcFxw7ujDxaeJC6nfl2XfHJNYs8yUYJnvMgtPEFlttP9tHSfRUv2vBe6C4hkVFPWoP1P6ZccbYjmSEkKA== + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== + dependencies: + punycode "^2.1.0" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== + +ts-jest@^23.0.4: + version "23.10.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.10.5.tgz#cdb550df4466a30489bf70ba867615799f388dd5" + integrity sha512-MRCs9qnGoyKgFc8adDEntAOP64fWK1vZKnOYU1o2HxaqjdJvGqmkLCPCnVq1/If4zkUmEjKPnCiUisTrlX2p2A== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + +ts-node@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.3.0.tgz#c13c6a3024e30be1180dd53038fc209289d4bf69" + integrity sha512-S87fS5QGinpnvi6I1aW8PnEEwJbkQsr2o+9C3qdAkmaYQn33PKVkXowI2/wggr8FzAwKhvCaomB0EX60LW3/Fw== + dependencies: + arrify "^1.0.0" + chalk "^2.0.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.0" + tsconfig "^6.0.0" + v8flags "^3.0.0" + yn "^2.0.0" + +tsconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" + integrity sha512-n3i8c4BOozElBHYMVkEyF9AudHRvvq6NTc6sVRVmLBQM2A02JKjLoICxRtKkoGu3gROOnRZ85KxiTAcmhWgR0w== + dependencies: + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tslib@^1.8.0, tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslint@^5.7.0: + version "5.20.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" + integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.8.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.3.tgz#436981652129285cc3ba94f392886c2637ea0486" + integrity sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ== + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +typescript@^2.5.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" + integrity sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w== + +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w== + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q== + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha512-TNM20HMW67kxHRNCZdvLyiwE1ST6WyY5Ae+TG55V81NpvNwJ9+V4/po4LHA1R9afV/WrqzfedG2UJCk2+swirw== + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upng-js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/upng-js/-/upng-js-1.0.1.tgz#79a4be4977aa4f59bd8746fa0f2a642000367b3f" + integrity sha512-sbYCMd7i1elk9ZsE28ZFXg1Jv+k2EzZHm78yuyJPB3jytHUHulbHWBhOuocCVhijzBTVxEoj1FIyaIfm+mDrfA== + dependencies: + pako "^1.0.5" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +url@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" + integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== + dependencies: + punycode "^1.4.1" + qs "^6.12.3" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.3.tgz#3d77cf56628b4aad743e5acde8e5c44cea7dbf1c" + integrity sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + for-each "^0.3.3" + get-intrinsic "^1.2.6" + has-proto "^1.2.0" + has-symbols "^1.1.0" + object.getownpropertydescriptors "^2.1.8" + safe-array-concat "^1.1.3" + +util@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8flags@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" + integrity sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg== + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +walker@~1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +watch@~0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + integrity sha512-oUcoHFG3UF2pBlHcMORAojsN09BfqSfWYWlR3eSSjUFR7eBEx53WT2HX/vZeVTTIVCGShcazb+t6IcBRCNXqvA== + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.4.0: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-sources@^1.0.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^3.10.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" + integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@^1.2.12, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg== + +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.1.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.4.tgz#c7bea9f1cfb5f410de50e70e82662e562113f9a7" + integrity sha512-fFCejsuC8f9kOSu9FYaOw8CdO68O3h5v0lg4p74o8JqWpwTf9tniOD+nOB78aWoVSS6WptVUmDrp/KPsMVBWFQ== + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yargs-parser@10.x: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha512-WhzC+xgstid9MbVUktco/bf+KJG+Uu6vMX0LN1sLJvwmbCQVxb4D8LzogobonKycNasCZLdOzTAk1SK7+K7swg== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha512-CswCfdOgCr4MMsT1GzbEJ7Z2uYudWyrGX8Bgh/0eyCzj/DXWdKq6a/ADufkzI1WAOIW6jYaXJvRyLhDO0kfqBw== + dependencies: + camelcase "^4.1.0" + +yargs@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^3.1.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha512-3RiZrpLpjrzIAKgGdPktBcMP/eG5bDFlkI+PHle1qwzyVXyDQL+pD/eZaMoOOO0Y7LLBfjpucObuUm/icvbpKQ== + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A== + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" + integrity sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==