diff --git a/Apps/SampleData/Cesium3DTiles/Tilesets/KTX2Tileset/Balloon.b3dm b/Apps/SampleData/Cesium3DTiles/Tilesets/KTX2Tileset/Balloon.b3dm new file mode 100644 index 00000000000..b197fbd512d Binary files /dev/null and b/Apps/SampleData/Cesium3DTiles/Tilesets/KTX2Tileset/Balloon.b3dm differ diff --git a/Apps/SampleData/Cesium3DTiles/Tilesets/KTX2Tileset/tileset.json b/Apps/SampleData/Cesium3DTiles/Tilesets/KTX2Tileset/tileset.json new file mode 100644 index 00000000000..04227cdf310 --- /dev/null +++ b/Apps/SampleData/Cesium3DTiles/Tilesets/KTX2Tileset/tileset.json @@ -0,0 +1,39 @@ +{ + "asset": { + "version": "1.0" + }, + "geometricError": 70, + "root": { + "transform": [ + -0.8608332815512961, + -0.026091425783012157, + -0.5082177671768633, + 0, + 0.324224005982592, + -0.7978680937788927, + -0.5082177671768631, + 0, + -0.39223061496806577, + -0.6022671686471426, + 0.6952908760019272, + 0, + -2506152.030937531, + -3848177.6543499078, + 4412811.205275625, + 1 + ], + "refine": "REPLACE", + "boundingVolume": { + "sphere": [ + 0, + 0, + 0, + 100 + ] + }, + "geometricError": 0, + "content": { + "uri": "Balloon.b3dm" + } + } +} \ No newline at end of file diff --git a/Apps/SampleData/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx b/Apps/SampleData/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx deleted file mode 100644 index 7a8880d0411..00000000000 Binary files a/Apps/SampleData/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx and /dev/null differ diff --git a/Apps/SampleData/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2 b/Apps/SampleData/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2 new file mode 100644 index 00000000000..df2b3930e7b Binary files /dev/null and b/Apps/SampleData/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2 differ diff --git a/Apps/SampleData/models/CesiumBalloonKTX2/CesiumBalloonKTX2.glb b/Apps/SampleData/models/CesiumBalloonKTX2/CesiumBalloonKTX2.glb new file mode 100644 index 00000000000..b117d0114d6 Binary files /dev/null and b/Apps/SampleData/models/CesiumBalloonKTX2/CesiumBalloonKTX2.glb differ diff --git a/Apps/Sandcastle/gallery/3D Models.html b/Apps/Sandcastle/gallery/3D Models.html index 1db0cc2d8d1..7a243f7c683 100644 --- a/Apps/Sandcastle/gallery/3D Models.html +++ b/Apps/Sandcastle/gallery/3D Models.html @@ -124,6 +124,15 @@ ); }, }, + { + text: "KTX2 Compressed Balloon", + onselect: function () { + createModel( + "../../SampleData/models/CesiumBalloonKTX2/CesiumBalloonKTX2.glb", + 1000.0 + ); + }, + }, ]; Sandcastle.addToolbarMenu(options); diff --git a/Apps/Sandcastle/gallery/Image-Based Lighting.html b/Apps/Sandcastle/gallery/Image-Based Lighting.html index 9b827c3387a..a9ff829a63c 100644 --- a/Apps/Sandcastle/gallery/Image-Based Lighting.html +++ b/Apps/Sandcastle/gallery/Image-Based Lighting.html @@ -66,13 +66,14 @@ } var environmentMapURL = - "https://cesium.com/assets/kiara_6_afternoon_2k_ibl.ktx"; + "../../SampleData/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2"; var modelURL = "../../SampleData/models/Pawns/Pawns.glb"; // This environment map was processed using Google's Filament project. To process your own: // 1 - Download the Filament release (https://github.com/google/filament/releases). // 2 - Run `cmgen --type=ktx --deploy=/path/to/output /path/to/image.hdr`. Other formats are also supported. Run `cmgen --help` for all options. - // 3 - Take the generated coefficients and the KTX file and load them in CesiumJS as shown below. + // 3 - Take the generated coefficients and the KTX file and convert them using the ktx2ktx2 converter. + // 4 - Converter can be found here: https://github.com/KhronosGroup/KTX-Software/tree/master/tools/ktx2ktx2 var L00 = new Cesium.Cartesian3( 0.170455150831422, diff --git a/Apps/Sandcastle/gallery/Materials.html b/Apps/Sandcastle/gallery/Materials.html index ff2071f62b6..886993292be 100644 --- a/Apps/Sandcastle/gallery/Materials.html +++ b/Apps/Sandcastle/gallery/Materials.html @@ -221,14 +221,7 @@ function applyCompressedTextureMaterial(primitive, scene) { Sandcastle.declare(applyCompressedTextureMaterial); // For highlighting in Sandcastle. - var compressedImageUrl; - if (scene.getCompressedTextureFormatSupported("s3tc")) { - compressedImageUrl = "../images/LogoDXT1.ktx"; - } else if (scene.getCompressedTextureFormatSupported("etc1")) { - compressedImageUrl = "../images/LogoETC1.ktx"; - } else if (scene.getCompressedTextureFormatSupported("pvrtc")) { - compressedImageUrl = "../images/LogoPVR.ktx"; - } + var compressedImageUrl = "../images/Logo.ktx2"; primitive.appearance.material = new Cesium.Material({ fabric: { diff --git a/Apps/Sandcastle/images/Logo.ktx2 b/Apps/Sandcastle/images/Logo.ktx2 new file mode 100644 index 00000000000..bf23f1f2abc Binary files /dev/null and b/Apps/Sandcastle/images/Logo.ktx2 differ diff --git a/Apps/Sandcastle/images/LogoDXT1.ktx b/Apps/Sandcastle/images/LogoDXT1.ktx deleted file mode 100644 index 73598d1c8d3..00000000000 Binary files a/Apps/Sandcastle/images/LogoDXT1.ktx and /dev/null differ diff --git a/Apps/Sandcastle/images/LogoETC1.ktx b/Apps/Sandcastle/images/LogoETC1.ktx deleted file mode 100644 index 9d8b88d7f54..00000000000 Binary files a/Apps/Sandcastle/images/LogoETC1.ktx and /dev/null differ diff --git a/Apps/Sandcastle/images/LogoPVR.ktx b/Apps/Sandcastle/images/LogoPVR.ktx deleted file mode 100644 index fd3461c7bbb..00000000000 Binary files a/Apps/Sandcastle/images/LogoPVR.ktx and /dev/null differ diff --git a/CHANGES.md b/CHANGES.md index 38a8a9bd0d9..8026fb71633 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,15 +1,83 @@ # Change Log -### 1.71.0 - 2020-07-01 +### 1.72 - 2020-08-03 + +##### Breaking Changes :mega: + +- CesiumJS no longer ships with a default Mapbox access token and Mapbox imagery layers have been removed from the `BaseLayerPicker` defaults. If you are using `MapboxImageryProvider` or `MapboxStyleImageryProvider`, use `options.accessToken` when initializing the imagery provider. + +- CesiumJS no longer supports KTX and Crunch textures, use the [`ktx2ktx2`](https://github.com/KhronosGroup/KTX-Software) converter tool to update existing KTX files. [#9040](https://github.com/CesiumGS/cesium/issues/9040) + +##### Additions :tada: + +- CesiumJS now supports KTX2 textures compressed using Basis compression. UASTC textures not yet supported. [#9040](https://github.com/CesiumGS/cesium/issues/9040) + +##### Deprecated :hourglass_flowing_sand: + +- `MapboxApi.defaultAccessToken` was deprecated and will be removed in CesiumJS 1.73. Pass your access token directly to the MapboxImageryProvider or MapboxStyleImageryProvider constructors. +- `BingMapxApi` was deprecated and will be removed in CesiumJS 1.73. Pass your access key directly to the BingMapsImageryProvider or BingMapsGeocoderService constructors. + +##### Fixes :wrench: + +- Fixed `Color.fromCssColorString` when color string contains spaces. [#9015](https://github.com/CesiumGS/cesium/issues/9015) +- Fixed 3D Tileset replacement refinement when leaf is empty. [#8996](https://github.com/CesiumGS/cesium/pull/8996) +- Fixed a bug in the assessment of terrain tile visibility [#9033](https://github.com/CesiumGS/cesium/issues/9033) +- Fixed vertical polylines with `arcType: ArcType.RHUMB`, including lines drawn via GeoJSON. [#9028](https://github.com/CesiumGS/cesium/pull/9028) +- Fixed wall rendering when underground [#9041](https://github.com/CesiumGS/cesium/pull/9041) +- Fixed issue where a side of the wall was missing if the first position and the last position were equal [#9044](https://github.com/CesiumGS/cesium/pull/9044) +- Fixed `translucencyByDistance` for label outline color [#9003](https://github.com/CesiumGS/cesium/pull/9003) +- Fixed return value for `SampledPositionProperty.removeSample` [#9017](https://github.com/CesiumGS/cesium/pull/9017) +- Fixed issue where wall doesn't have correct texture coordinates when there are duplicate positions input [#9042](https://github.com/CesiumGS/cesium/issues/9042) + +### 1.71 - 2020-07-01 + +##### Breaking Changes :mega: + +- Updated `WallGeometry` to respect the order of positions passed in, instead of making the positions respect a counter clockwise winding order. This will only affect the look of walls with an image material. If this changed the way your wall is drawing, reverse the order of the positions. [#8955](https://github.com/CesiumGS/cesium/pull/8955/) + +##### Additions :tada: + +- Added `backFaceCulling` property to `Cesium3DTileset` and `Model` to support viewing the underside or interior of a tileset or model. [#8981](https://github.com/CesiumGS/cesium/pull/8981) +- Added `Ellipsoid.surfaceArea` for computing the approximate surface area of a rectangle on the surface of an ellipsoid. [#8986](https://github.com/CesiumGS/cesium/pull/8986) +- Added support for PolylineVolume in CZML. [#8841](https://github.com/CesiumGS/cesium/pull/8841) +- Added `Color.toCssHexString` for getting the CSS hex string equivalent for a color. [#8987](https://github.com/CesiumGS/cesium/pull/8987) + +##### Fixes :wrench: + +- Fixed issue where tileset was not playing glTF animations. [#8962](https://github.com/CesiumGS/cesium/issues/8962) +- Fixed a divide-by-zero bug in `Ellipsoid.geodeticSurfaceNormal` when given the origin as input. `undefined` is returned instead. [#8986](https://github.com/CesiumGS/cesium/pull/8986) +- Fixed error with `WallGeometry` when there were adjacent positions with very close values. [#8952](https://github.com/CesiumGS/cesium/pull/8952) +- Fixed artifact for skinned model when log depth is enabled. [#6447](https://github.com/CesiumGS/cesium/issues/6447) +- Fixed a bug where certain rhumb arc polylines would lead to a crash. [#8787](https://github.com/CesiumGS/cesium/pull/8787) +- Fixed handling of Label's backgroundColor and backgroundPadding option [#8949](https://github.com/CesiumGS/cesium/pull/8949) +- Fixed several bugs when rendering CesiumJS in a WebGL 2 context. [#797](https://github.com/CesiumGS/cesium/issues/797) +- Fixed a bug where switching from perspective to orthographic caused triangles to overlap each other incorrectly. [#8346](https://github.com/CesiumGS/cesium/issues/8346) +- Fixed a bug where switching to orthographic camera on the first frame caused the zoom level to be incorrect. [#8853](https://github.com/CesiumGS/cesium/pull/8853) +- Fixed `scene.pickFromRay` intersection inaccuracies. [#8439](https://github.com/CesiumGS/cesium/issues/8439) +- Fixed a bug where a null or undefined name property passed to the `Entity` constructor would throw an exception.[#8832](https://github.com/CesiumGS/cesium/pull/8832) +- Fixed JSDoc and TypeScript type definitions for `ScreenSpaceEventHandler.getInputAction` which listed incorrect return type. [#9002](https://github.com/CesiumGS/cesium/pull/9002) +- Improved the style of the error panel. [#8739](https://github.com/CesiumGS/cesium/issues/8739) +- Fixed animation widget SVG icons not appearing in iOS 13.5.1. [#8993](https://github.com/CesiumGS/cesium/pull/8993) + +### 1.70.1 - 2020-06-10 ##### Additions :tada: - Add a `toString` method to the `Resource` class in case an instance gets logged as a string. [#8722](https://github.com/CesiumGS/cesium/issues/8722) +- Exposed `Transforms.rotationMatrixFromPositionVelocity` method from Cesium's private API. [#8927](https://github.com/CesiumGS/cesium/issues/8927) ##### Fixes :wrench: -- Fixed a bug with handling of PixelFormat's flipY. [#8893](https://github.com/CesiumGS/cesium/pull/8893) +- Fixed JSDoc and TypeScript type definitions for all `ImageryProvider` types, which were missing `defaultNightAlpha` and `defaultDayAlpha` properties. [#8908](https://github.com/CesiumGS/cesium/pull/8908) +- Fixed JSDoc and TypeScript for `MaterialProperty`, which were missing the ability to take primitive types in their constructor. [#8904](https://github.com/CesiumGS/cesium/pull/8904) +- Fixed JSDoc and TypeScript type definitions to allow the creation of `GeometryInstance` instances using `XXXGeometry` classes. [#8941](https://github.com/CesiumGS/cesium/pull/8941). +- Fixed JSDoc and TypeScript for `buildModuleUrl`, which was accidentally excluded from the official CesiumJS API. [#8923](https://github.com/CesiumGS/cesium/pull/8923) +- Fixed JSDoc and TypeScript type definitions for `EllipsoidGeodesic` which incorrectly listed `result` as required. [#8904](https://github.com/CesiumGS/cesium/pull/8904) +- Fixed JSDoc and TypeScript type definitions for `EllipsoidTangentPlane.fromPoints`, which takes an array of `Cartesian3`, not a single instance. [#8928](https://github.com/CesiumGS/cesium/pull/8928) +- Fixed JSDoc and TypeScript type definitions for `EntityCollection.getById` and `CompositeEntityCollection.getById`, which can both return undefined. [#8928](https://github.com/CesiumGS/cesium/pull/8928) +- Fixed JSDoc and TypeScript type definitions for `Viewer` options parameters. - Fixed a memory leak where some 3D Tiles requests were being unintentionally retained after the requests were cancelled. [#8843](https://github.com/CesiumGS/cesium/pull/8843) +- Fixed a bug with handling of PixelFormat's flipY. [#8893](https://github.com/CesiumGS/cesium/pull/8893) ### 1.70.0 - 2020-06-01 diff --git a/Documentation/Contributors/KTX2ModuleManagement/README.md b/Documentation/Contributors/KTX2ModuleManagement/README.md new file mode 100644 index 00000000000..1e74f1f0ca7 --- /dev/null +++ b/Documentation/Contributors/KTX2ModuleManagement/README.md @@ -0,0 +1,54 @@ +## Updating the KTX2 Transcoder Module + +We use a custom build of the `msc_basis_transcoder` tool in Khronos's [KTX-Software](https://github.com/KhronosGroup/KTX-Software/) project to allow for IE11 compatability. + +Updating the transcoder requires building both the web assembly version and Javascript fallback. + +These directions were written against https://github.com/KhronosGroup/KTX-Software/commit/78790b5ea9c9f432a8e877fbc8cfd977617bb775. + +### Web Assembly Build + +Follow the instructions at https://github.com/KhronosGroup/KTX-Software/blob/master/BUILDING.md#webemscripten. + +You will need a make tool as well as emscripten. + +- Preferably, use Linux or [the Linux Subsystem for Windows 10](https://docs.microsoft.com/en-us/windows/wsl/install-win10) and `make` to build. +- Optionally, [MSYS2](http://www.msys2.org/). Follow installation instructions and add the path to MSYS2's usr/bin to your `PATH`. For example, if the path is `C:\msys64\usr\bin`, run `PATH=%PATH%;C:\msys64\usr\bin`. + +### Javascript fallback build + +As of this writing, `KTX-Software` does not provide an official configuration parameter for configuring the build to Javascript/asm.js instead of web assembly. An issue is open here: https://github.com/KhronosGroup/KTX-Software/issues/332 + +You will need to edit the project's `CMakeLists.txt` to include the required configuration flags. + +1. Make a separate build directory for the Javascript fallback. +2. in `KTX-Software/CMakeLists.txt`, locate the variable `KTX_EMC_LINK_FLAGS` +3. add emscripten flags `WASM=0`, `LEGACY_VM_SUPPORT=1`, and `--memory-init-file 0`, ie. + +``` +set( + KTX_EMC_LINK_FLAGS + --bind + "SHELL:--source-map-base ./" + "SHELL:-s ALLOW_MEMORY_GROWTH=1" + "SHELL:-s ASSERTIONS=0" + "SHELL:-s MALLOC=emmalloc" + "SHELL:-s MODULARIZE=1" + "SHELL:-s FULL_ES3=1" + "SHELL:-s WASM=0" # for asm.js + "SHELL:-s LEGACY_VM_SUPPORT=1" # for asm.js + "SHELL: --memory-init-file 0" # for asm.js +) +``` + +4. Configure and build in the new directory. Be aware that the directions in the `KTX-Software` assume directory names, make sure to use the new directory, ie. + +```bash +cd path/to/new/build/dir && cmake .. -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="path/to/emsdk/Emscripten.cmake" && cmake --build +``` + +### Adding to Cesium + +Note that both builds will produce a file called `msc_basis_transcoder.js`. Rename the web assembly version (the smaller file with a corresponding `msc_basis_transcoder.wasm`) before placing both in `Source/ThirdParty/Workers`. + +Place `msc_basis_transcoder.wasm` in `Source/ThirdParty`. diff --git a/LICENSE.md b/LICENSE.md index 0c99e6fa6fa..faaff8b8485 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -556,58 +556,58 @@ https://github.com/mourner/quickselect > TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF > THIS SOFTWARE. -### crunch +## KTX-software -https://github.com/BinomialLLC/crunch +https://github.com/KhronosGroup/KTX-Software -> crunch/crnlib uses the ZLIB license: -> http://opensource.org/licenses/Zlib +> (Apache License) > -> Copyright (c) 2010-2016 Richard Geldreich, Jr. and Binomial LLC +> With the exception of the files listed explicitly below, the source is made +> available under the Apache License, Version 2.0 (the "License"); you may not +> use these files except in compliance with the License. You may obtain a copy of +> the License at > -> This software is provided 'as-is', without any express or implied -> warranty. In no event will the authors be held liable for any damages -> arising from the use of this software. +> http://www.apache.org/licenses/LICENSE-2.0 > -> Permission is granted to anyone to use this software for any purpose, -> including commercial applications, and to alter it and redistribute it -> freely, subject to the following restrictions: +> 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. > -> 1. The origin of this software must not be misrepresented; you must not -> claim that you wrote the original software. If you use this software -> in a product, an acknowledgment in the product documentation would be -> appreciated but is not required. +> libKTX is the work of Mark Callow based on work by Georg Kolling and Jacob +> Ström with contributions borrowed from Troy Hanson, Johannes van Waveren, +> Lode Vandevenne and Rich Geldreich. The source contains code > -> 2. Altered source versions must be plainly marked as such, and must not be -> misrepresented as being the original software. +> © 2010 ~ 2019 The Khronos Group Inc. +> © 2008 and © 2010 HI Corporation +> © 2005 Ericsson AB +> © 2003-2010, Troy D. Hanson +> © 2015-2020 Mark Callow +> © 2016 Oculus VR, LLC. +> © 2019 Binomial LLC. All Rights Reserved. +> © 2005-2019 Lode Vandevenne +> © 2019 Andreas Atteneder > -> 3. This notice may not be removed or altered from any source distribution. - -### crunch_lib.cpp - -https://github.com/Apress/html5-game-dev-insights/blob/master/jones_ch21/crunch_webgl/crunch_js/crunch_lib.cpp - -> Copyright (c) 2013, Evan Parker, Brandon Jones. All rights reserved. +> The KTX load tests are the work of Mark Callow with a few small portions +> borrowed from Sascha Willems' Vulkan examples and use Sam Lantinga's libSDL for +> portability. The source contains code > -> Redistribution and use in source and binary forms, with or without modification, -> are permitted provided that the following conditions are met: +> © 2013 The Khronos Group Inc. +> © 2008 and © 2010 HI Corporation +> © 1997-2018 Sam Lantinga +> © 2016 Sascha Willems +> © 2015-2020 Mark Callow > -> - Redistributions of source code must retain the above copyright notice, this -> list of conditions and the following disclaimer. -> - Redistributions in binary form must reproduce the above copyright notice, -> this list of conditions and the following disclaimer in the documentation -> and/or other materials provided with the distribution. +> `texturetests` and `unittests` are the work of Mark Callow and are based on gtest. The source contains code > -> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -> ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -> ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -> (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -> LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -> ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -> (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -> SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \*/ +> © 2010-2020 Mark Callow +> © 2006 Google Inc. +> +> `transcodetests` are the work of and were contributed by Andreas Atteneder. +> The source contains code +> +> © 2019 Andreas Atteneder ### texture-tester diff --git a/Source/Core/FeatureDetection.js b/Source/Core/FeatureDetection.js index 7cc66fa3f56..2145ea8d73f 100644 --- a/Source/Core/FeatureDetection.js +++ b/Source/Core/FeatureDetection.js @@ -181,6 +181,10 @@ function supportsPointerEvents() { return hasPointerEvents; } +function supportsBasis(context) { + return context.etc1 || context.s3tc || context.pvrtc; +} + var imageRenderingValueResult; var supportsImageRenderingPixelatedResult; function supportsImageRenderingPixelated() { @@ -304,6 +308,7 @@ var FeatureDetection = { supportsPointerEvents: supportsPointerEvents, supportsImageRenderingPixelated: supportsImageRenderingPixelated, supportsWebP: supportsWebP, + supportsBasis: supportsBasis, imageRenderingValue: imageRenderingValue, typedArrayTypes: typedArrayTypes, }; diff --git a/Source/Core/VulkanConstants.js b/Source/Core/VulkanConstants.js new file mode 100644 index 00000000000..91b2c907209 --- /dev/null +++ b/Source/Core/VulkanConstants.js @@ -0,0 +1,287 @@ +/** + * Enum containing Vulkan Constant values by name. + * + * These match the constants from the [Vulkan 1.2]{@link https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-definition} + * specifications. + * + * @enum {Number} + * @private + */ +var VulkanConstants = { + VK_FORMAT_UNDEFINED: 0, + VK_FORMAT_R4G4_UNORM_PACK8: 1, + VK_FORMAT_R4G4B4A4_UNORM_PACK16: 2, + VK_FORMAT_B4G4R4A4_UNORM_PACK16: 3, + VK_FORMAT_R5G6B5_UNORM_PACK16: 4, + VK_FORMAT_B5G6R5_UNORM_PACK16: 5, + VK_FORMAT_R5G5B5A1_UNORM_PACK16: 6, + VK_FORMAT_B5G5R5A1_UNORM_PACK16: 7, + VK_FORMAT_A1R5G5B5_UNORM_PACK16: 8, + VK_FORMAT_R8_UNORM: 9, + VK_FORMAT_R8_SNORM: 10, + VK_FORMAT_R8_USCALED: 11, + VK_FORMAT_R8_SSCALED: 12, + VK_FORMAT_R8_UINT: 13, + VK_FORMAT_R8_SINT: 14, + VK_FORMAT_R8_SRGB: 15, + VK_FORMAT_R8G8_UNORM: 16, + VK_FORMAT_R8G8_SNORM: 17, + VK_FORMAT_R8G8_USCALED: 18, + VK_FORMAT_R8G8_SSCALED: 19, + VK_FORMAT_R8G8_UINT: 20, + VK_FORMAT_R8G8_SINT: 21, + VK_FORMAT_R8G8_SRGB: 22, + VK_FORMAT_R8G8B8_UNORM: 23, + VK_FORMAT_R8G8B8_SNORM: 24, + VK_FORMAT_R8G8B8_USCALED: 25, + VK_FORMAT_R8G8B8_SSCALED: 26, + VK_FORMAT_R8G8B8_UINT: 27, + VK_FORMAT_R8G8B8_SINT: 28, + VK_FORMAT_R8G8B8_SRGB: 29, + VK_FORMAT_B8G8R8_UNORM: 30, + VK_FORMAT_B8G8R8_SNORM: 31, + VK_FORMAT_B8G8R8_USCALED: 32, + VK_FORMAT_B8G8R8_SSCALED: 33, + VK_FORMAT_B8G8R8_UINT: 34, + VK_FORMAT_B8G8R8_SINT: 35, + VK_FORMAT_B8G8R8_SRGB: 36, + VK_FORMAT_R8G8B8A8_UNORM: 37, + VK_FORMAT_R8G8B8A8_SNORM: 38, + VK_FORMAT_R8G8B8A8_USCALED: 39, + VK_FORMAT_R8G8B8A8_SSCALED: 40, + VK_FORMAT_R8G8B8A8_UINT: 41, + VK_FORMAT_R8G8B8A8_SINT: 42, + VK_FORMAT_R8G8B8A8_SRGB: 43, + VK_FORMAT_B8G8R8A8_UNORM: 44, + VK_FORMAT_B8G8R8A8_SNORM: 45, + VK_FORMAT_B8G8R8A8_USCALED: 46, + VK_FORMAT_B8G8R8A8_SSCALED: 47, + VK_FORMAT_B8G8R8A8_UINT: 48, + VK_FORMAT_B8G8R8A8_SINT: 49, + VK_FORMAT_B8G8R8A8_SRGB: 50, + VK_FORMAT_A8B8G8R8_UNORM_PACK32: 51, + VK_FORMAT_A8B8G8R8_SNORM_PACK32: 52, + VK_FORMAT_A8B8G8R8_USCALED_PACK32: 53, + VK_FORMAT_A8B8G8R8_SSCALED_PACK32: 54, + VK_FORMAT_A8B8G8R8_UINT_PACK32: 55, + VK_FORMAT_A8B8G8R8_SINT_PACK32: 56, + VK_FORMAT_A8B8G8R8_SRGB_PACK32: 57, + VK_FORMAT_A2R10G10B10_UNORM_PACK32: 58, + VK_FORMAT_A2R10G10B10_SNORM_PACK32: 59, + VK_FORMAT_A2R10G10B10_USCALED_PACK32: 60, + VK_FORMAT_A2R10G10B10_SSCALED_PACK32: 61, + VK_FORMAT_A2R10G10B10_UINT_PACK32: 62, + VK_FORMAT_A2R10G10B10_SINT_PACK32: 63, + VK_FORMAT_A2B10G10R10_UNORM_PACK32: 64, + VK_FORMAT_A2B10G10R10_SNORM_PACK32: 65, + VK_FORMAT_A2B10G10R10_USCALED_PACK32: 66, + VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 67, + VK_FORMAT_A2B10G10R10_UINT_PACK32: 68, + VK_FORMAT_A2B10G10R10_SINT_PACK32: 69, + VK_FORMAT_R16_UNORM: 70, + VK_FORMAT_R16_SNORM: 71, + VK_FORMAT_R16_USCALED: 72, + VK_FORMAT_R16_SSCALED: 73, + VK_FORMAT_R16_UINT: 74, + VK_FORMAT_R16_SINT: 75, + VK_FORMAT_R16_SFLOAT: 76, + VK_FORMAT_R16G16_UNORM: 77, + VK_FORMAT_R16G16_SNORM: 78, + VK_FORMAT_R16G16_USCALED: 79, + VK_FORMAT_R16G16_SSCALED: 80, + VK_FORMAT_R16G16_UINT: 81, + VK_FORMAT_R16G16_SINT: 82, + VK_FORMAT_R16G16_SFLOAT: 83, + VK_FORMAT_R16G16B16_UNORM: 84, + VK_FORMAT_R16G16B16_SNORM: 85, + VK_FORMAT_R16G16B16_USCALED: 86, + VK_FORMAT_R16G16B16_SSCALED: 87, + VK_FORMAT_R16G16B16_UINT: 88, + VK_FORMAT_R16G16B16_SINT: 89, + VK_FORMAT_R16G16B16_SFLOAT: 90, + VK_FORMAT_R16G16B16A16_UNORM: 91, + VK_FORMAT_R16G16B16A16_SNORM: 92, + VK_FORMAT_R16G16B16A16_USCALED: 93, + VK_FORMAT_R16G16B16A16_SSCALED: 94, + VK_FORMAT_R16G16B16A16_UINT: 95, + VK_FORMAT_R16G16B16A16_SINT: 96, + VK_FORMAT_R16G16B16A16_SFLOAT: 97, + VK_FORMAT_R32_UINT: 98, + VK_FORMAT_R32_SINT: 99, + VK_FORMAT_R32_SFLOAT: 100, + VK_FORMAT_R32G32_UINT: 101, + VK_FORMAT_R32G32_SINT: 102, + VK_FORMAT_R32G32_SFLOAT: 103, + VK_FORMAT_R32G32B32_UINT: 104, + VK_FORMAT_R32G32B32_SINT: 105, + VK_FORMAT_R32G32B32_SFLOAT: 106, + VK_FORMAT_R32G32B32A32_UINT: 107, + VK_FORMAT_R32G32B32A32_SINT: 108, + VK_FORMAT_R32G32B32A32_SFLOAT: 109, + VK_FORMAT_R64_UINT: 110, + VK_FORMAT_R64_SINT: 111, + VK_FORMAT_R64_SFLOAT: 112, + VK_FORMAT_R64G64_UINT: 113, + VK_FORMAT_R64G64_SINT: 114, + VK_FORMAT_R64G64_SFLOAT: 115, + VK_FORMAT_R64G64B64_UINT: 116, + VK_FORMAT_R64G64B64_SINT: 117, + VK_FORMAT_R64G64B64_SFLOAT: 118, + VK_FORMAT_R64G64B64A64_UINT: 119, + VK_FORMAT_R64G64B64A64_SINT: 120, + VK_FORMAT_R64G64B64A64_SFLOAT: 121, + VK_FORMAT_B10G11R11_UFLOAT_PACK32: 122, + VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 123, + VK_FORMAT_D16_UNORM: 124, + VK_FORMAT_X8_D24_UNORM_PACK32: 125, + VK_FORMAT_D32_SFLOAT: 126, + VK_FORMAT_S8_UINT: 127, + VK_FORMAT_D16_UNORM_S8_UINT: 128, + VK_FORMAT_D24_UNORM_S8_UINT: 129, + VK_FORMAT_D32_SFLOAT_S8_UINT: 130, + VK_FORMAT_BC1_RGB_UNORM_BLOCK: 131, + VK_FORMAT_BC1_RGB_SRGB_BLOCK: 132, + VK_FORMAT_BC1_RGBA_UNORM_BLOCK: 133, + VK_FORMAT_BC1_RGBA_SRGB_BLOCK: 134, + VK_FORMAT_BC2_UNORM_BLOCK: 135, + VK_FORMAT_BC2_SRGB_BLOCK: 136, + VK_FORMAT_BC3_UNORM_BLOCK: 137, + VK_FORMAT_BC3_SRGB_BLOCK: 138, + VK_FORMAT_BC4_UNORM_BLOCK: 139, + VK_FORMAT_BC4_SNORM_BLOCK: 140, + VK_FORMAT_BC5_UNORM_BLOCK: 141, + VK_FORMAT_BC5_SNORM_BLOCK: 142, + VK_FORMAT_BC6H_UFLOAT_BLOCK: 143, + VK_FORMAT_BC6H_SFLOAT_BLOCK: 144, + VK_FORMAT_BC7_UNORM_BLOCK: 145, + VK_FORMAT_BC7_SRGB_BLOCK: 146, + VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: 147, + VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: 148, + VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: 149, + VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: 150, + VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: 151, + VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: 152, + VK_FORMAT_EAC_R11_UNORM_BLOCK: 153, + VK_FORMAT_EAC_R11_SNORM_BLOCK: 154, + VK_FORMAT_EAC_R11G11_UNORM_BLOCK: 155, + VK_FORMAT_EAC_R11G11_SNORM_BLOCK: 156, + VK_FORMAT_ASTC_4x4_UNORM_BLOCK: 157, + VK_FORMAT_ASTC_4x4_SRGB_BLOCK: 158, + VK_FORMAT_ASTC_5x4_UNORM_BLOCK: 159, + VK_FORMAT_ASTC_5x4_SRGB_BLOCK: 160, + VK_FORMAT_ASTC_5x5_UNORM_BLOCK: 161, + VK_FORMAT_ASTC_5x5_SRGB_BLOCK: 162, + VK_FORMAT_ASTC_6x5_UNORM_BLOCK: 163, + VK_FORMAT_ASTC_6x5_SRGB_BLOCK: 164, + VK_FORMAT_ASTC_6x6_UNORM_BLOCK: 165, + VK_FORMAT_ASTC_6x6_SRGB_BLOCK: 166, + VK_FORMAT_ASTC_8x5_UNORM_BLOCK: 167, + VK_FORMAT_ASTC_8x5_SRGB_BLOCK: 168, + VK_FORMAT_ASTC_8x6_UNORM_BLOCK: 169, + VK_FORMAT_ASTC_8x6_SRGB_BLOCK: 170, + VK_FORMAT_ASTC_8x8_UNORM_BLOCK: 171, + VK_FORMAT_ASTC_8x8_SRGB_BLOCK: 172, + VK_FORMAT_ASTC_10x5_UNORM_BLOCK: 173, + VK_FORMAT_ASTC_10x5_SRGB_BLOCK: 174, + VK_FORMAT_ASTC_10x6_UNORM_BLOCK: 175, + VK_FORMAT_ASTC_10x6_SRGB_BLOCK: 176, + VK_FORMAT_ASTC_10x8_UNORM_BLOCK: 177, + VK_FORMAT_ASTC_10x8_SRGB_BLOCK: 178, + VK_FORMAT_ASTC_10x10_UNORM_BLOCK: 179, + VK_FORMAT_ASTC_10x10_SRGB_BLOCK: 180, + VK_FORMAT_ASTC_12x10_UNORM_BLOCK: 181, + VK_FORMAT_ASTC_12x10_SRGB_BLOCK: 182, + VK_FORMAT_ASTC_12x12_UNORM_BLOCK: 183, + VK_FORMAT_ASTC_12x12_SRGB_BLOCK: 184, + VK_FORMAT_G8B8G8R8_422_UNORM: 1000156000, + VK_FORMAT_B8G8R8G8_422_UNORM: 1000156001, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: 1000156002, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: 1000156003, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM: 1000156004, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM: 1000156005, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM: 1000156006, + VK_FORMAT_R10X6_UNORM_PACK16: 1000156007, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16: 1000156008, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16: 1000156009, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16: 1000156010, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16: 1000156011, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16: 1000156012, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: 1000156013, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16: 1000156014, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16: 1000156015, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16: 1000156016, + VK_FORMAT_R12X4_UNORM_PACK16: 1000156017, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16: 1000156018, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16: 1000156019, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16: 1000156020, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16: 1000156021, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16: 1000156022, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16: 1000156023, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16: 1000156024, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16: 1000156025, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16: 1000156026, + VK_FORMAT_G16B16G16R16_422_UNORM: 1000156027, + VK_FORMAT_B16G16R16G16_422_UNORM: 1000156028, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM: 1000156029, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM: 1000156030, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM: 1000156031, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM: 1000156032, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM: 1000156033, + VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG: 1000054000, + VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG: 1000054001, + VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG: 1000054002, + VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG: 1000054003, + VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG: 1000054004, + VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG: 1000054005, + VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG: 1000054006, + VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: 1000054007, + VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT: 1000066000, + VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT: 1000066001, + VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT: 1000066002, + VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT: 1000066003, + VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT: 1000066004, + VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT: 1000066005, + VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT: 1000066006, + VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT: 1000066007, + VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT: 1000066008, + VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT: 1000066009, + VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT: 1000066010, + VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT: 1000066011, + VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT: 1000066012, + VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT: 1000066013, + VK_FORMAT_G8B8G8R8_422_UNORM_KHR: 1000156000, + VK_FORMAT_B8G8R8G8_422_UNORM_KHR: 1000156001, + VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR: 1000156002, + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR: 1000156003, + VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR: 1000156004, + VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR: 1000156005, + VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR: 1000156006, + VK_FORMAT_R10X6_UNORM_PACK16_KHR: 1000156007, + VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR: 1000156008, + VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR: 1000156009, + VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR: 1000156010, + VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR: 1000156011, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR: 1000156012, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR: 1000156013, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR: 1000156014, + VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR: 1000156015, + VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR: 1000156016, + VK_FORMAT_R12X4_UNORM_PACK16_KHR: 1000156017, + VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR: 1000156018, + VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR: 1000156019, + VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR: 1000156020, + VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR: 1000156021, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR: 1000156022, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR: 1000156023, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR: 1000156024, + VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR: 1000156025, + VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR: 1000156026, + VK_FORMAT_G16B16G16R16_422_UNORM_KHR: 1000156027, + VK_FORMAT_B16G16R16G16_422_UNORM_KHR: 1000156028, + VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR: 1000156029, + VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR: 1000156030, + VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR: 1000156031, + VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR: 1000156032, + VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR: 1000156033, +}; +export default Object.freeze(VulkanConstants); diff --git a/Source/Core/getUint64FromDataView.js b/Source/Core/getUint64FromDataView.js new file mode 100644 index 00000000000..562ca5298e0 --- /dev/null +++ b/Source/Core/getUint64FromDataView.js @@ -0,0 +1,34 @@ +/** + * Javascript does not support Uint64, so reading a Uint64 value is not implemented as + * a method for DataViews. UInt64 values can be read up to Number.MAX_SAFE_INTEGER, or (2^53) - 1, + * which is also 9007199254740991. + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView + * for more information. + * + * @function + * @param {DataView} view DataView from which a Uint64 needs to be read. + * @param {Number} byteOffset Byte offset into the DataView at which to read the Uint64. + * @param {Boolean} littleEndian Whether the DataView is big or little endian. + * + * @returns {Number} The uint64 result. + */ +function getUint64FromDataView(view, byteOffset, littleEndian) { + // split 64-bit number into two 32-bit parts + var left = view.getUint32(byteOffset, littleEndian); + var right = view.getUint32(byteOffset + 4, littleEndian); + + // combine the two 32-bit values + var combined = littleEndian + ? left + Math.pow(2, 32) * right + : Math.pow(2, 32) * left + right; + + if (!combined > Number.MAX_SAFE_INTEGER) { + //9007199254740991) { // MAX_SAFE_INTEGER not available in IE11 + console.warn(combined, "exceeds MAX_SAFE_INTEGER. Precision may be lost"); + } + + return combined; +} + +export default getUint64FromDataView; diff --git a/Source/Core/loadCRN.js b/Source/Core/loadCRN.js deleted file mode 100644 index c7676364cc1..00000000000 --- a/Source/Core/loadCRN.js +++ /dev/null @@ -1,90 +0,0 @@ -import when from "../ThirdParty/when.js"; -import CompressedTextureBuffer from "./CompressedTextureBuffer.js"; -import defined from "./defined.js"; -import DeveloperError from "./DeveloperError.js"; -import Resource from "./Resource.js"; -import TaskProcessor from "./TaskProcessor.js"; - -var transcodeTaskProcessor = new TaskProcessor( - "transcodeCRNToDXT", - Number.POSITIVE_INFINITY -); - -/** - * Asynchronously loads and parses the given URL to a CRN file or parses the raw binary data of a CRN file. - * Returns a promise that will resolve to an object containing the image buffer, width, height and format once loaded, - * or reject if the URL failed to load or failed to parse the data. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @function loadCRN - * - * @param {Resource|String|ArrayBuffer} resourceOrUrlOrBuffer The URL of the binary data or an ArrayBuffer. - * @returns {Promise.|undefined} A promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * @exception {RuntimeError} Unsupported compressed format. - * - * @example - * // load a single URL asynchronously - * Cesium.loadCRN('some/url').then(function(textureData) { - * var width = textureData.width; - * var height = textureData.height; - * var format = textureData.internalFormat; - * var arrayBufferView = textureData.bufferView; - * // use the data to create a texture - * }).otherwise(function(error) { - * // an error occurred - * }); - * - * @see {@link https://github.com/BinomialLLC/crunch|crunch DXTc texture compression and transcoding library} - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ -function loadCRN(resourceOrUrlOrBuffer) { - //>>includeStart('debug', pragmas.debug); - if (!defined(resourceOrUrlOrBuffer)) { - throw new DeveloperError("resourceOrUrlOrBuffer is required."); - } - //>>includeEnd('debug'); - - var loadPromise; - if ( - resourceOrUrlOrBuffer instanceof ArrayBuffer || - ArrayBuffer.isView(resourceOrUrlOrBuffer) - ) { - loadPromise = when.resolve(resourceOrUrlOrBuffer); - } else { - var resource = Resource.createIfNeeded(resourceOrUrlOrBuffer); - loadPromise = resource.fetchArrayBuffer(); - } - - if (!defined(loadPromise)) { - return undefined; - } - - return loadPromise - .then(function (data) { - if (!defined(data)) { - return; - } - var transferrableObjects = []; - if (data instanceof ArrayBuffer) { - transferrableObjects.push(data); - } else if ( - data.byteOffset === 0 && - data.byteLength === data.buffer.byteLength - ) { - transferrableObjects.push(data.buffer); - } else { - // data is a view of an array buffer. need to copy so it is transferrable to web worker - data = data.slice(0, data.length); - transferrableObjects.push(data.buffer); - } - - return transcodeTaskProcessor.scheduleTask(data, transferrableObjects); - }) - .then(function (compressedTextureBuffer) { - return CompressedTextureBuffer.clone(compressedTextureBuffer); - }); -} -export default loadCRN; diff --git a/Source/Core/loadKTX.js b/Source/Core/loadKTX.js deleted file mode 100644 index 6fdab8ae14e..00000000000 --- a/Source/Core/loadKTX.js +++ /dev/null @@ -1,274 +0,0 @@ -import when from "../ThirdParty/when.js"; -import Check from "./Check.js"; -import CompressedTextureBuffer from "./CompressedTextureBuffer.js"; -import defined from "./defined.js"; -import PixelFormat from "./PixelFormat.js"; -import Resource from "./Resource.js"; -import RuntimeError from "./RuntimeError.js"; -import WebGLConstants from "./WebGLConstants.js"; - -/** - * Asynchronously loads and parses the given URL to a KTX file or parses the raw binary data of a KTX file. - * Returns a promise that will resolve to an object containing the image buffer, width, height and format once loaded, - * or reject if the URL failed to load or failed to parse the data. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - *

- * The following are part of the KTX format specification but are not supported: - *

- *

- * - * @function loadKTX - * - * @param {Resource|String|ArrayBuffer} resourceOrUrlOrBuffer The URL of the binary data or an ArrayBuffer. - * @returns {Promise.|undefined} A promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * @exception {RuntimeError} Invalid KTX file. - * @exception {RuntimeError} File is the wrong endianness. - * @exception {RuntimeError} glInternalFormat is not a valid format. - * @exception {RuntimeError} glType must be zero when the texture is compressed. - * @exception {RuntimeError} The type size for compressed textures must be 1. - * @exception {RuntimeError} glFormat must be zero when the texture is compressed. - * @exception {RuntimeError} Generating mipmaps for a compressed texture is unsupported. - * @exception {RuntimeError} The base internal format must be the same as the format for uncompressed textures. - * @exception {RuntimeError} 3D textures are not supported. - * @exception {RuntimeError} Texture arrays are not supported. - * @exception {RuntimeError} Cubemaps are not supported. - * - * @example - * // load a single URL asynchronously - * Cesium.loadKTX('some/url').then(function(ktxData) { - * var width = ktxData.width; - * var height = ktxData.height; - * var format = ktxData.internalFormat; - * var arrayBufferView = ktxData.bufferView; - * // use the data to create a texture - * }).otherwise(function(error) { - * // an error occurred - * }); - * - * @see {@link https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/|KTX file format} - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ -function loadKTX(resourceOrUrlOrBuffer) { - //>>includeStart('debug', pragmas.debug); - Check.defined("resourceOrUrlOrBuffer", resourceOrUrlOrBuffer); - //>>includeEnd('debug'); - - var loadPromise; - if ( - resourceOrUrlOrBuffer instanceof ArrayBuffer || - ArrayBuffer.isView(resourceOrUrlOrBuffer) - ) { - loadPromise = when.resolve(resourceOrUrlOrBuffer); - } else { - var resource = Resource.createIfNeeded(resourceOrUrlOrBuffer); - loadPromise = resource.fetchArrayBuffer(); - } - - if (!defined(loadPromise)) { - return undefined; - } - - return loadPromise.then(function (data) { - if (defined(data)) { - return parseKTX(data); - } - }); -} - -var fileIdentifier = [ - 0xab, - 0x4b, - 0x54, - 0x58, - 0x20, - 0x31, - 0x31, - 0xbb, - 0x0d, - 0x0a, - 0x1a, - 0x0a, -]; -var endiannessTest = 0x04030201; -var faceOrder = [ - "positiveX", - "negativeX", - "positiveY", - "negativeY", - "positiveZ", - "negativeZ", -]; - -var sizeOfUint32 = 4; - -function parseKTX(data) { - var byteBuffer = new Uint8Array(data); - - var isKTX = true; - var i; - for (i = 0; i < fileIdentifier.length; ++i) { - if (fileIdentifier[i] !== byteBuffer[i]) { - isKTX = false; - break; - } - } - - if (!isKTX) { - throw new RuntimeError("Invalid KTX file."); - } - - var view; - var byteOffset; - - if (defined(data.buffer)) { - view = new DataView(data.buffer); - byteOffset = data.byteOffset; - } else { - view = new DataView(data); - byteOffset = 0; - } - - byteOffset += 12; // skip identifier - - var endianness = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - if (endianness !== endiannessTest) { - throw new RuntimeError("File is the wrong endianness."); - } - - var glType = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var glTypeSize = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var glFormat = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var glInternalFormat = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var glBaseInternalFormat = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var pixelWidth = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var pixelHeight = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var pixelDepth = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var numberOfArrayElements = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var numberOfFaces = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var numberOfMipmapLevels = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - var bytesOfKeyValueByteSize = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - - // skip metadata - byteOffset += bytesOfKeyValueByteSize; - - var imageSize = view.getUint32(byteOffset, true); - byteOffset += sizeOfUint32; - - var texture; - if (defined(data.buffer)) { - texture = new Uint8Array(data.buffer, byteOffset, imageSize); - } else { - texture = new Uint8Array(data, byteOffset, imageSize); - } - - // Some tools use a sized internal format. - // See table 2: https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml - if (glInternalFormat === WebGLConstants.RGB8) { - glInternalFormat = PixelFormat.RGB; - } else if (glInternalFormat === WebGLConstants.RGBA8) { - glInternalFormat = PixelFormat.RGBA; - } - - if (!PixelFormat.validate(glInternalFormat)) { - throw new RuntimeError("glInternalFormat is not a valid format."); - } - - if (PixelFormat.isCompressedFormat(glInternalFormat)) { - if (glType !== 0) { - throw new RuntimeError( - "glType must be zero when the texture is compressed." - ); - } - if (glTypeSize !== 1) { - throw new RuntimeError( - "The type size for compressed textures must be 1." - ); - } - if (glFormat !== 0) { - throw new RuntimeError( - "glFormat must be zero when the texture is compressed." - ); - } - } else if (glType !== WebGLConstants.UNSIGNED_BYTE) { - throw new RuntimeError("Only unsigned byte buffers are supported."); - } else if (glBaseInternalFormat !== glFormat) { - throw new RuntimeError( - "The base internal format must be the same as the format for uncompressed textures." - ); - } - - if (pixelDepth !== 0) { - throw new RuntimeError("3D textures are unsupported."); - } - - if (numberOfArrayElements !== 0) { - throw new RuntimeError("Texture arrays are unsupported."); - } - - var offset = texture.byteOffset; - var mipmaps = new Array(numberOfMipmapLevels); - for (i = 0; i < numberOfMipmapLevels; ++i) { - var level = (mipmaps[i] = {}); - for (var j = 0; j < numberOfFaces; ++j) { - var width = pixelWidth >> i; - var height = pixelHeight >> i; - var levelSize = PixelFormat.isCompressedFormat(glInternalFormat) - ? PixelFormat.compressedTextureSizeInBytes( - glInternalFormat, - width, - height - ) - : PixelFormat.textureSizeInBytes( - glInternalFormat, - glType, - width, - height - ); - var levelBuffer = new Uint8Array(texture.buffer, offset, levelSize); - level[faceOrder[j]] = new CompressedTextureBuffer( - glInternalFormat, - width, - height, - levelBuffer - ); - offset += levelSize; - } - offset += 3 - ((offset + 3) % 4) + 4; - } - - var result = mipmaps; - if (numberOfFaces === 1) { - for (i = 0; i < numberOfMipmapLevels; ++i) { - result[i] = result[i][faceOrder[0]]; - } - } - if (numberOfMipmapLevels === 1) { - result = result[0]; - } - - return result; -} -export default loadKTX; diff --git a/Source/Core/loadKTX2.js b/Source/Core/loadKTX2.js new file mode 100644 index 00000000000..f3b36db1a0d --- /dev/null +++ b/Source/Core/loadKTX2.js @@ -0,0 +1,110 @@ +import arraySlice from "./arraySlice.js"; +import Check from "./Check.js"; +import defined from "./defined.js"; +import Resource from "./Resource.js"; +import RuntimeError from "./RuntimeError.js"; +import KTX2Transcoder from "../Scene/KTX2Transcoder.js"; +import when from "../ThirdParty/when.js"; + +/** + * Stores the supported formats that KTX2 can transcode to. Called during context creation. + * + * @param {Boolean} etc1 Whether or not ETC1 is supported + * @param {Boolean} s3tc Whether or not S3TC is supported + * @param {Boolean} pvrtc Whether or not PVRTC is supported + * @private + * */ +var supportedTranscoderFormats; + +loadKTX2.setKTX2SupportedFormats = function (etc1, s3tc, pvrtc) { + supportedTranscoderFormats = { + etc1: etc1, + s3tc: s3tc, + pvrtc: pvrtc, + }; +}; + +/** + * Asynchronously loads and parses the given URL to a KTX2 file or parses the raw binary data of a KTX2 file. + * Returns a promise that will resolve to an object containing the image buffer, width, height and format once loaded, + * or reject if the URL failed to load or failed to parse the data. The data is loaded + * using XMLHttpRequest, which means that in order to make requests to another origin, + * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. + *

+ * The following are part of the KTX2 format specification but are not supported: + *

+ *

+ * + * @exports loadKTX2 + * + * @param {Resource|String|ArrayBuffer} resourceOrUrlOrBuffer The URL of the binary data or an ArrayBuffer. + * @returns {Promise.|undefined} A promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. + * + * @exception {RuntimeError} Invalid KTX2 file. + * @exception {RuntimeError} File is the wrong endianness. + * @exception {RuntimeError} glInternalFormat is not a valid format. + * @exception {RuntimeError} glType must be zero when the texture is compressed. + * @exception {RuntimeError} The type size for compressed textures must be 1. + * @exception {RuntimeError} glFormat must be zero when the texture is compressed. + * @exception {RuntimeError} Generating mipmaps for a compressed texture is unsupported. + * @exception {RuntimeError} The base internal format must be the same as the format for uncompressed textures. + * @exception {RuntimeError} 3D textures are not supported. + * @exception {RuntimeError} Texture arrays are not supported. + * @exception {RuntimeError} Cubemaps are not supported. + * + * @example + * // load a single URL asynchronously + * Cesium.loadKTX2('some/url').then(function(ktx2Data) { + * var width = ktx2Data.width; + * var height = ktx2Data.height; + * var format = ktx2Data.internalFormat; + * var arrayBufferView = ktx2Data.bufferView; + * // use the data to create a texture + * }).otherwise(function(error) { + * // an error occurred + * }); + * + * @see {@link hhttp://github.khronos.org/KTX-Specification/|KTX file format} + * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} + * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} + * @private + */ +function loadKTX2(resourceOrUrlOrBuffer) { + //>>includeStart('debug', pragmas.debug); + Check.defined("resourceOrUrlOrBuffer", resourceOrUrlOrBuffer); + //>>includeEnd('debug'); + + var loadPromise; + if ( + resourceOrUrlOrBuffer instanceof ArrayBuffer || + ArrayBuffer.isView(resourceOrUrlOrBuffer) + ) { + loadPromise = when.resolve(resourceOrUrlOrBuffer); + } else { + var resource = Resource.createIfNeeded(resourceOrUrlOrBuffer); + loadPromise = resource.fetchArrayBuffer(); + } + + if (!defined(loadPromise)) { + return undefined; + } + + // load module then return + return loadPromise.then(function (data) { + if (defined(data)) { + // data array can be a view of a shared buffer, + // so make a copy that can be given to the worker. + var copy = arraySlice(data); + return KTX2Transcoder.transcode(copy, supportedTranscoderFormats); + } + return when.reject(new RuntimeError("failed to load KTX2 data.")); + }); +} + +export default loadKTX2; diff --git a/Source/Renderer/Context.js b/Source/Renderer/Context.js index fff292a24b7..d37b1d4b558 100644 --- a/Source/Renderer/Context.js +++ b/Source/Renderer/Context.js @@ -18,6 +18,7 @@ import ViewportQuadVS from "../Shaders/ViewportQuadVS.js"; import BufferUsage from "./BufferUsage.js"; import ClearCommand from "./ClearCommand.js"; import ContextLimits from "./ContextLimits.js"; +import loadKTX2 from "../Core/loadKTX2.js"; import CubeMap from "./CubeMap.js"; import DrawCommand from "./DrawCommand.js"; import PassState from "./PassState.js"; @@ -315,6 +316,7 @@ function Context(canvas, options) { "WEBKIT_WEBGL_compressed_texture_pvrtc", ]); this._etc1 = !!getExtension(gl, ["WEBGL_compressed_texture_etc1"]); + loadKTX2.setKTX2SupportedFormats(this._etc1, this._s3tc, this._pvrtc); var textureFilterAnisotropic = options.allowTextureFilterAnisotropic ? getExtension(gl, [ diff --git a/Source/Scene/ImageryProvider.js b/Source/Scene/ImageryProvider.js index 616bcbcbe8f..cbbdbc1b9fc 100644 --- a/Source/Scene/ImageryProvider.js +++ b/Source/Scene/ImageryProvider.js @@ -1,8 +1,7 @@ import Check from "../Core/Check.js"; import defined from "../Core/defined.js"; import DeveloperError from "../Core/DeveloperError.js"; -import loadCRN from "../Core/loadCRN.js"; -import loadKTX from "../Core/loadKTX.js"; +import loadKTX2 from "../Core/loadKTX2.js"; import Resource from "../Core/Resource.js"; /** @@ -336,8 +335,7 @@ ImageryProvider.prototype.pickFeatures = function ( DeveloperError.throwInstantiationError(); }; -var ktxRegex = /\.ktx$/i; -var crnRegex = /\.crn$/i; +var ktx2Regex = /\.ktx2$/i; /** * Loads an image from a given URL. If the server referenced by the URL already has @@ -358,10 +356,8 @@ ImageryProvider.loadImage = function (imageryProvider, url) { var resource = Resource.createIfNeeded(url); - if (ktxRegex.test(resource.url)) { - return loadKTX(resource); - } else if (crnRegex.test(resource.url)) { - return loadCRN(resource); + if (ktx2Regex.test(resource.url)) { + return loadKTX2(resource); } else if ( defined(imageryProvider) && defined(imageryProvider.tileDiscardPolicy) diff --git a/Source/Scene/KTX2Transcoder.js b/Source/Scene/KTX2Transcoder.js new file mode 100644 index 00000000000..0e8f9f047ed --- /dev/null +++ b/Source/Scene/KTX2Transcoder.js @@ -0,0 +1,78 @@ +import CompressedTextureBuffer from "../Core/CompressedTextureBuffer.js"; +import defined from "../Core/defined.js"; +import TaskProcessor from "../Core/TaskProcessor.js"; + +/** + * Transcodes KTX2 textures using web workers. + * + * @private + */ +function KTX2Transcoder() {} + +KTX2Transcoder._transcodeTaskProcessor = new TaskProcessor( + "transcodeKTX2", + Number.POSITIVE_INFINITY // KTX2 transcoding is used in place of Resource.fetchImage, so it can't reject as "just soooo busy right now" +); + +KTX2Transcoder._readyPromise = undefined; + +function makeReadyPromise() { + var readyPromise = KTX2Transcoder._transcodeTaskProcessor + .initWebAssemblyModule({ + modulePath: "ThirdParty/Workers/msc_basis_transcoder_wrapper.js", + wasmBinaryFile: "ThirdParty/msc_basis_transcoder.wasm", + fallbackModulePath: "ThirdParty/Workers/msc_basis_transcoder.js", + }) + .then(function () { + return KTX2Transcoder._transcodeTaskProcessor; + }); + KTX2Transcoder._readyPromise = readyPromise; +} + +KTX2Transcoder.transcode = function (ktx2Buffer, supportedTargetFormats) { + if (!defined(KTX2Transcoder._readyPromise)) { + makeReadyPromise(); + } + + return KTX2Transcoder._readyPromise + .then(function (taskProcessor) { + var parameters = { + supportedTargetFormats: supportedTargetFormats, + ktx2Buffer: ktx2Buffer, + }; + return taskProcessor.scheduleTask(parameters, [ktx2Buffer.buffer]); + }) + .then(function (result) { + var levelsLength = result.length; + var faceKeys = Object.keys(result[0]); + var faceKeysLength = faceKeys.length; + + var i; + for (i = 0; i < levelsLength; i++) { + var faces = result[i]; + for (var j = 0; j < faceKeysLength; j++) { + var face = faces[faceKeys[j]]; + faces[faceKeys[j]] = new CompressedTextureBuffer( + face.internalFormat, + face.width, + face.height, + face.levelBuffer + ); + } + } + + // Cleaning up parsed result if it's a single image + if (faceKeysLength === 1) { + for (i = 0; i < levelsLength; ++i) { + result[i] = result[i][faceKeys[0]]; + } + + if (levelsLength === 1) { + result = result[0]; + } + } + return result; + }); +}; + +export default KTX2Transcoder; diff --git a/Source/Scene/Material.js b/Source/Scene/Material.js index 4b882b71ce4..ecc536e8394 100644 --- a/Source/Scene/Material.js +++ b/Source/Scene/Material.js @@ -7,8 +7,7 @@ import defaultValue from "../Core/defaultValue.js"; import defined from "../Core/defined.js"; import destroyObject from "../Core/destroyObject.js"; import DeveloperError from "../Core/DeveloperError.js"; -import loadCRN from "../Core/loadCRN.js"; -import loadKTX from "../Core/loadKTX.js"; +import loadKTX2 from "../Core/loadKTX2.js"; import Matrix2 from "../Core/Matrix2.js"; import Matrix3 from "../Core/Matrix3.js"; import Matrix4 from "../Core/Matrix4.js"; @@ -771,8 +770,7 @@ var matrixMap = { mat4: Matrix4, }; -var ktxRegex = /\.ktx$/i; -var crnRegex = /\.crn$/i; +var ktx2Regex = /\.ktx2$/i; function createTexture2DUpdateFunction(uniformId) { var oldUniformValue; @@ -872,13 +870,12 @@ function createTexture2DUpdateFunction(uniformId) { : Resource.createIfNeeded(uniformValue); var promise; - if (ktxRegex.test(resource.url)) { - promise = loadKTX(resource); - } else if (crnRegex.test(resource.url)) { - promise = loadCRN(resource); + if (ktx2Regex.test(resource.url)) { + promise = loadKTX2(resource.url); } else { promise = resource.fetchImage(); } + when(promise, function (image) { material._loadedImages.push({ id: uniformId, diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index f337048d58c..cf1fa2fe12d 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -19,9 +19,8 @@ import getAbsoluteUri from "../Core/getAbsoluteUri.js"; import getMagic from "../Core/getMagic.js"; import getStringFromTypedArray from "../Core/getStringFromTypedArray.js"; import IndexDatatype from "../Core/IndexDatatype.js"; -import loadCRN from "../Core/loadCRN.js"; import loadImageFromTypedArray from "../Core/loadImageFromTypedArray.js"; -import loadKTX from "../Core/loadKTX.js"; +import loadKTX2 from "../Core/loadKTX2.js"; import CesiumMath from "../Core/Math.js"; import Matrix3 from "../Core/Matrix3.js"; import Matrix4 from "../Core/Matrix4.js"; @@ -173,6 +172,8 @@ var uriToGuid = {}; * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_techniques_webgl/README.md|KHR_techniques_webgl} *
  • * {@link https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_texture_transform/README.md|KHR_texture_transform} + *
  • + * {@link https://github.com/KhronosGroup/glTF/pull/1751|KHR_texture_basisu} *
  • * *

    @@ -1906,6 +1907,16 @@ function imageLoad(model, textureId) { return function (image) { var loadResources = model._loadResources; --loadResources.pendingTextureLoads; + + // Images transcoded from KTX2 can contain multiple mip levels: + // https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu + var mipLevels; + if (Array.isArray(image)) { + // hightest detail mip should be level 0 + mipLevels = image.slice(1, image.length); + image = image[0]; + } + loadResources.texturesToCreate.enqueue({ id: textureId, image: image, @@ -1913,14 +1924,14 @@ function imageLoad(model, textureId) { width: image.width, height: image.height, internalFormat: image.internalFormat, + mipLevels: mipLevels, }); }; } -var ktxRegex = /(^data:image\/ktx)|(\.ktx$)/i; -var crnRegex = /(^data:image\/crn)|(\.crn$)/i; +var ktx2Regex = /(^data:image\/ktx2)|(\.ktx2$)/i; -function parseTextures(model, context, supportsWebP) { +function parseTextures(model, context, supportsWebP, supportsBasis) { var gltf = model.gltf; var images = gltf.images; var uri; @@ -1933,53 +1944,20 @@ function parseTextures(model, context, supportsWebP) { supportsWebP ) { imageId = texture.extensions.EXT_texture_webp.source; + } else if ( + defined(texture.extensions) && + defined(texture.extensions.KHR_texture_basisu) && + FeatureDetection.supportsBasis + ) { + imageId = texture.extensions.KHR_texture_basisu.source; } var gltfImage = images[imageId]; - var extras = gltfImage.extras; var bufferViewId = gltfImage.bufferView; var mimeType = gltfImage.mimeType; uri = gltfImage.uri; - // First check for a compressed texture - if (defined(extras) && defined(extras.compressedImage3DTiles)) { - var crunch = extras.compressedImage3DTiles.crunch; - var s3tc = extras.compressedImage3DTiles.s3tc; - var pvrtc = extras.compressedImage3DTiles.pvrtc1; - var etc1 = extras.compressedImage3DTiles.etc1; - - if (context.s3tc && defined(crunch)) { - mimeType = crunch.mimeType; - if (defined(crunch.bufferView)) { - bufferViewId = crunch.bufferView; - } else { - uri = crunch.uri; - } - } else if (context.s3tc && defined(s3tc)) { - mimeType = s3tc.mimeType; - if (defined(s3tc.bufferView)) { - bufferViewId = s3tc.bufferView; - } else { - uri = s3tc.uri; - } - } else if (context.pvrtc && defined(pvrtc)) { - mimeType = pvrtc.mimeType; - if (defined(pvrtc.bufferView)) { - bufferViewId = pvrtc.bufferView; - } else { - uri = pvrtc.uri; - } - } else if (context.etc1 && defined(etc1)) { - mimeType = etc1.mimeType; - if (defined(etc1.bufferView)) { - bufferViewId = etc1.bufferView; - } else { - uri = etc1.uri; - } - } - } - // Image references either uri (external or base64-encoded) or bufferView if (defined(bufferViewId)) { model._loadResources.texturesToCreateFromBufferView.enqueue({ @@ -1996,10 +1974,8 @@ function parseTextures(model, context, supportsWebP) { }); var promise; - if (ktxRegex.test(uri)) { - promise = loadKTX(imageResource); - } else if (crnRegex.test(uri)) { - promise = loadCRN(imageResource); + if (ktx2Regex.test(uri)) { + promise = loadKTX2(imageResource); } else { promise = imageResource.fetchImage(); } @@ -2753,13 +2729,8 @@ function loadTexturesFromBufferViews(model) { "id: " + gltfTexture.id + ", bufferView: " + gltfTexture.bufferView ); - if (gltfTexture.mimeType === "image/ktx") { - loadKTX(loadResources.getBuffer(bufferView)) - .then(imageLoad(model, gltfTexture.id, imageId)) - .otherwise(onerror); - ++model._loadResources.pendingTextureLoads; - } else if (gltfTexture.mimeType === "image/crn") { - loadCRN(loadResources.getBuffer(bufferView)) + if (gltfTexture.mimeType === "image/ktx2") { + loadKTX2(loadResources.getBuffer(bufferView)) .then(imageLoad(model, gltfTexture.id, imageId)) .otherwise(onerror); ++model._loadResources.pendingTextureLoads; @@ -2915,6 +2886,7 @@ function createTexture(gltfTexture, model, context) { height: gltfTexture.height, pixelFormat: internalFormat, sampler: sampler, + mipLevels: gltfTexture.mipLevels, }); } else if (defined(source)) { var npot = @@ -5091,11 +5063,13 @@ Model.prototype.update = function (frameState) { FeatureDetection.supportsWebP.initialize(); return; } - var supportsWebP = FeatureDetection.supportsWebP(); var context = frameState.context; this._defaultTexture = context.defaultTexture; + var supportsWebP = FeatureDetection.supportsWebP(); + var supportsBasis = FeatureDetection.supportsBasis(context); + if (this._state === ModelState.NEEDS_LOAD && defined(this.gltf)) { // Use renderer resources from cache instead of loading/creating them? var cachedRendererResources; @@ -5226,7 +5200,7 @@ Model.prototype.update = function (frameState) { parseBufferViews(this); parseShaders(this); parsePrograms(this); - parseTextures(this, context, supportsWebP); + parseTextures(this, context, supportsWebP, supportsBasis); } parseMaterials(this); parseMeshes(this); diff --git a/Source/Scene/ModelUtility.js b/Source/Scene/ModelUtility.js index 44103a7c187..068c6320e54 100644 --- a/Source/Scene/ModelUtility.js +++ b/Source/Scene/ModelUtility.js @@ -558,6 +558,7 @@ ModelUtility.supportedExtensions = { EXT_texture_webp: true, KHR_blend: true, KHR_binary_glTF: true, + KHR_texture_basisu: true, KHR_draco_mesh_compression: true, KHR_materials_common: true, KHR_techniques_webgl: true, diff --git a/Source/Scene/OctahedralProjectedCubeMap.js b/Source/Scene/OctahedralProjectedCubeMap.js index 1de61027cc7..9b62abdab98 100644 --- a/Source/Scene/OctahedralProjectedCubeMap.js +++ b/Source/Scene/OctahedralProjectedCubeMap.js @@ -3,7 +3,7 @@ import ComponentDatatype from "../Core/ComponentDatatype.js"; import defined from "../Core/defined.js"; import destroyObject from "../Core/destroyObject.js"; import IndexDatatype from "../Core/IndexDatatype.js"; -import loadKTX from "../Core/loadKTX.js"; +import loadKTX2 from "../Core/loadKTX2.js"; import PixelFormat from "../Core/PixelFormat.js"; import Buffer from "../Renderer/Buffer.js"; import BufferUsage from "../Renderer/BufferUsage.js"; @@ -290,7 +290,7 @@ OctahedralProjectedCubeMap.prototype.update = function (frameState) { var cubeMapBuffers = this._cubeMapBuffers; if (!defined(cubeMapBuffers) && !this._loading) { var that = this; - loadKTX(this._url) + loadKTX2(this._url) .then(function (buffers) { that._cubeMapBuffers = buffers; that._loading = false; diff --git a/Source/Scene/parseKTX2.js b/Source/Scene/parseKTX2.js new file mode 100644 index 00000000000..02225904381 --- /dev/null +++ b/Source/Scene/parseKTX2.js @@ -0,0 +1,398 @@ +import arraySlice from "../Core/arraySlice.js"; +import defined from "../Core/defined.js"; +import getUint64FromDataView from "../Core/getUint64FromDataView.js"; +import PixelFormat from "../Core/PixelFormat.js"; +import RuntimeError from "../Core/RuntimeError.js"; +import VulkanConstants from "../Core/VulkanConstants.js"; +import WebGLConstants from "../Core/WebGLConstants.js"; + +var fileIdentifier = [ + 0xab, // '«' + 0x4b, // 'K' + 0x54, // 'T' + 0x58, // 'X' + 0x20, // ' ' + 0x32, // '2' + 0x30, // '0' + 0xbb, // '»' + 0x0d, // '\r' + 0x0a, // '\n' + 0x1a, // '\x1A' + 0x0a, // '\n' +]; + +var faceOrder = [ + "positiveX", + "negativeX", + "positiveY", + "negativeY", + "positiveZ", + "negativeZ", +]; + +// For iteration +var sizeOfUint8 = 1; +var sizeOfUint16 = 2; +var sizeOfUint32 = 4; +var sizeOfUint64 = 8; + +// // Flags +var colorModelETC1S = 163; +var colorModelUASTC = 166; + +/** + * Parses and transcodes KTX2 buffers to an appropriate target format. + * + * @param {Uint8Array} data Data representing one KTX2 texture. + * @param {Object} supportedTargetFormats Target formats available on the current system. + * @param {Object} transcoderModule msc_basis_transcoder object. + * + * @private + */ +function parseKTX2(data, supportedTargetFormats, transcoderModule) { + var byteBuffer = new Uint8Array(data); + + if (!defined(supportedTargetFormats)) { + throw new RuntimeError( + "KTX2 Loader does not know which GPU formats are supported." + ); + } + + var isKTX2 = true; + var i; + for (i = 0; i < fileIdentifier.length; ++i) { + if (fileIdentifier[i] !== byteBuffer[i]) { + isKTX2 = false; + break; + } + } + + if (!isKTX2) { + throw new RuntimeError("Invalid KTX2 file."); + } + + var view; + var byteOffset; + + if (defined(data.buffer)) { + view = new DataView(data.buffer); + byteOffset = data.byteOffset; + } else { + view = new DataView(data); + byteOffset = 0; + } + + byteOffset += 12; // skip identifier + + // Header + var header = { + vkFormat: view.getUint32(byteOffset, true), + typeSize: view.getUint32((byteOffset += sizeOfUint32), true), + pixelWidth: view.getUint32((byteOffset += sizeOfUint32), true), + pixelHeight: view.getUint32((byteOffset += sizeOfUint32), true), + pixelDepth: view.getUint32((byteOffset += sizeOfUint32), true), + layerCount: view.getUint32((byteOffset += sizeOfUint32), true), + faceCount: view.getUint32((byteOffset += sizeOfUint32), true), + levelCount: view.getUint32((byteOffset += sizeOfUint32), true), + supercompressionScheme: view.getUint32((byteOffset += sizeOfUint32), true), + }; + byteOffset += sizeOfUint32; + + // Index + var dfdByteOffset = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + // var dfdByteLength = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + // var kvdByteOffset = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + // var kvdByteLength = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + var sgdByteOffset = getUint64FromDataView(view, byteOffset, true); + byteOffset += sizeOfUint64; + var sgdByteLength = getUint64FromDataView(view, byteOffset, true); + byteOffset += sizeOfUint64; + var sgdIndex = { + byteOffset: sgdByteOffset, + byteLength: sgdByteLength, + }; + + // 2 -- Level Index + var levelIndex = []; + for (var l = 0; l < header.levelCount; l++) { + var levelByteOffset = getUint64FromDataView(view, byteOffset, true); + byteOffset += sizeOfUint64; + var levelByteLength = getUint64FromDataView(view, byteOffset, true); + byteOffset += sizeOfUint64; + var levelUncompressedByteLength = getUint64FromDataView( + view, + byteOffset, + true + ); + byteOffset += sizeOfUint64; + + levelIndex.push({ + byteOffset: levelByteOffset, + byteLength: levelByteLength, + uncompressedByteLength: levelUncompressedByteLength, + }); + } + + // 3 -- Data Format Descriptors (DFD) + // http://github.khronos.org/KTX-Specification/#_dfd_for_supercompressed_data + byteOffset = defined(data.buffer) + ? data.byteOffset + dfdByteOffset + : dfdByteOffset; + var dfd = { + totalSize: view.getUint32(byteOffset, true), + vendorId: view.getUint16((byteOffset += sizeOfUint32), true), // Should be reading 'UInt17', but it's zero anyway for KTX2 + descriptorType: view.getUint16((byteOffset += sizeOfUint16 + 1), true), + versionNumber: view.getUint16((byteOffset += sizeOfUint16 - 1), true), + descriptorBlockSize: view.getUint16((byteOffset += sizeOfUint16), true), + colorModel: view.getUint8((byteOffset += sizeOfUint16), true), + colorPrimaries: view.getUint8((byteOffset += sizeOfUint8), true), + transferFunction: view.getUint8((byteOffset += sizeOfUint8), true), + flags: view.getUint8((byteOffset += sizeOfUint8), true), + texelBlockDimension: { + x: view.getUint8((byteOffset += sizeOfUint8), true) + 1, + y: view.getUint8((byteOffset += sizeOfUint8), true) + 1, + z: view.getUint8((byteOffset += sizeOfUint8), true) + 1, + w: view.getUint8((byteOffset += sizeOfUint8), true) + 1, + }, + bytesPlane0: view.getUint8((byteOffset += sizeOfUint8), true), + numSamples: 0, + samples: [], + }; + + // Get Texture Based on Format + var result = new Array(header.levelCount); + if ( + header.vkFormat === VulkanConstants.VK_FORMAT_R8G8B8_SRGB || + header.vkFormat === VulkanConstants.VK_FORMAT_R8G8B8A8_SRGB || + header.vkFormat === VulkanConstants.VK_FORMAT_B10G11R11_UFLOAT_PACK32 + ) { + parseUncompressed(data, header, levelIndex, result); + } else if (header.vkFormat === 0x0 && dfd.colorModel === colorModelETC1S) { + // Compressed, initialize transcoder module + transcodeEtc1s( + data, + view, + header, + levelIndex, + sgdIndex, + supportedTargetFormats, + transcoderModule, + result + ); + } else if (header.vkFormat === 0x0 && dfd.colorModel === colorModelUASTC) { + throw new RuntimeError("UASTC Basis Encoding not yet supported"); + } else { + throw new RuntimeError("KTX2 pixel format is not yet supported."); + } + + if (header.layerCount !== 0) { + throw new RuntimeError("KTX2 Videos are not supported"); + } + + if (header.pixelDepth !== 0) { + throw new RuntimeError("KTX2 3D textures are unsupported."); + } + + //// Cleaning up parsed result if it's a single image + //if (header.faceCount === 1) { + // debugger; + // for (i = 0; i < header.levelCount; ++i) { + // result[i] = result[i][faceOrder[0]]; + // } + + // if (header.levelCount === 1) { + // result = result[0]; + // } + //} + + return result; +} + +// Parser for uncompressed +function parseUncompressed(data, header, levelIndex, result) { + var internalFormat = + header.vkFormat === VulkanConstants.VK_FORMAT_R8G8B8A8_SRGB + ? PixelFormat.RGBA + : PixelFormat.RGB; + internalFormat = + header.vkFormat === VulkanConstants.VK_FORMAT_B10G11R11_UFLOAT_PACK32 + ? WebGLConstants.R11F_G11F_B10F + : internalFormat; + var dataBuffer = defined(data.buffer) ? data.buffer : data; + + for (var i = 0; i < levelIndex.length; ++i) { + var level = (result[i] = {}); + var levelInfo = levelIndex[i]; + + for (var j = 0; j < header.faceCount; ++j) { + var width = header.pixelWidth >> i; + var height = header.pixelHeight >> i; + // var levelLength = levelInfo.byteLength; + var faceLength = + header.typeSize * + width * + height * + PixelFormat.componentsLength(internalFormat); + var levelOffset = levelInfo.byteOffset + faceLength * j; + var levelBuffer = new Uint8Array(dataBuffer, levelOffset, faceLength); + + level[faceOrder[j]] = { + internalFormat: internalFormat, + width: width, + height: height, + levelBuffer: levelBuffer, + }; + } + } +} + +function transcodeEtc1s( + data, + view, + header, + levelIndex, + sgdIndex, + supportedTargetFormats, + transcoderModule, + result +) { + var ktx2Offset = defined(data.buffer) ? data.byteOffset : 0; + var byteOffset = ktx2Offset + sgdIndex.byteOffset; + var isVideo = header.layerCount !== 0; // Should be false until video support is added + + // Read rest of SGD data + var endpointCount = view.getUint16(byteOffset, true); + byteOffset += sizeOfUint16; + var selectorCount = view.getUint16(byteOffset, true); + byteOffset += sizeOfUint16; + var endpointsByteLength = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + var selectorsByteLength = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + var tablesByteLength = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + var extendedByteLength = view.getUint32(byteOffset, true); + byteOffset += sizeOfUint32; + + var imageDescs = []; + for (var imDescs = 0; imDescs < header.levelCount; ++imDescs) { + imageDescs.push({ + imageFlags: view.getUint32(byteOffset, true), + rgbSliceByteOffset: view.getUint32((byteOffset += sizeOfUint32), true), + rgbSliceByteLength: view.getUint32((byteOffset += sizeOfUint32), true), + alphaSliceByteOffset: view.getUint32((byteOffset += sizeOfUint32), true), + alphaSliceByteLength: view.getUint32((byteOffset += sizeOfUint32), true), + }); + byteOffset += sizeOfUint32; + } + + var hasAlphaSlices = imageDescs[0].alphaSliceByteLength > 0; + + // Determine target format based on platform support + var internalFormat, transcoderFormat; + var TranscodeTarget = transcoderModule.TranscodeTarget; + if (supportedTargetFormats.etc1 && !hasAlphaSlices) { + internalFormat = PixelFormat.RGB_ETC1; + transcoderFormat = TranscodeTarget.ETC1_RGB; + } else if (supportedTargetFormats.s3tc) { + internalFormat = hasAlphaSlices + ? PixelFormat.RGBA_DXT5 + : PixelFormat.RGB_DXT1; + transcoderFormat = hasAlphaSlices + ? TranscodeTarget.BC3_RGBA + : TranscodeTarget.BC1_RGB; + } else if (supportedTargetFormats.pvrtc) { + internalFormat = hasAlphaSlices + ? PixelFormat.RGBA_PVRTC_4BPPV1 + : PixelFormat.RGB_PVRTC_4BPPV1; + transcoderFormat = hasAlphaSlices + ? TranscodeTarget.PVRTC1_4_RGBA + : TranscodeTarget.PVRTC1_4_RGB; + } else { + throw new RuntimeError("No transcoding format target available"); + } + + var dataBuffer = defined(data.buffer) ? data.buffer : data; + var endpoints = new Uint8Array(dataBuffer, byteOffset, endpointsByteLength); + byteOffset += endpointsByteLength; + var selectors = new Uint8Array(dataBuffer, byteOffset, selectorsByteLength); + byteOffset += selectorsByteLength; + + var transcoder = new transcoderModule.BasisLzEtc1sImageTranscoder(); + + transcoder.decodePalettes(endpointCount, endpoints, selectorCount, selectors); + + var tables = new Uint8Array(dataBuffer, byteOffset, tablesByteLength); + byteOffset += tablesByteLength; + // var extendedByte = new Uint8Array(data, byteOffset, extendedByteLength); + byteOffset += extendedByteLength; + transcoder.decodeTables(tables); + + for (var i = 0; i < levelIndex.length; ++i) { + var level = (result[i] = {}); + var levelInfo = levelIndex[i]; + var imageDesc = imageDescs[i]; + + for (var j = 0; j < header.faceCount; ++j) { + var width = header.pixelWidth >> i; + var height = header.pixelHeight >> i; + var levelOffset = ktx2Offset + levelInfo.byteOffset; + + var levelData = new Uint8Array( + dataBuffer, + levelOffset + imageDesc.rgbSliceByteOffset, + imageDesc.rgbSliceByteLength + imageDesc.alphaSliceByteLength + ); + + var imageInfo = new transcoderModule.ImageInfo( + transcoderModule.TextureFormat.ETC1S, + width, + height, + i + ); + imageInfo.flags = imageDesc.imageFlags; + imageInfo.rgbByteOffset = 0; + imageInfo.rgbByteLength = imageDesc.rgbSliceByteLength; + imageInfo.alphaByteOffset = + imageDesc.alphaSliceByteOffset > 0 ? imageDesc.rgbSliceByteLength : 0; + imageInfo.alphaByteLength = imageDesc.alphaSliceByteLength; + + var transcoded = transcoder.transcodeImage( + transcoderFormat, + levelData, + imageInfo, + 0, + isVideo + ); + + // Check Error Here + if (transcoded.transcodedImage === undefined) { + throw new RuntimeError("Error transcoding Image"); + } + + // Create a copy and delete transcoder wasm allocated memory + //var levelBuffer = transcoded.transcodedImage + // .get_typed_memory_view() + // .slice(); + var levelBuffer = arraySlice( + transcoded.transcodedImage.get_typed_memory_view() + ); + transcoded.transcodedImage.delete(); + + // console.log(levelBuffer.byteLength); + + level[faceOrder[j]] = { + internalFormat: internalFormat, + width: width, + height: height, + levelBuffer: levelBuffer, + }; + } + } +} + +export default parseKTX2; diff --git a/Source/ThirdParty/GltfPipeline/ForEach.js b/Source/ThirdParty/GltfPipeline/ForEach.js index 3bacebd9a6d..45d629af8b3 100644 --- a/Source/ThirdParty/GltfPipeline/ForEach.js +++ b/Source/ThirdParty/GltfPipeline/ForEach.js @@ -1,73 +1,89 @@ import hasExtension from './hasExtension.js' import defined from '../../Core/defined.js' - /** - * Contains traversal functions for processing elements of the glTF hierarchy. - * @constructor - * - * @private - */ - function ForEach() { - } - - /** - * Fallback for glTF 1.0 - * @private - */ - ForEach.objectLegacy = function(objects, handler) { - if (defined(objects)) { - for (var objectId in objects) { - if (Object.prototype.hasOwnProperty.call(objects, objectId)) { - var object = objects[objectId]; - var value = handler(object, objectId); - - if (defined(value)) { - return value; - } - } - } - } - }; - - /** - * @private - */ - ForEach.object = function(arrayOfObjects, handler) { - if (defined(arrayOfObjects)) { - var length = arrayOfObjects.length; - for (var i = 0; i < length; i++) { - var object = arrayOfObjects[i]; - var value = handler(object, i); +/** + * Contains traversal functions for processing elements of the glTF hierarchy. + * @constructor + * + * @private + */ +function ForEach() { +} + +/** + * Fallback for glTF 1.0 + * @private + */ +ForEach.objectLegacy = function(objects, handler) { + if (defined(objects)) { + for (var objectId in objects) { + if (Object.prototype.hasOwnProperty.call(objects, objectId)) { + var object = objects[objectId]; + var value = handler(object, objectId); if (defined(value)) { return value; } } } - }; - - /** - * Supports glTF 1.0 and 2.0 - * @private - */ - ForEach.topLevel = function(gltf, name, handler) { - var gltfProperty = gltf[name]; - if (defined(gltfProperty) && !Array.isArray(gltfProperty)) { - return ForEach.objectLegacy(gltfProperty, handler); + } +}; + +/** + * @private + */ +ForEach.object = function(arrayOfObjects, handler) { + if (defined(arrayOfObjects)) { + var length = arrayOfObjects.length; + for (var i = 0; i < length; i++) { + var object = arrayOfObjects[i]; + var value = handler(object, i); + + if (defined(value)) { + return value; + } } + } +}; + +/** + * Supports glTF 1.0 and 2.0 + * @private + */ +ForEach.topLevel = function(gltf, name, handler) { + var gltfProperty = gltf[name]; + if (defined(gltfProperty) && !Array.isArray(gltfProperty)) { + return ForEach.objectLegacy(gltfProperty, handler); + } + + return ForEach.object(gltfProperty, handler); +}; - return ForEach.object(gltfProperty, handler); - }; +ForEach.accessor = function(gltf, handler) { + return ForEach.topLevel(gltf, 'accessors', handler); +}; - ForEach.accessor = function(gltf, handler) { - return ForEach.topLevel(gltf, 'accessors', handler); - }; +ForEach.accessorWithSemantic = function(gltf, semantic, handler) { + var visited = {}; + return ForEach.mesh(gltf, function(mesh) { + return ForEach.meshPrimitive(mesh, function(primitive) { + var valueForEach = ForEach.meshPrimitiveAttribute(primitive, function(accessorId, attributeSemantic) { + if (attributeSemantic.indexOf(semantic) === 0 && !defined(visited[accessorId])) { + visited[accessorId] = true; + var value = handler(accessorId); - ForEach.accessorWithSemantic = function(gltf, semantic, handler) { - var visited = {}; - return ForEach.mesh(gltf, function(mesh) { - return ForEach.meshPrimitive(mesh, function(primitive) { - var valueForEach = ForEach.meshPrimitiveAttribute(primitive, function(accessorId, attributeSemantic) { + if (defined(value)) { + return value; + } + } + }); + + if (defined(valueForEach)) { + return valueForEach; + } + + return ForEach.meshPrimitiveTarget(primitive, function(target) { + return ForEach.meshPrimitiveTargetAttribute(target, function(accessorId, attributeSemantic) { if (attributeSemantic.indexOf(semantic) === 0 && !defined(visited[accessorId])) { visited[accessorId] = true; var value = handler(accessorId); @@ -77,32 +93,32 @@ import defined from '../../Core/defined.js' } } }); + }); + }); + }); +}; + +ForEach.accessorContainingVertexAttributeData = function(gltf, handler) { + var visited = {}; + return ForEach.mesh(gltf, function(mesh) { + return ForEach.meshPrimitive(mesh, function(primitive) { + var valueForEach = ForEach.meshPrimitiveAttribute(primitive, function(accessorId) { + if (!defined(visited[accessorId])) { + visited[accessorId] = true; + var value = handler(accessorId); - if (defined(valueForEach)) { - return valueForEach; + if (defined(value)) { + return value; + } } - - return ForEach.meshPrimitiveTarget(primitive, function(target) { - return ForEach.meshPrimitiveTargetAttribute(target, function(accessorId, attributeSemantic) { - if (attributeSemantic.indexOf(semantic) === 0 && !defined(visited[accessorId])) { - visited[accessorId] = true; - var value = handler(accessorId); - - if (defined(value)) { - return value; - } - } - }); - }); }); - }); - }; - ForEach.accessorContainingVertexAttributeData = function(gltf, handler) { - var visited = {}; - return ForEach.mesh(gltf, function(mesh) { - return ForEach.meshPrimitive(mesh, function(primitive) { - var valueForEach = ForEach.meshPrimitiveAttribute(primitive, function(accessorId) { + if (defined(valueForEach)) { + return valueForEach; + } + + return ForEach.meshPrimitiveTarget(primitive, function(target) { + return ForEach.meshPrimitiveTargetAttribute(target, function(accessorId) { if (!defined(visited[accessorId])) { visited[accessorId] = true; var value = handler(accessorId); @@ -112,300 +128,268 @@ import defined from '../../Core/defined.js' } } }); - - if (defined(valueForEach)) { - return valueForEach; - } - - return ForEach.meshPrimitiveTarget(primitive, function(target) { - return ForEach.meshPrimitiveTargetAttribute(target, function(accessorId) { - if (!defined(visited[accessorId])) { - visited[accessorId] = true; - var value = handler(accessorId); - - if (defined(value)) { - return value; - } - } - }); - }); - }); - }); - }; - - ForEach.accessorContainingIndexData = function(gltf, handler) { - var visited = {}; - return ForEach.mesh(gltf, function(mesh) { - return ForEach.meshPrimitive(mesh, function(primitive) { - var indices = primitive.indices; - if (defined(indices) && !defined(visited[indices])) { - visited[indices] = true; - var value = handler(indices); - - if (defined(value)) { - return value; - } - } }); }); - }; - - ForEach.animation = function(gltf, handler) { - return ForEach.topLevel(gltf, 'animations', handler); - }; - - ForEach.animationChannel = function(animation, handler) { - var channels = animation.channels; - return ForEach.object(channels, handler); - }; - - ForEach.animationSampler = function(animation, handler) { - var samplers = animation.samplers; - return ForEach.object(samplers, handler); - }; - - ForEach.buffer = function(gltf, handler) { - return ForEach.topLevel(gltf, 'buffers', handler); - }; - - ForEach.bufferView = function(gltf, handler) { - return ForEach.topLevel(gltf, 'bufferViews', handler); - }; - - ForEach.camera = function(gltf, handler) { - return ForEach.topLevel(gltf, 'cameras', handler); - }; - - ForEach.image = function(gltf, handler) { - return ForEach.topLevel(gltf, 'images', handler); - }; - - ForEach.compressedImage = function(image, handler) { - if (defined(image.extras)) { - var compressedImages = image.extras.compressedImage3DTiles; - for (var type in compressedImages) { - if (Object.prototype.hasOwnProperty.call(compressedImages, type)) { - var compressedImage = compressedImages[type]; - var value = handler(compressedImage, type); + }); +}; + +ForEach.accessorContainingIndexData = function(gltf, handler) { + var visited = {}; + return ForEach.mesh(gltf, function(mesh) { + return ForEach.meshPrimitive(mesh, function(primitive) { + var indices = primitive.indices; + if (defined(indices) && !defined(visited[indices])) { + visited[indices] = true; + var value = handler(indices); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - } - }; + }); + }); +}; + +ForEach.animation = function(gltf, handler) { + return ForEach.topLevel(gltf, 'animations', handler); +}; + +ForEach.animationChannel = function(animation, handler) { + var channels = animation.channels; + return ForEach.object(channels, handler); +}; + +ForEach.animationSampler = function(animation, handler) { + var samplers = animation.samplers; + return ForEach.object(samplers, handler); +}; + +ForEach.buffer = function(gltf, handler) { + return ForEach.topLevel(gltf, 'buffers', handler); +}; + +ForEach.bufferView = function(gltf, handler) { + return ForEach.topLevel(gltf, 'bufferViews', handler); +}; + +ForEach.camera = function(gltf, handler) { + return ForEach.topLevel(gltf, 'cameras', handler); +}; + +ForEach.image = function(gltf, handler) { + return ForEach.topLevel(gltf, 'images', handler); +}; + +ForEach.material = function(gltf, handler) { + return ForEach.topLevel(gltf, 'materials', handler); +}; + +ForEach.materialValue = function(material, handler) { + var values = material.values; + if (defined(material.extensions) && defined(material.extensions.KHR_techniques_webgl)) { + values = material.extensions.KHR_techniques_webgl.values; + } - ForEach.material = function(gltf, handler) { - return ForEach.topLevel(gltf, 'materials', handler); - }; + for (var name in values) { + if (Object.prototype.hasOwnProperty.call(values, name)) { + var value = handler(values[name], name); - ForEach.materialValue = function(material, handler) { - var values = material.values; - if (defined(material.extensions) && defined(material.extensions.KHR_techniques_webgl)) { - values = material.extensions.KHR_techniques_webgl.values; + if (defined(value)) { + return value; + } } - - for (var name in values) { - if (Object.prototype.hasOwnProperty.call(values, name)) { - var value = handler(values[name], name); - - if (defined(value)) { - return value; - } + } +}; + +ForEach.mesh = function(gltf, handler) { + return ForEach.topLevel(gltf, 'meshes', handler); +}; + +ForEach.meshPrimitive = function(mesh, handler) { + var primitives = mesh.primitives; + if (defined(primitives)) { + var primitivesLength = primitives.length; + for (var i = 0; i < primitivesLength; i++) { + var primitive = primitives[i]; + var value = handler(primitive, i); + + if (defined(value)) { + return value; } } - }; - - ForEach.mesh = function(gltf, handler) { - return ForEach.topLevel(gltf, 'meshes', handler); - }; + } +}; - ForEach.meshPrimitive = function(mesh, handler) { - var primitives = mesh.primitives; - if (defined(primitives)) { - var primitivesLength = primitives.length; - for (var i = 0; i < primitivesLength; i++) { - var primitive = primitives[i]; - var value = handler(primitive, i); +ForEach.meshPrimitiveAttribute = function(primitive, handler) { + var attributes = primitive.attributes; + for (var semantic in attributes) { + if (Object.prototype.hasOwnProperty.call(attributes, semantic)) { + var value = handler(attributes[semantic], semantic); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - }; + } +}; - ForEach.meshPrimitiveAttribute = function(primitive, handler) { - var attributes = primitive.attributes; - for (var semantic in attributes) { - if (Object.prototype.hasOwnProperty.call(attributes, semantic)) { - var value = handler(attributes[semantic], semantic); +ForEach.meshPrimitiveTarget = function(primitive, handler) { + var targets = primitive.targets; + if (defined(targets)) { + var length = targets.length; + for (var i = 0; i < length; ++i) { + var value = handler(targets[i], i); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - }; + } +}; - ForEach.meshPrimitiveTarget = function(primitive, handler) { - var targets = primitive.targets; - if (defined(targets)) { - var length = targets.length; - for (var i = 0; i < length; ++i) { - var value = handler(targets[i], i); +ForEach.meshPrimitiveTargetAttribute = function(target, handler) { + for (var semantic in target) { + if (Object.prototype.hasOwnProperty.call(target, semantic)) { + var accessorId = target[semantic]; + var value = handler(accessorId, semantic); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - }; - - ForEach.meshPrimitiveTargetAttribute = function(target, handler) { - for (var semantic in target) { - if (Object.prototype.hasOwnProperty.call(target, semantic)) { - var accessorId = target[semantic]; - var value = handler(accessorId, semantic); + } +}; + +ForEach.node = function(gltf, handler) { + return ForEach.topLevel(gltf, 'nodes', handler); +}; + +ForEach.nodeInTree = function(gltf, nodeIds, handler) { + var nodes = gltf.nodes; + if (defined(nodes)) { + var length = nodeIds.length; + for (var i = 0; i < length; i++) { + var nodeId = nodeIds[i]; + var node = nodes[nodeId]; + if (defined(node)) { + var value = handler(node, nodeId); if (defined(value)) { return value; } - } - } - }; - - ForEach.node = function(gltf, handler) { - return ForEach.topLevel(gltf, 'nodes', handler); - }; - - ForEach.nodeInTree = function(gltf, nodeIds, handler) { - var nodes = gltf.nodes; - if (defined(nodes)) { - var length = nodeIds.length; - for (var i = 0; i < length; i++) { - var nodeId = nodeIds[i]; - var node = nodes[nodeId]; - if (defined(node)) { - var value = handler(node, nodeId); + + var children = node.children; + if (defined(children)) { + value = ForEach.nodeInTree(gltf, children, handler); if (defined(value)) { return value; } - - var children = node.children; - if (defined(children)) { - value = ForEach.nodeInTree(gltf, children, handler); - - if (defined(value)) { - return value; - } - } } } } - }; + } +}; - ForEach.nodeInScene = function(gltf, scene, handler) { - var sceneNodeIds = scene.nodes; - if (defined(sceneNodeIds)) { - return ForEach.nodeInTree(gltf, sceneNodeIds, handler); - } - }; +ForEach.nodeInScene = function(gltf, scene, handler) { + var sceneNodeIds = scene.nodes; + if (defined(sceneNodeIds)) { + return ForEach.nodeInTree(gltf, sceneNodeIds, handler); + } +}; - ForEach.program = function(gltf, handler) { - if (hasExtension(gltf, 'KHR_techniques_webgl')) { - return ForEach.object(gltf.extensions.KHR_techniques_webgl.programs, handler); - } +ForEach.program = function(gltf, handler) { + if (hasExtension(gltf, 'KHR_techniques_webgl')) { + return ForEach.object(gltf.extensions.KHR_techniques_webgl.programs, handler); + } - return ForEach.topLevel(gltf, 'programs', handler); - }; + return ForEach.topLevel(gltf, 'programs', handler); +}; - ForEach.sampler = function(gltf, handler) { - return ForEach.topLevel(gltf, 'samplers', handler); - }; +ForEach.sampler = function(gltf, handler) { + return ForEach.topLevel(gltf, 'samplers', handler); +}; - ForEach.scene = function(gltf, handler) { - return ForEach.topLevel(gltf, 'scenes', handler); - }; +ForEach.scene = function(gltf, handler) { + return ForEach.topLevel(gltf, 'scenes', handler); +}; - ForEach.shader = function(gltf, handler) { - if (hasExtension(gltf, 'KHR_techniques_webgl')) { - return ForEach.object(gltf.extensions.KHR_techniques_webgl.shaders, handler); - } +ForEach.shader = function(gltf, handler) { + if (hasExtension(gltf, 'KHR_techniques_webgl')) { + return ForEach.object(gltf.extensions.KHR_techniques_webgl.shaders, handler); + } - return ForEach.topLevel(gltf, 'shaders', handler); - }; + return ForEach.topLevel(gltf, 'shaders', handler); +}; - ForEach.skin = function(gltf, handler) { - return ForEach.topLevel(gltf, 'skins', handler); - }; +ForEach.skin = function(gltf, handler) { + return ForEach.topLevel(gltf, 'skins', handler); +}; - ForEach.skinJoint = function(skin, handler) { - var joints = skin.joints; - if (defined(joints)) { - var jointsLength = joints.length; - for (var i = 0; i < jointsLength; i++) { - var joint = joints[i]; - var value = handler(joint); +ForEach.skinJoint = function(skin, handler) { + var joints = skin.joints; + if (defined(joints)) { + var jointsLength = joints.length; + for (var i = 0; i < jointsLength; i++) { + var joint = joints[i]; + var value = handler(joint); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - }; + } +}; - ForEach.techniqueAttribute = function(technique, handler) { - var attributes = technique.attributes; - for (var attributeName in attributes) { - if (Object.prototype.hasOwnProperty.call(attributes, attributeName)) { - var value = handler(attributes[attributeName], attributeName); +ForEach.techniqueAttribute = function(technique, handler) { + var attributes = technique.attributes; + for (var attributeName in attributes) { + if (Object.prototype.hasOwnProperty.call(attributes, attributeName)) { + var value = handler(attributes[attributeName], attributeName); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - }; + } +}; - ForEach.techniqueUniform = function(technique, handler) { - var uniforms = technique.uniforms; - for (var uniformName in uniforms) { - if (Object.prototype.hasOwnProperty.call(uniforms, uniformName)) { - var value = handler(uniforms[uniformName], uniformName); +ForEach.techniqueUniform = function(technique, handler) { + var uniforms = technique.uniforms; + for (var uniformName in uniforms) { + if (Object.prototype.hasOwnProperty.call(uniforms, uniformName)) { + var value = handler(uniforms[uniformName], uniformName); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - }; + } +}; - ForEach.techniqueParameter = function(technique, handler) { - var parameters = technique.parameters; - for (var parameterName in parameters) { - if (Object.prototype.hasOwnProperty.call(parameters, parameterName)) { - var value = handler(parameters[parameterName], parameterName); +ForEach.techniqueParameter = function(technique, handler) { + var parameters = technique.parameters; + for (var parameterName in parameters) { + if (Object.prototype.hasOwnProperty.call(parameters, parameterName)) { + var value = handler(parameters[parameterName], parameterName); - if (defined(value)) { - return value; - } + if (defined(value)) { + return value; } } - }; + } +}; - ForEach.technique = function(gltf, handler) { - if (hasExtension(gltf, 'KHR_techniques_webgl')) { - return ForEach.object(gltf.extensions.KHR_techniques_webgl.techniques, handler); - } +ForEach.technique = function(gltf, handler) { + if (hasExtension(gltf, 'KHR_techniques_webgl')) { + return ForEach.object(gltf.extensions.KHR_techniques_webgl.techniques, handler); + } - return ForEach.topLevel(gltf, 'techniques', handler); - }; + return ForEach.topLevel(gltf, 'techniques', handler); +}; - ForEach.texture = function(gltf, handler) { - return ForEach.topLevel(gltf, 'textures', handler); - }; +ForEach.texture = function(gltf, handler) { + return ForEach.topLevel(gltf, 'textures', handler); +}; - export default ForEach; +export default ForEach; diff --git a/Source/ThirdParty/GltfPipeline/addBuffer.js b/Source/ThirdParty/GltfPipeline/addBuffer.js index 1f404132716..9d2bfe40d6d 100644 --- a/Source/ThirdParty/GltfPipeline/addBuffer.js +++ b/Source/ThirdParty/GltfPipeline/addBuffer.js @@ -1,30 +1,30 @@ import addToArray from './addToArray.js' - /** - * Adds buffer to gltf. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {Buffer} buffer A Buffer object which will be added to gltf.buffers. - * @returns {Number} The bufferView id of the newly added bufferView. - * - * @private - */ - function addBuffer(gltf, buffer) { - var newBuffer = { - byteLength: buffer.length, - extras: { - _pipeline: { - source: buffer - } +/** + * Adds buffer to gltf. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {Buffer} buffer A Buffer object which will be added to gltf.buffers. + * @returns {Number} The bufferView id of the newly added bufferView. + * + * @private + */ +function addBuffer(gltf, buffer) { + var newBuffer = { + byteLength: buffer.length, + extras: { + _pipeline: { + source: buffer } - }; - var bufferId = addToArray(gltf.buffers, newBuffer); - var bufferView = { - buffer: bufferId, - byteOffset: 0, - byteLength: buffer.length - }; - return addToArray(gltf.bufferViews, bufferView); - } + } + }; + var bufferId = addToArray(gltf.buffers, newBuffer); + var bufferView = { + buffer: bufferId, + byteOffset: 0, + byteLength: buffer.length + }; + return addToArray(gltf.bufferViews, bufferView); +} - export default addBuffer; +export default addBuffer; diff --git a/Source/ThirdParty/GltfPipeline/addDefaults.js b/Source/ThirdParty/GltfPipeline/addDefaults.js index 35e1887aa75..e8650ca15d5 100644 --- a/Source/ThirdParty/GltfPipeline/addDefaults.js +++ b/Source/ThirdParty/GltfPipeline/addDefaults.js @@ -5,177 +5,177 @@ import defaultValue from '../../Core/defaultValue.js' import defined from '../../Core/defined.js' import WebGLConstants from '../../Core/WebGLConstants.js' - /** - * Adds default glTF values if they don't exist. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @returns {Object} The modified glTF. - * - * @private - */ - function addDefaults(gltf) { - ForEach.accessor(gltf, function(accessor) { - if (defined(accessor.bufferView)) { - accessor.byteOffset = defaultValue(accessor.byteOffset, 0); - } - }); - - ForEach.bufferView(gltf, function(bufferView) { - if (defined(bufferView.buffer)) { - bufferView.byteOffset = defaultValue(bufferView.byteOffset, 0); - } - }); +/** + * Adds default glTF values if they don't exist. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @returns {Object} The modified glTF. + * + * @private + */ +function addDefaults(gltf) { + ForEach.accessor(gltf, function(accessor) { + if (defined(accessor.bufferView)) { + accessor.byteOffset = defaultValue(accessor.byteOffset, 0); + } + }); - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - primitive.mode = defaultValue(primitive.mode, WebGLConstants.TRIANGLES); - if (!defined(primitive.material)) { - if (!defined(gltf.materials)) { - gltf.materials = []; - } - var defaultMaterial = { - name: 'default' - }; - primitive.material = addToArray(gltf.materials, defaultMaterial); + ForEach.bufferView(gltf, function(bufferView) { + if (defined(bufferView.buffer)) { + bufferView.byteOffset = defaultValue(bufferView.byteOffset, 0); + } + }); + + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + primitive.mode = defaultValue(primitive.mode, WebGLConstants.TRIANGLES); + if (!defined(primitive.material)) { + if (!defined(gltf.materials)) { + gltf.materials = []; } - }); - }); - - ForEach.accessorContainingVertexAttributeData(gltf, function(accessorId) { - var accessor = gltf.accessors[accessorId]; - var bufferViewId = accessor.bufferView; - accessor.normalized = defaultValue(accessor.normalized, false); - if (defined(bufferViewId)) { - var bufferView = gltf.bufferViews[bufferViewId]; - bufferView.byteStride = getAccessorByteStride(gltf, accessor); - bufferView.target = WebGLConstants.ARRAY_BUFFER; + var defaultMaterial = { + name: 'default' + }; + primitive.material = addToArray(gltf.materials, defaultMaterial); } }); - - ForEach.accessorContainingIndexData(gltf, function(accessorId) { - var accessor = gltf.accessors[accessorId]; - var bufferViewId = accessor.bufferView; - if (defined(bufferViewId)) { - var bufferView = gltf.bufferViews[bufferViewId]; - bufferView.target = WebGLConstants.ELEMENT_ARRAY_BUFFER; - } - }); - - ForEach.material(gltf, function(material) { - var extensions = defaultValue(material.extensions, defaultValue.EMPTY_OBJECT); - var materialsCommon = extensions.KHR_materials_common; - if (defined(materialsCommon)) { - var technique = materialsCommon.technique; - var values = defined(materialsCommon.values) ? materialsCommon.values : {}; - materialsCommon.values = values; - - values.ambient = defined(values.ambient) ? values.ambient : [0.0, 0.0, 0.0, 1.0]; - values.emission = defined(values.emission) ? values.emission : [0.0, 0.0, 0.0, 1.0]; - - values.transparency = defaultValue(values.transparency, 1.0); - values.transparent = defaultValue(values.transparent, false); - values.doubleSided = defaultValue(values.doubleSided, false); - - if (technique !== 'CONSTANT') { - values.diffuse = defined(values.diffuse) ? values.diffuse : [0.0, 0.0, 0.0, 1.0]; - if (technique !== 'LAMBERT') { - values.specular = defined(values.specular) ? values.specular : [0.0, 0.0, 0.0, 1.0]; - values.shininess = defaultValue(values.shininess, 0.0); - } + }); + + ForEach.accessorContainingVertexAttributeData(gltf, function(accessorId) { + var accessor = gltf.accessors[accessorId]; + var bufferViewId = accessor.bufferView; + accessor.normalized = defaultValue(accessor.normalized, false); + if (defined(bufferViewId)) { + var bufferView = gltf.bufferViews[bufferViewId]; + bufferView.byteStride = getAccessorByteStride(gltf, accessor); + bufferView.target = WebGLConstants.ARRAY_BUFFER; + } + }); + + ForEach.accessorContainingIndexData(gltf, function(accessorId) { + var accessor = gltf.accessors[accessorId]; + var bufferViewId = accessor.bufferView; + if (defined(bufferViewId)) { + var bufferView = gltf.bufferViews[bufferViewId]; + bufferView.target = WebGLConstants.ELEMENT_ARRAY_BUFFER; + } + }); + + ForEach.material(gltf, function(material) { + var extensions = defaultValue(material.extensions, defaultValue.EMPTY_OBJECT); + var materialsCommon = extensions.KHR_materials_common; + if (defined(materialsCommon)) { + var technique = materialsCommon.technique; + var values = defined(materialsCommon.values) ? materialsCommon.values : {}; + materialsCommon.values = values; + + values.ambient = defined(values.ambient) ? values.ambient : [0.0, 0.0, 0.0, 1.0]; + values.emission = defined(values.emission) ? values.emission : [0.0, 0.0, 0.0, 1.0]; + + values.transparency = defaultValue(values.transparency, 1.0); + values.transparent = defaultValue(values.transparent, false); + values.doubleSided = defaultValue(values.doubleSided, false); + + if (technique !== 'CONSTANT') { + values.diffuse = defined(values.diffuse) ? values.diffuse : [0.0, 0.0, 0.0, 1.0]; + if (technique !== 'LAMBERT') { + values.specular = defined(values.specular) ? values.specular : [0.0, 0.0, 0.0, 1.0]; + values.shininess = defaultValue(values.shininess, 0.0); } - return; - } - - material.emissiveFactor = defaultValue(material.emissiveFactor, [0.0, 0.0, 0.0]); - material.alphaMode = defaultValue(material.alphaMode, 'OPAQUE'); - material.doubleSided = defaultValue(material.doubleSided, false); - - if (material.alphaMode === 'MASK') { - material.alphaCutoff = defaultValue(material.alphaCutoff, 0.5); - } - - var techniquesExtension = extensions.KHR_techniques_webgl; - if (defined(techniquesExtension)) { - ForEach.materialValue(material, function (materialValue) { - // Check if material value is a TextureInfo object - if (defined(materialValue.index)) { - addTextureDefaults(materialValue); - } - }); } + return; + } - addTextureDefaults(material.emissiveTexture); - addTextureDefaults(material.normalTexture); - addTextureDefaults(material.occlusionTexture); - - var pbrMetallicRoughness = material.pbrMetallicRoughness; - if (defined(pbrMetallicRoughness)) { - pbrMetallicRoughness.baseColorFactor = defaultValue(pbrMetallicRoughness.baseColorFactor, [1.0, 1.0, 1.0, 1.0]); - pbrMetallicRoughness.metallicFactor = defaultValue(pbrMetallicRoughness.metallicFactor, 1.0); - pbrMetallicRoughness.roughnessFactor = defaultValue(pbrMetallicRoughness.roughnessFactor, 1.0); - addTextureDefaults(pbrMetallicRoughness.baseColorTexture); - addTextureDefaults(pbrMetallicRoughness.metallicRoughnessTexture); - } + material.emissiveFactor = defaultValue(material.emissiveFactor, [0.0, 0.0, 0.0]); + material.alphaMode = defaultValue(material.alphaMode, 'OPAQUE'); + material.doubleSided = defaultValue(material.doubleSided, false); - var pbrSpecularGlossiness = extensions.pbrSpecularGlossiness; - if (defined(pbrSpecularGlossiness)) { - pbrSpecularGlossiness.diffuseFactor = defaultValue(pbrSpecularGlossiness.diffuseFactor, [1.0, 1.0, 1.0, 1.0]); - pbrSpecularGlossiness.specularFactor = defaultValue(pbrSpecularGlossiness.specularFactor, [1.0, 1.0, 1.0]); - pbrSpecularGlossiness.glossinessFactor = defaultValue(pbrSpecularGlossiness.glossinessFactor, 1.0); - addTextureDefaults(pbrSpecularGlossiness.specularGlossinessTexture); - } - }); + if (material.alphaMode === 'MASK') { + material.alphaCutoff = defaultValue(material.alphaCutoff, 0.5); + } - ForEach.animation(gltf, function(animation) { - ForEach.animationSampler(animation, function(sampler) { - sampler.interpolation = defaultValue(sampler.interpolation, 'LINEAR'); + var techniquesExtension = extensions.KHR_techniques_webgl; + if (defined(techniquesExtension)) { + ForEach.materialValue(material, function (materialValue) { + // Check if material value is a TextureInfo object + if (defined(materialValue.index)) { + addTextureDefaults(materialValue); + } }); - }); + } - var animatedNodes = getAnimatedNodes(gltf); - ForEach.node(gltf, function(node, id) { - var animated = defined(animatedNodes[id]); - if (animated || defined(node.translation) || defined(node.rotation) || defined(node.scale)) { - node.translation = defaultValue(node.translation, [0.0, 0.0, 0.0]); - node.rotation = defaultValue(node.rotation, [0.0, 0.0, 0.0, 1.0]); - node.scale = defaultValue(node.scale, [1.0, 1.0, 1.0]); - } else { - node.matrix = defaultValue(node.matrix, [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]); - } - }); + addTextureDefaults(material.emissiveTexture); + addTextureDefaults(material.normalTexture); + addTextureDefaults(material.occlusionTexture); + + var pbrMetallicRoughness = material.pbrMetallicRoughness; + if (defined(pbrMetallicRoughness)) { + pbrMetallicRoughness.baseColorFactor = defaultValue(pbrMetallicRoughness.baseColorFactor, [1.0, 1.0, 1.0, 1.0]); + pbrMetallicRoughness.metallicFactor = defaultValue(pbrMetallicRoughness.metallicFactor, 1.0); + pbrMetallicRoughness.roughnessFactor = defaultValue(pbrMetallicRoughness.roughnessFactor, 1.0); + addTextureDefaults(pbrMetallicRoughness.baseColorTexture); + addTextureDefaults(pbrMetallicRoughness.metallicRoughnessTexture); + } - ForEach.sampler(gltf, function(sampler) { - sampler.wrapS = defaultValue(sampler.wrapS, WebGLConstants.REPEAT); - sampler.wrapT = defaultValue(sampler.wrapT, WebGLConstants.REPEAT); - }); + var pbrSpecularGlossiness = extensions.pbrSpecularGlossiness; + if (defined(pbrSpecularGlossiness)) { + pbrSpecularGlossiness.diffuseFactor = defaultValue(pbrSpecularGlossiness.diffuseFactor, [1.0, 1.0, 1.0, 1.0]); + pbrSpecularGlossiness.specularFactor = defaultValue(pbrSpecularGlossiness.specularFactor, [1.0, 1.0, 1.0]); + pbrSpecularGlossiness.glossinessFactor = defaultValue(pbrSpecularGlossiness.glossinessFactor, 1.0); + addTextureDefaults(pbrSpecularGlossiness.specularGlossinessTexture); + } + }); - if (defined(gltf.scenes) && !defined(gltf.scene)) { - gltf.scene = 0; + ForEach.animation(gltf, function(animation) { + ForEach.animationSampler(animation, function(sampler) { + sampler.interpolation = defaultValue(sampler.interpolation, 'LINEAR'); + }); + }); + + var animatedNodes = getAnimatedNodes(gltf); + ForEach.node(gltf, function(node, id) { + var animated = defined(animatedNodes[id]); + if (animated || defined(node.translation) || defined(node.rotation) || defined(node.scale)) { + node.translation = defaultValue(node.translation, [0.0, 0.0, 0.0]); + node.rotation = defaultValue(node.rotation, [0.0, 0.0, 0.0, 1.0]); + node.scale = defaultValue(node.scale, [1.0, 1.0, 1.0]); + } else { + node.matrix = defaultValue(node.matrix, [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]); } + }); + + ForEach.sampler(gltf, function(sampler) { + sampler.wrapS = defaultValue(sampler.wrapS, WebGLConstants.REPEAT); + sampler.wrapT = defaultValue(sampler.wrapT, WebGLConstants.REPEAT); + }); - return gltf; + if (defined(gltf.scenes) && !defined(gltf.scene)) { + gltf.scene = 0; } - function getAnimatedNodes(gltf) { - var nodes = {}; - ForEach.animation(gltf, function(animation) { - ForEach.animationChannel(animation, function(channel) { - var target = channel.target; - var nodeId = target.node; - var path = target.path; - // Ignore animations that target 'weights' - if (path === 'translation' || path === 'rotation' || path === 'scale') { - nodes[nodeId] = true; - } - }); + return gltf; +} + +function getAnimatedNodes(gltf) { + var nodes = {}; + ForEach.animation(gltf, function(animation) { + ForEach.animationChannel(animation, function(channel) { + var target = channel.target; + var nodeId = target.node; + var path = target.path; + // Ignore animations that target 'weights' + if (path === 'translation' || path === 'rotation' || path === 'scale') { + nodes[nodeId] = true; + } }); - return nodes; - } + }); + return nodes; +} - function addTextureDefaults(texture) { - if (defined(texture)) { - texture.texCoord = defaultValue(texture.texCoord, 0); - } +function addTextureDefaults(texture) { + if (defined(texture)) { + texture.texCoord = defaultValue(texture.texCoord, 0); } +} - export default addDefaults; +export default addDefaults; diff --git a/Source/ThirdParty/GltfPipeline/addExtensionsRequired.js b/Source/ThirdParty/GltfPipeline/addExtensionsRequired.js index c830658845e..2553968b8ac 100644 --- a/Source/ThirdParty/GltfPipeline/addExtensionsRequired.js +++ b/Source/ThirdParty/GltfPipeline/addExtensionsRequired.js @@ -2,23 +2,23 @@ import addExtensionsUsed from './addExtensionsUsed.js' import addToArray from './addToArray.js' import defined from '../../Core/defined.js' - /** - * Adds an extension to gltf.extensionsRequired if it does not already exist. - * Initializes extensionsRequired if it is not defined. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {String} extension The extension to add. - * - * @private - */ - function addExtensionsRequired(gltf, extension) { - var extensionsRequired = gltf.extensionsRequired; - if (!defined(extensionsRequired)) { - extensionsRequired = []; - gltf.extensionsRequired = extensionsRequired; - } - addToArray(extensionsRequired, extension, true); - addExtensionsUsed(gltf, extension); +/** + * Adds an extension to gltf.extensionsRequired if it does not already exist. + * Initializes extensionsRequired if it is not defined. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {String} extension The extension to add. + * + * @private + */ +function addExtensionsRequired(gltf, extension) { + var extensionsRequired = gltf.extensionsRequired; + if (!defined(extensionsRequired)) { + extensionsRequired = []; + gltf.extensionsRequired = extensionsRequired; } + addToArray(extensionsRequired, extension, true); + addExtensionsUsed(gltf, extension); +} - export default addExtensionsRequired; +export default addExtensionsRequired; diff --git a/Source/ThirdParty/GltfPipeline/addExtensionsUsed.js b/Source/ThirdParty/GltfPipeline/addExtensionsUsed.js index 9c3d53db788..23f3131162f 100644 --- a/Source/ThirdParty/GltfPipeline/addExtensionsUsed.js +++ b/Source/ThirdParty/GltfPipeline/addExtensionsUsed.js @@ -1,22 +1,22 @@ import addToArray from './addToArray.js' import defined from '../../Core/defined.js' - /** - * Adds an extension to gltf.extensionsUsed if it does not already exist. - * Initializes extensionsUsed if it is not defined. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {String} extension The extension to add. - * - * @private - */ - function addExtensionsUsed(gltf, extension) { - var extensionsUsed = gltf.extensionsUsed; - if (!defined(extensionsUsed)) { - extensionsUsed = []; - gltf.extensionsUsed = extensionsUsed; - } - addToArray(extensionsUsed, extension, true); +/** + * Adds an extension to gltf.extensionsUsed if it does not already exist. + * Initializes extensionsUsed if it is not defined. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {String} extension The extension to add. + * + * @private + */ +function addExtensionsUsed(gltf, extension) { + var extensionsUsed = gltf.extensionsUsed; + if (!defined(extensionsUsed)) { + extensionsUsed = []; + gltf.extensionsUsed = extensionsUsed; } + addToArray(extensionsUsed, extension, true); +} - export default addExtensionsUsed; +export default addExtensionsUsed; diff --git a/Source/ThirdParty/GltfPipeline/addPipelineExtras.js b/Source/ThirdParty/GltfPipeline/addPipelineExtras.js index 2fb06c36bf4..7a6755c8a02 100644 --- a/Source/ThirdParty/GltfPipeline/addPipelineExtras.js +++ b/Source/ThirdParty/GltfPipeline/addPipelineExtras.js @@ -1,37 +1,34 @@ import ForEach from './ForEach.js' import defined from '../../Core/defined.js' - /** - * Adds extras._pipeline to each object that can have extras in the glTF asset. - * This stage runs before updateVersion and handles both glTF 1.0 and glTF 2.0 assets. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @returns {Object} The glTF asset with the added pipeline extras. - * - * @private - */ - function addPipelineExtras(gltf) { - ForEach.shader(gltf, function(shader) { - addExtras(shader); - }); - ForEach.buffer(gltf, function(buffer) { - addExtras(buffer); - }); - ForEach.image(gltf, function (image) { - addExtras(image); - ForEach.compressedImage(image, function(compressedImage) { - addExtras(compressedImage); - }); - }); +/** + * Adds extras._pipeline to each object that can have extras in the glTF asset. + * This stage runs before updateVersion and handles both glTF 1.0 and glTF 2.0 assets. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @returns {Object} The glTF asset with the added pipeline extras. + * + * @private + */ +function addPipelineExtras(gltf) { + ForEach.shader(gltf, function(shader) { + addExtras(shader); + }); + ForEach.buffer(gltf, function(buffer) { + addExtras(buffer); + }); + ForEach.image(gltf, function (image) { + addExtras(image); + }); - addExtras(gltf); + addExtras(gltf); - return gltf; - } + return gltf; +} - function addExtras(object) { - object.extras = defined(object.extras) ? object.extras : {}; - object.extras._pipeline = defined(object.extras._pipeline) ? object.extras._pipeline : {}; - } +function addExtras(object) { + object.extras = defined(object.extras) ? object.extras : {}; + object.extras._pipeline = defined(object.extras._pipeline) ? object.extras._pipeline : {}; +} - export default addPipelineExtras; +export default addPipelineExtras; diff --git a/Source/ThirdParty/GltfPipeline/addToArray.js b/Source/ThirdParty/GltfPipeline/addToArray.js index 7e102eeba7a..dcb6ae33cd7 100644 --- a/Source/ThirdParty/GltfPipeline/addToArray.js +++ b/Source/ThirdParty/GltfPipeline/addToArray.js @@ -1,25 +1,25 @@ import defaultValue from '../../Core/defaultValue.js' - /** - * Adds an element to an array and returns the element's index. - * - * @param {Array} array The array to add to. - * @param {Object} element The element to add. - * @param {Boolean} [checkDuplicates=false] When true, if a duplicate element is found its index is returned and element is not added to the array. - * - * @private - */ - function addToArray(array, element, checkDuplicates) { - checkDuplicates = defaultValue(checkDuplicates, false); - if (checkDuplicates) { - var index = array.indexOf(element); - if (index > -1) { - return index; - } +/** + * Adds an element to an array and returns the element's index. + * + * @param {Array} array The array to add to. + * @param {Object} element The element to add. + * @param {Boolean} [checkDuplicates=false] When true, if a duplicate element is found its index is returned and element is not added to the array. + * + * @private + */ +function addToArray(array, element, checkDuplicates) { + checkDuplicates = defaultValue(checkDuplicates, false); + if (checkDuplicates) { + var index = array.indexOf(element); + if (index > -1) { + return index; } - - array.push(element); - return array.length - 1; } - export default addToArray; + array.push(element); + return array.length - 1; +} + +export default addToArray; diff --git a/Source/ThirdParty/GltfPipeline/findAccessorMinMax.js b/Source/ThirdParty/GltfPipeline/findAccessorMinMax.js index 721415f3724..66efe0712bf 100644 --- a/Source/ThirdParty/GltfPipeline/findAccessorMinMax.js +++ b/Source/ThirdParty/GltfPipeline/findAccessorMinMax.js @@ -5,60 +5,60 @@ import arrayFill from '../../Core/arrayFill.js' import ComponentDatatype from '../../Core/ComponentDatatype.js' import defined from '../../Core/defined.js' - /** - * Finds the min and max values of the accessor. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {Object} accessor The accessor object from the glTF asset to read. - * @returns {{min: Array, max: Array}} min holding the array of minimum values and max holding the array of maximum values. - * - * @private - */ - function findAccessorMinMax(gltf, accessor) { - var bufferViews = gltf.bufferViews; - var buffers = gltf.buffers; - var bufferViewId = accessor.bufferView; - var numberOfComponents = numberOfComponentsForType(accessor.type); +/** + * Finds the min and max values of the accessor. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {Object} accessor The accessor object from the glTF asset to read. + * @returns {{min: Array, max: Array}} min holding the array of minimum values and max holding the array of maximum values. + * + * @private + */ +function findAccessorMinMax(gltf, accessor) { + var bufferViews = gltf.bufferViews; + var buffers = gltf.buffers; + var bufferViewId = accessor.bufferView; + var numberOfComponents = numberOfComponentsForType(accessor.type); - // According to the spec, when bufferView is not defined, accessor must be initialized with zeros - if (!defined(accessor.bufferView)) { - return { - min: arrayFill(new Array(numberOfComponents), 0.0), - max: arrayFill(new Array(numberOfComponents), 0.0) - }; - } + // According to the spec, when bufferView is not defined, accessor must be initialized with zeros + if (!defined(accessor.bufferView)) { + return { + min: arrayFill(new Array(numberOfComponents), 0.0), + max: arrayFill(new Array(numberOfComponents), 0.0) + }; + } - var min = arrayFill(new Array(numberOfComponents), Number.POSITIVE_INFINITY); - var max = arrayFill(new Array(numberOfComponents), Number.NEGATIVE_INFINITY); + var min = arrayFill(new Array(numberOfComponents), Number.POSITIVE_INFINITY); + var max = arrayFill(new Array(numberOfComponents), Number.NEGATIVE_INFINITY); - var bufferView = bufferViews[bufferViewId]; - var bufferId = bufferView.buffer; - var buffer = buffers[bufferId]; - var source = buffer.extras._pipeline.source; + var bufferView = bufferViews[bufferViewId]; + var bufferId = bufferView.buffer; + var buffer = buffers[bufferId]; + var source = buffer.extras._pipeline.source; - var count = accessor.count; - var byteStride = getAccessorByteStride(gltf, accessor); - var byteOffset = accessor.byteOffset + bufferView.byteOffset + source.byteOffset; - var componentType = accessor.componentType; - var componentTypeByteLength = ComponentDatatype.getSizeInBytes(componentType); - var dataView = new DataView(source.buffer); - var components = new Array(numberOfComponents); - var componentReader = getComponentReader(componentType); + var count = accessor.count; + var byteStride = getAccessorByteStride(gltf, accessor); + var byteOffset = accessor.byteOffset + bufferView.byteOffset + source.byteOffset; + var componentType = accessor.componentType; + var componentTypeByteLength = ComponentDatatype.getSizeInBytes(componentType); + var dataView = new DataView(source.buffer); + var components = new Array(numberOfComponents); + var componentReader = getComponentReader(componentType); - for (var i = 0; i < count; i++) { - componentReader(dataView, byteOffset, numberOfComponents, componentTypeByteLength, components); - for (var j = 0; j < numberOfComponents; j++) { - var value = components[j]; - min[j] = Math.min(min[j], value); - max[j] = Math.max(max[j], value); - } - byteOffset += byteStride; + for (var i = 0; i < count; i++) { + componentReader(dataView, byteOffset, numberOfComponents, componentTypeByteLength, components); + for (var j = 0; j < numberOfComponents; j++) { + var value = components[j]; + min[j] = Math.min(min[j], value); + max[j] = Math.max(max[j], value); } - - return { - min: min, - max: max - }; + byteOffset += byteStride; } - export default findAccessorMinMax; + return { + min: min, + max: max + }; +} + +export default findAccessorMinMax; diff --git a/Source/ThirdParty/GltfPipeline/forEachTextureInMaterial.js b/Source/ThirdParty/GltfPipeline/forEachTextureInMaterial.js new file mode 100644 index 00000000000..030c7fe448c --- /dev/null +++ b/Source/ThirdParty/GltfPipeline/forEachTextureInMaterial.js @@ -0,0 +1,134 @@ +import defined from '../../Core/defined.js' +import Check from '../../Core/Check.js' +import ForEach from './ForEach.js' + +/** + * Calls the provider handler function on each texture used by the material. + * Mimics the behavior of functions in gltf-pipeline ForEach. + * @param {Object} material The glTF material. + * @param {forEachTextureInMaterial~handler} handler Function that is called for each texture in the material. + */ +function forEachTextureInMaterial(material, handler) { + Check.typeOf.object('material', material); + Check.defined('handler', handler); + + // Metallic roughness + var pbrMetallicRoughness = material.pbrMetallicRoughness; + if (defined(pbrMetallicRoughness)) { + if (defined(pbrMetallicRoughness.baseColorTexture)) { + var textureInfo = pbrMetallicRoughness.baseColorTexture; + var value = handler(textureInfo.index, textureInfo); + if (defined(value)) { + return value; + } + } + if (defined(pbrMetallicRoughness.metallicRoughnessTexture)) { + var textureInfo = pbrMetallicRoughness.metallicRoughnessTexture; + var value = handler(textureInfo.index, textureInfo); + if (defined(value)) { + return value; + } + } + } + + if (defined(material.extensions)) { + // Spec gloss extension + var pbrSpecularGlossiness = material.extensions.KHR_materials_pbrSpecularGlossiness; + if (defined(pbrSpecularGlossiness)) { + if (defined(pbrSpecularGlossiness.diffuseTexture)) { + var textureInfo = pbrSpecularGlossiness.diffuseTexture; + var value = handler(textureInfo.index, textureInfo); + if (defined(value)) { + return value; + } + } + if (defined(pbrSpecularGlossiness.specularGlossinessTexture)) { + var textureInfo = pbrSpecularGlossiness.specularGlossinessTexture; + var value = handler(textureInfo.index, textureInfo); + if (defined(value)) { + return value; + } + } + } + + // Materials common extension (may be present in models converted from glTF 1.0) + var materialsCommon = material.extensions.KHR_materials_common; + if (defined(materialsCommon)) { + var diffuse = materialsCommon.values.diffuse; + var ambient = materialsCommon.values.ambient; + var emission = materialsCommon.values.emission; + var specular = materialsCommon.values.specular; + if (defined(diffuse) && defined(diffuse.index)) { + var value = handler(diffuse.index, diffuse); + if (defined(value)) { + return value; + } + } + if (defined(ambient) && defined(ambient.index)) { + var value = handler(ambient.index, ambient); + if (defined(value)) { + return value; + } + } + if (defined(emission) && defined(emission.index)) { + var value = handler(emission.index, emission); + if (defined(value)) { + return value; + } + } + if (defined(specular) && defined(specular.index)) { + var value = handler(specular.index, specular); + if (defined(value)) { + return value; + } + } + } + } + + // KHR_techniques_webgl extension + var value = ForEach.materialValue(material, function (materialValue) { + if (defined(materialValue.index)) { + var value = handler(materialValue.index, materialValue); + if (defined(value)) { + return value; + } + } + }); + if (defined(value)) { + return value; + } + + // Top level textures + if (defined(material.emissiveTexture)) { + var textureInfo = material.emissiveTexture; + var value = handler(textureInfo.index, textureInfo); + if (defined(value)) { + return value; + } + } + + if (defined(material.normalTexture)) { + var textureInfo = material.normalTexture; + var value = handler(textureInfo.index, textureInfo); + if (defined(value)) { + return value; + } + } + + if (defined(material.occlusionTexture)) { + var textureInfo = material.occlusionTexture; + var value = handler(textureInfo.index, textureInfo); + if (defined(value)) { + return value; + } + } +} + +/** + * Function that is called for each texture in the material. If this function returns a value the for each stops and returns that value. + * @callback forEachTextureInMaterial~handler + * @param {Number} The texture index. + * @param {Object} The texture info object. + */ + +export default forEachTextureInMaterial; diff --git a/Source/ThirdParty/GltfPipeline/getAccessorByteStride.js b/Source/ThirdParty/GltfPipeline/getAccessorByteStride.js index c0bbecb2249..e854462e5e5 100644 --- a/Source/ThirdParty/GltfPipeline/getAccessorByteStride.js +++ b/Source/ThirdParty/GltfPipeline/getAccessorByteStride.js @@ -2,25 +2,25 @@ import numberOfComponentsForType from './numberOfComponentsForType.js' import ComponentDatatype from '../../Core/ComponentDatatype.js' import defined from '../../Core/defined.js' - /** - * Returns the byte stride of the provided accessor. - * If the byteStride is 0, it is calculated based on type and componentType - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {Object} accessor The accessor. - * @returns {Number} The byte stride of the accessor. - * - * @private - */ - function getAccessorByteStride(gltf, accessor) { - var bufferViewId = accessor.bufferView; - if (defined(bufferViewId)) { - var bufferView = gltf.bufferViews[bufferViewId]; - if (defined(bufferView.byteStride) && bufferView.byteStride > 0) { - return bufferView.byteStride; - } +/** + * Returns the byte stride of the provided accessor. + * If the byteStride is 0, it is calculated based on type and componentType + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {Object} accessor The accessor. + * @returns {Number} The byte stride of the accessor. + * + * @private + */ +function getAccessorByteStride(gltf, accessor) { + var bufferViewId = accessor.bufferView; + if (defined(bufferViewId)) { + var bufferView = gltf.bufferViews[bufferViewId]; + if (defined(bufferView.byteStride) && bufferView.byteStride > 0) { + return bufferView.byteStride; } - return ComponentDatatype.getSizeInBytes(accessor.componentType) * numberOfComponentsForType(accessor.type); } + return ComponentDatatype.getSizeInBytes(accessor.componentType) * numberOfComponentsForType(accessor.type); +} - export default getAccessorByteStride; +export default getAccessorByteStride; diff --git a/Source/ThirdParty/GltfPipeline/getComponentReader.js b/Source/ThirdParty/GltfPipeline/getComponentReader.js index ff406b46d39..d104f570832 100644 --- a/Source/ThirdParty/GltfPipeline/getComponentReader.js +++ b/Source/ThirdParty/GltfPipeline/getComponentReader.js @@ -1,75 +1,75 @@ import ComponentDatatype from '../../Core/ComponentDatatype.js' - /** - * Returns a function to read and convert data from a DataView into an array. - * - * @param {Number} componentType Type to convert the data to. - * @returns {ComponentReader} Function that reads and converts data. - * - * @private - */ - function getComponentReader(componentType) { - switch (componentType) { - case ComponentDatatype.BYTE: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getInt8(byteOffset + i * componentTypeByteLength); - } - }; - case ComponentDatatype.UNSIGNED_BYTE: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getUint8(byteOffset + i * componentTypeByteLength); - } - }; - case ComponentDatatype.SHORT: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getInt16(byteOffset + i * componentTypeByteLength, true); - } - }; - case ComponentDatatype.UNSIGNED_SHORT: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getUint16(byteOffset + i * componentTypeByteLength, true); - } - }; - case ComponentDatatype.INT: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getInt32(byteOffset + i * componentTypeByteLength, true); - } - }; - case ComponentDatatype.UNSIGNED_INT: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getUint32(byteOffset + i * componentTypeByteLength, true); - } - }; - case ComponentDatatype.FLOAT: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getFloat32(byteOffset + i * componentTypeByteLength, true); - } - }; - case ComponentDatatype.DOUBLE: - return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { - for (var i = 0; i < numberOfComponents; ++i) { - result[i] = dataView.getFloat64(byteOffset + i * componentTypeByteLength, true); - } - }; - } +/** + * Returns a function to read and convert data from a DataView into an array. + * + * @param {Number} componentType Type to convert the data to. + * @returns {ComponentReader} Function that reads and converts data. + * + * @private + */ +function getComponentReader(componentType) { + switch (componentType) { + case ComponentDatatype.BYTE: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getInt8(byteOffset + i * componentTypeByteLength); + } + }; + case ComponentDatatype.UNSIGNED_BYTE: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getUint8(byteOffset + i * componentTypeByteLength); + } + }; + case ComponentDatatype.SHORT: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getInt16(byteOffset + i * componentTypeByteLength, true); + } + }; + case ComponentDatatype.UNSIGNED_SHORT: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getUint16(byteOffset + i * componentTypeByteLength, true); + } + }; + case ComponentDatatype.INT: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getInt32(byteOffset + i * componentTypeByteLength, true); + } + }; + case ComponentDatatype.UNSIGNED_INT: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getUint32(byteOffset + i * componentTypeByteLength, true); + } + }; + case ComponentDatatype.FLOAT: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getFloat32(byteOffset + i * componentTypeByteLength, true); + } + }; + case ComponentDatatype.DOUBLE: + return function (dataView, byteOffset, numberOfComponents, componentTypeByteLength, result) { + for (var i = 0; i < numberOfComponents; ++i) { + result[i] = dataView.getFloat64(byteOffset + i * componentTypeByteLength, true); + } + }; } +} - /** - * A callback function that logs messages. - * @callback ComponentReader - * - * @param {DataView} dataView The data view to read from. - * @param {Number} byteOffset The byte offset applied when reading from the data view. - * @param {Number} numberOfComponents The number of components to read. - * @param {Number} componentTypeByteLength The byte length of each component. - * @param {Number} result An array storing the components that are read. - */ +/** + * A callback function that logs messages. + * @callback ComponentReader + * + * @param {DataView} dataView The data view to read from. + * @param {Number} byteOffset The byte offset applied when reading from the data view. + * @param {Number} numberOfComponents The number of components to read. + * @param {Number} componentTypeByteLength The byte length of each component. + * @param {Number} result An array storing the components that are read. + */ - export default getComponentReader; +export default getComponentReader; diff --git a/Source/ThirdParty/GltfPipeline/hasExtension.js b/Source/ThirdParty/GltfPipeline/hasExtension.js index 50b8524c3ac..6c5ec0c0cd4 100644 --- a/Source/ThirdParty/GltfPipeline/hasExtension.js +++ b/Source/ThirdParty/GltfPipeline/hasExtension.js @@ -1,16 +1,16 @@ import defined from '../../Core/defined.js' - /** - * Checks whether the glTF has the given extension. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {String} extension The name of the extension. - * @returns {Boolean} Whether the glTF has the given extension. - * - * @private - */ - function hasExtension(gltf, extension) { - return defined(gltf.extensionsUsed) && (gltf.extensionsUsed.indexOf(extension) >= 0); - } +/** + * Checks whether the glTF has the given extension. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {String} extension The name of the extension. + * @returns {Boolean} Whether the glTF has the given extension. + * + * @private + */ +function hasExtension(gltf, extension) { + return defined(gltf.extensionsUsed) && (gltf.extensionsUsed.indexOf(extension) >= 0); +} - export default hasExtension; +export default hasExtension; diff --git a/Source/ThirdParty/GltfPipeline/moveTechniqueRenderStates.js b/Source/ThirdParty/GltfPipeline/moveTechniqueRenderStates.js index c6f9847c993..68c2fea4c5d 100644 --- a/Source/ThirdParty/GltfPipeline/moveTechniqueRenderStates.js +++ b/Source/ThirdParty/GltfPipeline/moveTechniqueRenderStates.js @@ -4,126 +4,126 @@ import defaultValue from '../../Core/defaultValue.js' import defined from '../../Core/defined.js' import WebGLConstants from '../../Core/WebGLConstants.js' - var defaultBlendEquation = [ - WebGLConstants.FUNC_ADD, - WebGLConstants.FUNC_ADD - ]; - - var defaultBlendFactors = [ - WebGLConstants.ONE, - WebGLConstants.ZERO, - WebGLConstants.ONE, - WebGLConstants.ZERO - ]; - - function isStateEnabled(renderStates, state) { - var enabled = renderStates.enable; - if (!defined(enabled)) { - return false; - } +var defaultBlendEquation = [ + WebGLConstants.FUNC_ADD, + WebGLConstants.FUNC_ADD +]; + +var defaultBlendFactors = [ + WebGLConstants.ONE, + WebGLConstants.ZERO, + WebGLConstants.ONE, + WebGLConstants.ZERO +]; + +function isStateEnabled(renderStates, state) { + var enabled = renderStates.enable; + if (!defined(enabled)) { + return false; + } - return (enabled.indexOf(state) > -1); + return (enabled.indexOf(state) > -1); +} + +var supportedBlendFactors = [ + WebGLConstants.ZERO, + WebGLConstants.ONE, + WebGLConstants.SRC_COLOR, + WebGLConstants.ONE_MINUS_SRC_COLOR, + WebGLConstants.SRC_ALPHA, + WebGLConstants.ONE_MINUS_SRC_ALPHA, + WebGLConstants.DST_ALPHA, + WebGLConstants.ONE_MINUS_DST_ALPHA, + WebGLConstants.DST_COLOR, + WebGLConstants.ONE_MINUS_DST_COLOR +]; + +// If any of the blend factors are not supported, return the default +function getSupportedBlendFactors(value, defaultValue) { + if (!defined(value)) { + return defaultValue; } - var supportedBlendFactors = [ - WebGLConstants.ZERO, - WebGLConstants.ONE, - WebGLConstants.SRC_COLOR, - WebGLConstants.ONE_MINUS_SRC_COLOR, - WebGLConstants.SRC_ALPHA, - WebGLConstants.ONE_MINUS_SRC_ALPHA, - WebGLConstants.DST_ALPHA, - WebGLConstants.ONE_MINUS_DST_ALPHA, - WebGLConstants.DST_COLOR, - WebGLConstants.ONE_MINUS_DST_COLOR - ]; - - // If any of the blend factors are not supported, return the default - function getSupportedBlendFactors(value, defaultValue) { - if (!defined(value)) { + for (var i = 0; i < 4; i++) { + if (supportedBlendFactors.indexOf(value[i]) === -1) { return defaultValue; } - - for (var i = 0; i < 4; i++) { - if (supportedBlendFactors.indexOf(value[i]) === -1) { - return defaultValue; - } - } - - return value; } - /** - * Move glTF 1.0 technique render states to glTF 2.0 materials properties and KHR_blend extension. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @returns {Object} The updated glTF asset. - * - * @private - */ - function moveTechniqueRenderStates(gltf) { - var blendingForTechnique = {}; - var materialPropertiesForTechnique = {}; - var techniquesLegacy = gltf.techniques; - if (!defined(techniquesLegacy)) { - return gltf; - } - - ForEach.technique(gltf, function (techniqueLegacy, techniqueIndex) { - var renderStates = techniqueLegacy.states; - if (defined(renderStates)) { - var materialProperties = materialPropertiesForTechnique[techniqueIndex] = {}; - - // If BLEND is enabled, the material should have alpha mode BLEND - if (isStateEnabled(renderStates, WebGLConstants.BLEND)) { - materialProperties.alphaMode = 'BLEND'; - - var blendFunctions = renderStates.functions; - if (defined(blendFunctions) && (defined(blendFunctions.blendEquationSeparate) - || defined(blendFunctions.blendFuncSeparate))) { - blendingForTechnique[techniqueIndex] = { - blendEquation: defaultValue(blendFunctions.blendEquationSeparate, defaultBlendEquation), - blendFactors: getSupportedBlendFactors(blendFunctions.blendFuncSeparate, defaultBlendFactors) - }; - } - } + return value; +} + +/** + * Move glTF 1.0 technique render states to glTF 2.0 materials properties and KHR_blend extension. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @returns {Object} The updated glTF asset. + * + * @private + */ +function moveTechniqueRenderStates(gltf) { + var blendingForTechnique = {}; + var materialPropertiesForTechnique = {}; + var techniquesLegacy = gltf.techniques; + if (!defined(techniquesLegacy)) { + return gltf; + } - // If CULL_FACE is not enabled, the material should be doubleSided - if (!isStateEnabled(renderStates, WebGLConstants.CULL_FACE)) { - materialProperties.doubleSided = true; + ForEach.technique(gltf, function (techniqueLegacy, techniqueIndex) { + var renderStates = techniqueLegacy.states; + if (defined(renderStates)) { + var materialProperties = materialPropertiesForTechnique[techniqueIndex] = {}; + + // If BLEND is enabled, the material should have alpha mode BLEND + if (isStateEnabled(renderStates, WebGLConstants.BLEND)) { + materialProperties.alphaMode = 'BLEND'; + + var blendFunctions = renderStates.functions; + if (defined(blendFunctions) && (defined(blendFunctions.blendEquationSeparate) + || defined(blendFunctions.blendFuncSeparate))) { + blendingForTechnique[techniqueIndex] = { + blendEquation: defaultValue(blendFunctions.blendEquationSeparate, defaultBlendEquation), + blendFactors: getSupportedBlendFactors(blendFunctions.blendFuncSeparate, defaultBlendFactors) + }; } - - delete techniqueLegacy.states; } - }); - if (Object.keys(blendingForTechnique).length > 0) { - if (!defined(gltf.extensions)) { - gltf.extensions = {}; + // If CULL_FACE is not enabled, the material should be doubleSided + if (!isStateEnabled(renderStates, WebGLConstants.CULL_FACE)) { + materialProperties.doubleSided = true; } - addExtensionsUsed(gltf, 'KHR_blend'); + delete techniqueLegacy.states; } + }); - ForEach.material(gltf, function (material) { - if (defined(material.technique)) { - var materialProperties = materialPropertiesForTechnique[material.technique]; - ForEach.objectLegacy(materialProperties, function (value, property) { - material[property] = value; - }); + if (Object.keys(blendingForTechnique).length > 0) { + if (!defined(gltf.extensions)) { + gltf.extensions = {}; + } - var blending = blendingForTechnique[material.technique]; - if (defined(blending)) { - if (!defined(material.extensions)) { - material.extensions = {}; - } + addExtensionsUsed(gltf, 'KHR_blend'); + } - material.extensions.KHR_blend = blending; + ForEach.material(gltf, function (material) { + if (defined(material.technique)) { + var materialProperties = materialPropertiesForTechnique[material.technique]; + ForEach.objectLegacy(materialProperties, function (value, property) { + material[property] = value; + }); + + var blending = blendingForTechnique[material.technique]; + if (defined(blending)) { + if (!defined(material.extensions)) { + material.extensions = {}; } + + material.extensions.KHR_blend = blending; } - }); + } + }); - return gltf; - } + return gltf; +} - export default moveTechniqueRenderStates; +export default moveTechniqueRenderStates; diff --git a/Source/ThirdParty/GltfPipeline/moveTechniquesToExtension.js b/Source/ThirdParty/GltfPipeline/moveTechniquesToExtension.js index 96c7631a6fc..89dd2611d93 100644 --- a/Source/ThirdParty/GltfPipeline/moveTechniquesToExtension.js +++ b/Source/ThirdParty/GltfPipeline/moveTechniquesToExtension.js @@ -4,60 +4,66 @@ import addToArray from './addToArray.js' import ForEach from './ForEach.js' import defined from '../../Core/defined.js' - /** - * Move glTF 1.0 material techniques to glTF 2.0 KHR_techniques_webgl extension. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @returns {Object} The updated glTF asset. - * - * @private - */ - function moveTechniquesToExtension(gltf) { - var techniquesLegacy = gltf.techniques; - var mappedUniforms = {}; - var updatedTechniqueIndices = {}; - if (defined(techniquesLegacy)) { - var extension = { - programs: [], - shaders: [], - techniques: [] +/** + * Move glTF 1.0 material techniques to glTF 2.0 KHR_techniques_webgl extension. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @returns {Object} The updated glTF asset. + * + * @private + */ +function moveTechniquesToExtension(gltf) { + var techniquesLegacy = gltf.techniques; + var mappedUniforms = {}; + var updatedTechniqueIndices = {}; + var seenPrograms = {}; + if (defined(techniquesLegacy)) { + var extension = { + programs: [], + shaders: [], + techniques: [] + }; + + // Some 1.1 models have a glExtensionsUsed property that can be transferred to program.glExtensions + var glExtensions = gltf.glExtensionsUsed; + delete gltf.glExtensionsUsed; + + ForEach.technique(gltf, function (techniqueLegacy, techniqueId) { + var technique = { + name: techniqueLegacy.name, + program: undefined, + attributes: {}, + uniforms: {} }; - // Some 1.1 models have a glExtensionsUsed property that can be transferred to program.glExtensions - var glExtensions = gltf.glExtensionsUsed; - delete gltf.glExtensionsUsed; + var parameterLegacy; + ForEach.techniqueAttribute(techniqueLegacy, function (parameterName, attributeName) { + parameterLegacy = techniqueLegacy.parameters[parameterName]; + technique.attributes[attributeName] = { + semantic: parameterLegacy.semantic + }; + }); - ForEach.technique(gltf, function (techniqueLegacy, techniqueIndex) { - var technique = { - name: techniqueLegacy.name, - program: undefined, - attributes: {}, - uniforms: {} + ForEach.techniqueUniform(techniqueLegacy, function (parameterName, uniformName) { + parameterLegacy = techniqueLegacy.parameters[parameterName]; + technique.uniforms[uniformName] = { + count: parameterLegacy.count, + node: parameterLegacy.node, + type: parameterLegacy.type, + semantic: parameterLegacy.semantic, + value: parameterLegacy.value }; - var parameterLegacy; - ForEach.techniqueAttribute(techniqueLegacy, function (parameterName, attributeName) { - parameterLegacy = techniqueLegacy.parameters[parameterName]; - technique.attributes[attributeName] = { - semantic: parameterLegacy.semantic - }; - }); - - ForEach.techniqueUniform(techniqueLegacy, function (parameterName, uniformName) { - parameterLegacy = techniqueLegacy.parameters[parameterName]; - technique.uniforms[uniformName] = { - count: parameterLegacy.count, - node: parameterLegacy.node, - type: parameterLegacy.type, - semantic: parameterLegacy.semantic, - value: parameterLegacy.value - }; - - // Store the name of the uniform to update material values. - mappedUniforms[parameterName] = uniformName; - }); + // Store the name of the uniform to update material values. + if (!defined(mappedUniforms[techniqueId])) { + mappedUniforms[techniqueId] = {}; + } + mappedUniforms[techniqueId][parameterName] = uniformName; + }); + if (!defined(seenPrograms[techniqueLegacy.program])) { var programLegacy = gltf.programs[techniqueLegacy.program]; + var program = { name: programLegacy.name, fragmentShader: undefined, @@ -72,53 +78,57 @@ import defined from '../../Core/defined.js' program.vertexShader = addToArray(extension.shaders, vs, true); technique.program = addToArray(extension.programs, program); + seenPrograms[techniqueLegacy.program] = technique.program; + } else { + technique.program = seenPrograms[techniqueLegacy.program]; + } - // Store the index of the new technique to reference instead. - updatedTechniqueIndices[techniqueIndex] = addToArray(extension.techniques, technique); - }); - - if (extension.techniques.length > 0) { - if (!defined(gltf.extensions)) { - gltf.extensions = {}; - } + // Store the index of the new technique to reference instead. + updatedTechniqueIndices[techniqueId] = addToArray(extension.techniques, technique); + }); - gltf.extensions.KHR_techniques_webgl = extension; - addExtensionsUsed(gltf, 'KHR_techniques_webgl'); - addExtensionsRequired(gltf, 'KHR_techniques_webgl'); + if (extension.techniques.length > 0) { + if (!defined(gltf.extensions)) { + gltf.extensions = {}; } - } - ForEach.material(gltf, function (material) { - if (defined(material.technique)) { - var materialExtension = { - technique: updatedTechniqueIndices[material.technique] - }; - - ForEach.objectLegacy(material.values, function (value, parameterName) { - if (!defined(materialExtension.values)) { - materialExtension.values = {}; - } + gltf.extensions.KHR_techniques_webgl = extension; + addExtensionsUsed(gltf, 'KHR_techniques_webgl'); + addExtensionsRequired(gltf, 'KHR_techniques_webgl'); + } + } - var uniformName = mappedUniforms[parameterName]; - materialExtension.values[uniformName] = value; - }); + ForEach.material(gltf, function (material) { + if (defined(material.technique)) { + var materialExtension = { + technique: updatedTechniqueIndices[material.technique] + }; - if (!defined(material.extensions)) { - material.extensions = {}; + ForEach.objectLegacy(material.values, function (value, parameterName) { + if (!defined(materialExtension.values)) { + materialExtension.values = {}; } - material.extensions.KHR_techniques_webgl = materialExtension; + var uniformName = mappedUniforms[material.technique][parameterName]; + materialExtension.values[uniformName] = value; + }); + + if (!defined(material.extensions)) { + material.extensions = {}; } - delete material.technique; - delete material.values; - }); + material.extensions.KHR_techniques_webgl = materialExtension; + } - delete gltf.techniques; - delete gltf.programs; - delete gltf.shaders; + delete material.technique; + delete material.values; + }); - return gltf; - } + delete gltf.techniques; + delete gltf.programs; + delete gltf.shaders; + + return gltf; +} - export default moveTechniquesToExtension; +export default moveTechniquesToExtension; diff --git a/Source/ThirdParty/GltfPipeline/numberOfComponentsForType.js b/Source/ThirdParty/GltfPipeline/numberOfComponentsForType.js index 36af8038a64..d211357f063 100644 --- a/Source/ThirdParty/GltfPipeline/numberOfComponentsForType.js +++ b/Source/ThirdParty/GltfPipeline/numberOfComponentsForType.js @@ -1,29 +1,29 @@ - /** - * Utility function for retrieving the number of components in a given type. - * - * @param {String} type glTF type - * @returns {Number} The number of components in that type. - * - * @private - */ - function numberOfComponentsForType(type) { - switch (type) { - case 'SCALAR': - return 1; - case 'VEC2': - return 2; - case 'VEC3': - return 3; - case 'VEC4': - case 'MAT2': - return 4; - case 'MAT3': - return 9; - case 'MAT4': - return 16; - } +/** + * Utility function for retrieving the number of components in a given type. + * + * @param {String} type glTF type + * @returns {Number} The number of components in that type. + * + * @private + */ +function numberOfComponentsForType(type) { + switch (type) { + case 'SCALAR': + return 1; + case 'VEC2': + return 2; + case 'VEC3': + return 3; + case 'VEC4': + case 'MAT2': + return 4; + case 'MAT3': + return 9; + case 'MAT4': + return 16; } +} - export default numberOfComponentsForType; +export default numberOfComponentsForType; diff --git a/Source/ThirdParty/GltfPipeline/parseGlb.js b/Source/ThirdParty/GltfPipeline/parseGlb.js index 937bf6ec283..9580b53cce1 100644 --- a/Source/ThirdParty/GltfPipeline/parseGlb.js +++ b/Source/ThirdParty/GltfPipeline/parseGlb.js @@ -6,110 +6,110 @@ import getMagic from '../../Core/getMagic.js' import getStringFromTypedArray from '../../Core/getStringFromTypedArray.js' import RuntimeError from '../../Core/RuntimeError.js' - var sizeOfUint32 = 4; +var sizeOfUint32 = 4; - /** - * Convert a binary glTF to glTF. - * - * The returned glTF has pipeline extras included. The embedded binary data is stored in gltf.buffers[0].extras._pipeline.source. - * - * @param {Buffer} glb The glb data to parse. - * @returns {Object} A javascript object containing a glTF asset with pipeline extras included. - * - * @private - */ - function parseGlb(glb) { - // Check that the magic string is present - var magic = getMagic(glb); - if (magic !== 'glTF') { - throw new RuntimeError('File is not valid binary glTF'); - } - - var header = readHeader(glb, 0, 5); - var version = header[1]; - if (version !== 1 && version !== 2) { - throw new RuntimeError('Binary glTF version is not 1 or 2'); - } +/** + * Convert a binary glTF to glTF. + * + * The returned glTF has pipeline extras included. The embedded binary data is stored in gltf.buffers[0].extras._pipeline.source. + * + * @param {Buffer} glb The glb data to parse. + * @returns {Object} A javascript object containing a glTF asset with pipeline extras included. + * + * @private + */ +function parseGlb(glb) { + // Check that the magic string is present + var magic = getMagic(glb); + if (magic !== 'glTF') { + throw new RuntimeError('File is not valid binary glTF'); + } - if (version === 1) { - return parseGlbVersion1(glb, header); - } + var header = readHeader(glb, 0, 5); + var version = header[1]; + if (version !== 1 && version !== 2) { + throw new RuntimeError('Binary glTF version is not 1 or 2'); + } - return parseGlbVersion2(glb, header); + if (version === 1) { + return parseGlbVersion1(glb, header); } - function readHeader(glb, byteOffset, count) { - var dataView = new DataView(glb.buffer); - var header = new Array(count); - for (var i = 0; i < count; ++i) { - header[i] = dataView.getUint32(glb.byteOffset + byteOffset + i * sizeOfUint32, true); - } - return header; + return parseGlbVersion2(glb, header); +} + +function readHeader(glb, byteOffset, count) { + var dataView = new DataView(glb.buffer); + var header = new Array(count); + for (var i = 0; i < count; ++i) { + header[i] = dataView.getUint32(glb.byteOffset + byteOffset + i * sizeOfUint32, true); } + return header; +} - function parseGlbVersion1(glb, header) { - var length = header[2]; - var contentLength = header[3]; - var contentFormat = header[4]; +function parseGlbVersion1(glb, header) { + var length = header[2]; + var contentLength = header[3]; + var contentFormat = header[4]; - // Check that the content format is 0, indicating that it is JSON - if (contentFormat !== 0) { - throw new RuntimeError('Binary glTF scene format is not JSON'); - } + // Check that the content format is 0, indicating that it is JSON + if (contentFormat !== 0) { + throw new RuntimeError('Binary glTF scene format is not JSON'); + } - var jsonStart = 20; - var binaryStart = jsonStart + contentLength; + var jsonStart = 20; + var binaryStart = jsonStart + contentLength; - var contentString = getStringFromTypedArray(glb, jsonStart, contentLength); - var gltf = JSON.parse(contentString); - addPipelineExtras(gltf); + var contentString = getStringFromTypedArray(glb, jsonStart, contentLength); + var gltf = JSON.parse(contentString); + addPipelineExtras(gltf); - var binaryBuffer = glb.subarray(binaryStart, length); + var binaryBuffer = glb.subarray(binaryStart, length); - var buffers = gltf.buffers; - if (defined(buffers) && Object.keys(buffers).length > 0) { - // In some older models, the binary glTF buffer is named KHR_binary_glTF - var binaryGltfBuffer = defaultValue(buffers.binary_glTF, buffers.KHR_binary_glTF); - if (defined(binaryGltfBuffer)) { - binaryGltfBuffer.extras._pipeline.source = binaryBuffer; - } + var buffers = gltf.buffers; + if (defined(buffers) && Object.keys(buffers).length > 0) { + // In some older models, the binary glTF buffer is named KHR_binary_glTF + var binaryGltfBuffer = defaultValue(buffers.binary_glTF, buffers.KHR_binary_glTF); + if (defined(binaryGltfBuffer)) { + binaryGltfBuffer.extras._pipeline.source = binaryBuffer; } - // Remove the KHR_binary_glTF extension - removeExtensionsUsed(gltf, 'KHR_binary_glTF'); - return gltf; } + // Remove the KHR_binary_glTF extension + removeExtensionsUsed(gltf, 'KHR_binary_glTF'); + return gltf; +} - function parseGlbVersion2(glb, header) { - var length = header[2]; - var byteOffset = 12; - var gltf; - var binaryBuffer; - while (byteOffset < length) { - var chunkHeader = readHeader(glb, byteOffset, 2); - var chunkLength = chunkHeader[0]; - var chunkType = chunkHeader[1]; - byteOffset += 8; - var chunkBuffer = glb.subarray(byteOffset, byteOffset + chunkLength); - byteOffset += chunkLength; - // Load JSON chunk - if (chunkType === 0x4E4F534A) { - var jsonString = getStringFromTypedArray(chunkBuffer); - gltf = JSON.parse(jsonString); - addPipelineExtras(gltf); - } - // Load Binary chunk - else if (chunkType === 0x004E4942) { - binaryBuffer = chunkBuffer; - } +function parseGlbVersion2(glb, header) { + var length = header[2]; + var byteOffset = 12; + var gltf; + var binaryBuffer; + while (byteOffset < length) { + var chunkHeader = readHeader(glb, byteOffset, 2); + var chunkLength = chunkHeader[0]; + var chunkType = chunkHeader[1]; + byteOffset += 8; + var chunkBuffer = glb.subarray(byteOffset, byteOffset + chunkLength); + byteOffset += chunkLength; + // Load JSON chunk + if (chunkType === 0x4E4F534A) { + var jsonString = getStringFromTypedArray(chunkBuffer); + gltf = JSON.parse(jsonString); + addPipelineExtras(gltf); } - if (defined(gltf) && defined(binaryBuffer)) { - var buffers = gltf.buffers; - if (defined(buffers) && buffers.length > 0) { - var buffer = buffers[0]; - buffer.extras._pipeline.source = binaryBuffer; - } + // Load Binary chunk + else if (chunkType === 0x004E4942) { + binaryBuffer = chunkBuffer; + } + } + if (defined(gltf) && defined(binaryBuffer)) { + var buffers = gltf.buffers; + if (defined(buffers) && buffers.length > 0) { + var buffer = buffers[0]; + buffer.extras._pipeline.source = binaryBuffer; } - return gltf; } + return gltf; +} - export default parseGlb; +export default parseGlb; diff --git a/Source/ThirdParty/GltfPipeline/readAccessorPacked.js b/Source/ThirdParty/GltfPipeline/readAccessorPacked.js index 6225e4f545b..bd51a15a0ca 100644 --- a/Source/ThirdParty/GltfPipeline/readAccessorPacked.js +++ b/Source/ThirdParty/GltfPipeline/readAccessorPacked.js @@ -5,43 +5,43 @@ import arrayFill from '../../Core/arrayFill.js' import ComponentDatatype from '../../Core/ComponentDatatype.js' import defined from '../../Core/defined.js' - /** - * Returns the accessor data in a contiguous array. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {Object} accessor The accessor. - * @returns {Array} The accessor values in a contiguous array. - * - * @private - */ - function readAccessorPacked(gltf, accessor) { - var byteStride = getAccessorByteStride(gltf, accessor); - var componentTypeByteLength = ComponentDatatype.getSizeInBytes(accessor.componentType); - var numberOfComponents = numberOfComponentsForType(accessor.type); - var count = accessor.count; - var values = new Array(numberOfComponents * count); +/** + * Returns the accessor data in a contiguous array. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {Object} accessor The accessor. + * @returns {Array} The accessor values in a contiguous array. + * + * @private + */ +function readAccessorPacked(gltf, accessor) { + var byteStride = getAccessorByteStride(gltf, accessor); + var componentTypeByteLength = ComponentDatatype.getSizeInBytes(accessor.componentType); + var numberOfComponents = numberOfComponentsForType(accessor.type); + var count = accessor.count; + var values = new Array(numberOfComponents * count); - if (!defined(accessor.bufferView)) { - arrayFill(values, 0); - return values; - } + if (!defined(accessor.bufferView)) { + arrayFill(values, 0); + return values; + } - var bufferView = gltf.bufferViews[accessor.bufferView]; - var source = gltf.buffers[bufferView.buffer].extras._pipeline.source; - var byteOffset = accessor.byteOffset + bufferView.byteOffset + source.byteOffset; + var bufferView = gltf.bufferViews[accessor.bufferView]; + var source = gltf.buffers[bufferView.buffer].extras._pipeline.source; + var byteOffset = accessor.byteOffset + bufferView.byteOffset + source.byteOffset; - var dataView = new DataView(source.buffer); - var components = new Array(numberOfComponents); - var componentReader = getComponentReader(accessor.componentType); + var dataView = new DataView(source.buffer); + var components = new Array(numberOfComponents); + var componentReader = getComponentReader(accessor.componentType); - for (var i = 0; i < count; ++i) { - componentReader(dataView, byteOffset, numberOfComponents, componentTypeByteLength, components); - for (var j = 0; j < numberOfComponents; ++j) { - values[i * numberOfComponents + j] = components[j]; - } - byteOffset += byteStride; + for (var i = 0; i < count; ++i) { + componentReader(dataView, byteOffset, numberOfComponents, componentTypeByteLength, components); + for (var j = 0; j < numberOfComponents; ++j) { + values[i * numberOfComponents + j] = components[j]; } - return values; + byteOffset += byteStride; } + return values; +} - export default readAccessorPacked; +export default readAccessorPacked; diff --git a/Source/ThirdParty/GltfPipeline/removeExtensionsRequired.js b/Source/ThirdParty/GltfPipeline/removeExtensionsRequired.js index ba60c821152..baa5315a14e 100644 --- a/Source/ThirdParty/GltfPipeline/removeExtensionsRequired.js +++ b/Source/ThirdParty/GltfPipeline/removeExtensionsRequired.js @@ -1,24 +1,24 @@ import defined from '../../Core/defined.js' - /** - * Removes an extension from gltf.extensionsRequired if it is present. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {String} extension The extension to remove. - * - * @private - */ - function removeExtensionsRequired(gltf, extension) { - var extensionsRequired = gltf.extensionsRequired; - if (defined(extensionsRequired)) { - var index = extensionsRequired.indexOf(extension); - if (index >= 0) { - extensionsRequired.splice(index, 1); - } - if (extensionsRequired.length === 0) { - delete gltf.extensionsRequired; - } +/** + * Removes an extension from gltf.extensionsRequired if it is present. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {String} extension The extension to remove. + * + * @private + */ +function removeExtensionsRequired(gltf, extension) { + var extensionsRequired = gltf.extensionsRequired; + if (defined(extensionsRequired)) { + var index = extensionsRequired.indexOf(extension); + if (index >= 0) { + extensionsRequired.splice(index, 1); + } + if (extensionsRequired.length === 0) { + delete gltf.extensionsRequired; } } +} - export default removeExtensionsRequired; +export default removeExtensionsRequired; diff --git a/Source/ThirdParty/GltfPipeline/removeExtensionsUsed.js b/Source/ThirdParty/GltfPipeline/removeExtensionsUsed.js index 83f8aad1ee3..eb4313b1e7c 100644 --- a/Source/ThirdParty/GltfPipeline/removeExtensionsUsed.js +++ b/Source/ThirdParty/GltfPipeline/removeExtensionsUsed.js @@ -1,26 +1,26 @@ import removeExtensionsRequired from './removeExtensionsRequired.js' import defined from '../../Core/defined.js' - /** - * Removes an extension from gltf.extensionsUsed and gltf.extensionsRequired if it is present. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {String} extension The extension to remove. - * - * @private - */ - function removeExtensionsUsed(gltf, extension) { - var extensionsUsed = gltf.extensionsUsed; - if (defined(extensionsUsed)) { - var index = extensionsUsed.indexOf(extension); - if (index >= 0) { - extensionsUsed.splice(index, 1); - } - removeExtensionsRequired(gltf, extension); - if (extensionsUsed.length === 0) { - delete gltf.extensionsUsed; - } +/** + * Removes an extension from gltf.extensionsUsed and gltf.extensionsRequired if it is present. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {String} extension The extension to remove. + * + * @private + */ +function removeExtensionsUsed(gltf, extension) { + var extensionsUsed = gltf.extensionsUsed; + if (defined(extensionsUsed)) { + var index = extensionsUsed.indexOf(extension); + if (index >= 0) { + extensionsUsed.splice(index, 1); + } + removeExtensionsRequired(gltf, extension); + if (extensionsUsed.length === 0) { + delete gltf.extensionsUsed; } } +} - export default removeExtensionsUsed; +export default removeExtensionsUsed; diff --git a/Source/ThirdParty/GltfPipeline/removePipelineExtras.js b/Source/ThirdParty/GltfPipeline/removePipelineExtras.js index 25fcbf760e8..7ffa353eb3b 100644 --- a/Source/ThirdParty/GltfPipeline/removePipelineExtras.js +++ b/Source/ThirdParty/GltfPipeline/removePipelineExtras.js @@ -1,45 +1,42 @@ import ForEach from './ForEach.js' import defined from '../../Core/defined.js' - /** - * Iterate through the objects within the glTF and delete their pipeline extras object. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @returns {Object} glTF with no pipeline extras. - * - * @private - */ - function removePipelineExtras(gltf) { - ForEach.shader(gltf, function(shader) { - removeExtras(shader); - }); - ForEach.buffer(gltf, function(buffer) { - removeExtras(buffer); - }); - ForEach.image(gltf, function (image) { - removeExtras(image); - ForEach.compressedImage(image, function(compressedImage) { - removeExtras(compressedImage); - }); - }); +/** + * Iterate through the objects within the glTF and delete their pipeline extras object. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @returns {Object} glTF with no pipeline extras. + * + * @private + */ +function removePipelineExtras(gltf) { + ForEach.shader(gltf, function(shader) { + removeExtras(shader); + }); + ForEach.buffer(gltf, function(buffer) { + removeExtras(buffer); + }); + ForEach.image(gltf, function (image) { + removeExtras(image); + }); - removeExtras(gltf); + removeExtras(gltf); - return gltf; - } + return gltf; +} - function removeExtras(object) { - if (!defined(object.extras)) { - return; - } +function removeExtras(object) { + if (!defined(object.extras)) { + return; + } - if (defined(object.extras._pipeline)) { - delete object.extras._pipeline; - } + if (defined(object.extras._pipeline)) { + delete object.extras._pipeline; + } - if (Object.keys(object.extras).length === 0) { - delete object.extras; - } + if (Object.keys(object.extras).length === 0) { + delete object.extras; } +} - export default removePipelineExtras; +export default removePipelineExtras; diff --git a/Source/ThirdParty/GltfPipeline/removeUnusedElements.js b/Source/ThirdParty/GltfPipeline/removeUnusedElements.js index 628be650185..912a58416a9 100644 --- a/Source/ThirdParty/GltfPipeline/removeUnusedElements.js +++ b/Source/ThirdParty/GltfPipeline/removeUnusedElements.js @@ -1,428 +1,521 @@ import ForEach from './ForEach.js' +import forEachTextureInMaterial from './forEachTextureInMaterial.js' import hasExtension from './hasExtension.js' import defaultValue from '../../Core/defaultValue.js' import defined from '../../Core/defined.js' - var allElementTypes = ['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer']; - - /** - * Removes unused elements from gltf. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {String[]} [elementTypes=['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer']] Element types to be removed. Needs to be a subset of ['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer'], other items will be ignored. - * - * @private - */ - function removeUnusedElements(gltf, elementTypes) { - elementTypes = defaultValue(elementTypes, allElementTypes); - allElementTypes.forEach(function(type) { - if (elementTypes.indexOf(type) > -1) { - removeUnusedElementsByType(gltf, type); - } - }); - return gltf; - } - - var TypeToGltfElementName = { - accessor: 'accessors', - buffer: 'buffers', - bufferView: 'bufferViews', - node: 'nodes', - material: 'materials', - mesh: 'meshes' - }; - - function removeUnusedElementsByType(gltf, type) { - var name = TypeToGltfElementName[type]; - var arrayOfObjects = gltf[name]; - - if (defined(arrayOfObjects)) { - var removed = 0; - var usedIds = getListOfElementsIdsInUse[type](gltf); - var length = arrayOfObjects.length; - - for (var i = 0; i < length; ++i) { - if (!usedIds[i]) { - Remove[type](gltf, i - removed); - removed++; - } +var allElementTypes = ['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer', 'texture', 'sampler', 'image']; + +/** + * Removes unused elements from gltf. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {String[]} [elementTypes=['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer']] Element types to be removed. Needs to be a subset of ['mesh', 'node', 'material', 'accessor', 'bufferView', 'buffer'], other items will be ignored. + * + * @private + */ +function removeUnusedElements(gltf, elementTypes) { + elementTypes = defaultValue(elementTypes, allElementTypes); + allElementTypes.forEach(function(type) { + if (elementTypes.indexOf(type) > -1) { + removeUnusedElementsByType(gltf, type); + } + }); + return gltf; +} + +var TypeToGltfElementName = { + accessor: 'accessors', + buffer: 'buffers', + bufferView: 'bufferViews', + image: 'images', + node: 'nodes', + material: 'materials', + mesh: 'meshes', + sampler: 'samplers', + texture: 'textures' +}; + +function removeUnusedElementsByType(gltf, type) { + var name = TypeToGltfElementName[type]; + var arrayOfObjects = gltf[name]; + + if (defined(arrayOfObjects)) { + var removed = 0; + var usedIds = getListOfElementsIdsInUse[type](gltf); + var length = arrayOfObjects.length; + + for (var i = 0; i < length; ++i) { + if (!usedIds[i]) { + Remove[type](gltf, i - removed); + removed++; } } } +} + +/** + * Contains functions for removing elements from a glTF hierarchy. + * Since top-level glTF elements are arrays, when something is removed, referring + * indices need to be updated. + * @constructor + * + * @private + */ +function Remove() {} + +Remove.accessor = function(gltf, accessorId) { + var accessors = gltf.accessors; + + accessors.splice(accessorId, 1); + + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + // Update accessor ids for the primitives. + ForEach.meshPrimitiveAttribute(primitive, function(attributeAccessorId, semantic) { + if (attributeAccessorId > accessorId) { + primitive.attributes[semantic]--; + } + }); - /** - * Contains functions for removing elements from a glTF hierarchy. - * Since top-level glTF elements are arrays, when something is removed, referring - * indices need to be updated. - * @constructor - * - * @private - */ - function Remove() {} - - Remove.accessor = function(gltf, accessorId) { - var accessors = gltf.accessors; - - accessors.splice(accessorId, 1); - - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - // Update accessor ids for the primitives. - ForEach.meshPrimitiveAttribute(primitive, function(attributeAccessorId, semantic) { + // Update accessor ids for the targets. + ForEach.meshPrimitiveTarget(primitive, function(target) { + ForEach.meshPrimitiveTargetAttribute(target, function(attributeAccessorId, semantic) { if (attributeAccessorId > accessorId) { - primitive.attributes[semantic]--; + target[semantic]--; } }); - - // Update accessor ids for the targets. - ForEach.meshPrimitiveTarget(primitive, function(target) { - ForEach.meshPrimitiveTargetAttribute(target, function(attributeAccessorId, semantic) { - if (attributeAccessorId > accessorId) { - target[semantic]--; - } - }); - }); - var indices = primitive.indices; - if (defined(indices) && indices > accessorId) { - primitive.indices--; - } }); + var indices = primitive.indices; + if (defined(indices) && indices > accessorId) { + primitive.indices--; + } }); + }); + + ForEach.skin(gltf, function(skin) { + if (defined(skin.inverseBindMatrices) && skin.inverseBindMatrices > accessorId) { + skin.inverseBindMatrices--; + } + }); - ForEach.skin(gltf, function(skin) { - if (defined(skin.inverseBindMatrices) && skin.inverseBindMatrices > accessorId) { - skin.inverseBindMatrices--; + ForEach.animation(gltf, function(animation) { + ForEach.animationSampler(animation, function(sampler) { + if (defined(sampler.input) && sampler.input > accessorId) { + sampler.input--; + } + if (defined(sampler.output) && sampler.output > accessorId) { + sampler.output--; } }); + }); +}; - ForEach.animation(gltf, function(animation) { - ForEach.animationSampler(animation, function(sampler) { - if (defined(sampler.input) && sampler.input > accessorId) { - sampler.input--; - } - if (defined(sampler.output) && sampler.output > accessorId) { - sampler.output--; +Remove.buffer = function(gltf, bufferId) { + var buffers = gltf.buffers; + + buffers.splice(bufferId, 1); + + ForEach.bufferView(gltf, function(bufferView) { + if (defined(bufferView.buffer) && bufferView.buffer > bufferId) { + bufferView.buffer--; + } + }); +}; + +Remove.bufferView = function(gltf, bufferViewId) { + var bufferViews = gltf.bufferViews; + + bufferViews.splice(bufferViewId, 1); + + ForEach.accessor(gltf, function(accessor) { + if (defined(accessor.bufferView) && accessor.bufferView > bufferViewId) { + accessor.bufferView--; + } + }); + + ForEach.shader(gltf, function(shader) { + if (defined(shader.bufferView) && shader.bufferView > bufferViewId) { + shader.bufferView--; + } + }); + + ForEach.image(gltf, function(image) { + if (defined(image.bufferView) && image.bufferView > bufferViewId) { + image.bufferView--; + } + }); + + if (hasExtension(gltf, 'KHR_draco_mesh_compression')) { + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + if (defined(primitive.extensions) && + defined(primitive.extensions.KHR_draco_mesh_compression)) { + if (primitive.extensions.KHR_draco_mesh_compression.bufferView > bufferViewId) { + primitive.extensions.KHR_draco_mesh_compression.bufferView--; + } } }); }); - }; - - Remove.buffer = function(gltf, bufferId) { - var buffers = gltf.buffers; + } +}; - buffers.splice(bufferId, 1); +Remove.image = function(gltf, imageId) { + var images = gltf.images; + images.splice(imageId, 1); - ForEach.bufferView(gltf, function(bufferView) { - if (defined(bufferView.buffer) && bufferView.buffer > bufferId) { - bufferView.buffer--; + ForEach.texture(gltf, function (texture) { + if (defined(texture.source)) { + if (texture.source > imageId) { + --texture.source; } - }); - }; + } + var ext = texture.extensions; + if (defined(ext) && defined(ext.EXT_texture_webp) && ext.EXT_texture_webp.source > imageId) { + --texture.extensions.EXT_texture_webp.source; + } else if (defined(ext) && defined(ext.KHR_texture_basisu) && ext.KHR_texture_basisu.source > imageId) { + --texture.extensions.KHR_texture_basisu.source; + } + }); +}; + +Remove.mesh = function(gltf, meshId) { + var meshes = gltf.meshes; + meshes.splice(meshId, 1); + + ForEach.node(gltf, function(node) { + if (defined(node.mesh)) { + if (node.mesh > meshId) { + node.mesh--; + } else if (node.mesh === meshId) { + // Remove reference to deleted mesh + delete node.mesh; + } + } + }); +}; - Remove.bufferView = function(gltf, bufferViewId) { - var bufferViews = gltf.bufferViews; +Remove.node = function(gltf, nodeId) { + var nodes = gltf.nodes; + nodes.splice(nodeId, 1); - bufferViews.splice(bufferViewId, 1); + // Shift all node references + ForEach.skin(gltf, function(skin) { + if (defined(skin.skeleton) && skin.skeleton > nodeId) { + skin.skeleton--; + } - ForEach.accessor(gltf, function(accessor) { - if (defined(accessor.bufferView) && accessor.bufferView > bufferViewId) { - accessor.bufferView--; - } + skin.joints = skin.joints.map(function(x) { + return x > nodeId ? x - 1 : x; }); - - ForEach.shader(gltf, function(shader) { - if (defined(shader.bufferView) && shader.bufferView > bufferViewId) { - shader.bufferView--; + }); + ForEach.animation(gltf, function(animation) { + ForEach.animationChannel(animation, function(channel) { + if (defined(channel.target) && defined(channel.target.node) && (channel.target.node > nodeId)) { + channel.target.node--; } }); - - ForEach.image(gltf, function(image) { - if (defined(image.bufferView) && image.bufferView > bufferViewId) { - image.bufferView--; + }); + ForEach.technique(gltf, function(technique) { + ForEach.techniqueUniform(technique, function(uniform) { + if (defined(uniform.node) && uniform.node > nodeId) { + uniform.node--; } - ForEach.compressedImage(image, function(compressedImage) { - var compressedImageBufferView = compressedImage.bufferView; - if (defined(compressedImageBufferView) && compressedImageBufferView > bufferViewId) { - compressedImage.bufferView--; - } - }); }); - - if (hasExtension(gltf, 'KHR_draco_mesh_compression')) { - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - if (defined(primitive.extensions) && - defined(primitive.extensions.KHR_draco_mesh_compression)) { - if (primitive.extensions.KHR_draco_mesh_compression.bufferView > bufferViewId) { - primitive.extensions.KHR_draco_mesh_compression.bufferView--; - } - } - }); - }); + }); + ForEach.node(gltf, function(node) { + if (!defined(node.children)) { + return; } - }; - - Remove.mesh = function(gltf, meshId) { - var meshes = gltf.meshes; - meshes.splice(meshId, 1); - ForEach.node(gltf, function(node) { - if (defined(node.mesh)) { - if (node.mesh > meshId) { - node.mesh--; - } else if (node.mesh === meshId) { - // Remove reference to deleted mesh - delete node.mesh; - } + node.children = node.children + .filter(function(x) { + return x !== nodeId; // Remove + }) + .map(function(x) { + return x > nodeId ? x - 1 : x; // Shift indices + }); + }); + ForEach.scene(gltf, function(scene) { + scene.nodes = scene.nodes + .filter(function(x) { + return x !== nodeId; // Remove + }) + .map(function(x) { + return x > nodeId ? x - 1 : x; // Shift indices + }); + }); +}; + +Remove.material = function(gltf, materialId) { + var materials = gltf.materials; + materials.splice(materialId, 1); + + // Shift other material ids + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + if (defined(primitive.material) && primitive.material > materialId) { + primitive.material--; } }); - }; + }); +}; - Remove.node = function(gltf, nodeId) { - var nodes = gltf.nodes; - nodes.splice(nodeId, 1); +Remove.sampler = function(gltf, samplerId) { + var samplers = gltf.samplers; + samplers.splice(samplerId, 1); - // Shift all node references - ForEach.skin(gltf, function(skin) { - if (defined(skin.skeleton) && skin.skeleton > nodeId) { - skin.skeleton--; + ForEach.texture(gltf, function (texture) { + if (defined(texture.sampler)) { + if (texture.sampler > samplerId) { + --texture.sampler; } + } + }); +}; - skin.joints = skin.joints.map(function(x) { - return x > nodeId ? x - 1 : x; - }); +Remove.texture = function(gltf, textureId) { + var textures = gltf.textures; + textures.splice(textureId, 1); + + ForEach.material(gltf, function (material) { + forEachTextureInMaterial(material, function (textureIndex, textureInfo) { + if (textureInfo.index > textureId) { + --textureInfo.index; + } }); - ForEach.animation(gltf, function(animation) { - ForEach.animationChannel(animation, function(channel) { - if (defined(channel.target) && defined(channel.target.node) && (channel.target.node > nodeId)) { - channel.target.node--; - } + }); +}; + +/** + * Contains functions for getting a list of element ids in use by the glTF asset. + * @constructor + * + * @private + */ +function getListOfElementsIdsInUse() {} + +getListOfElementsIdsInUse.accessor = function(gltf) { + // Calculate accessor's that are currently in use. + var usedAccessorIds = {}; + + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + ForEach.meshPrimitiveAttribute(primitive, function(accessorId) { + usedAccessorIds[accessorId] = true; }); - }); - ForEach.technique(gltf, function(technique) { - ForEach.techniqueUniform(technique, function(uniform) { - if (defined(uniform.node) && uniform.node > nodeId) { - uniform.node--; - } + ForEach.meshPrimitiveTarget(primitive, function(target) { + ForEach.meshPrimitiveTargetAttribute(target, function(accessorId) { + usedAccessorIds[accessorId] = true; + }); }); - }); - ForEach.node(gltf, function(node) { - if (!defined(node.children)) { - return; + var indices = primitive.indices; + if (defined(indices)) { + usedAccessorIds[indices] = true; } + }); + }); - node.children = node.children - .filter(function(x) { - return x !== nodeId; // Remove - }) - .map(function(x) { - return x > nodeId ? x - 1 : x; // Shift indices - }); + ForEach.skin(gltf, function(skin) { + if (defined(skin.inverseBindMatrices)) { + usedAccessorIds[skin.inverseBindMatrices] = true; + } + }); + + ForEach.animation(gltf, function(animation) { + ForEach.animationSampler(animation, function(sampler) { + if (defined(sampler.input)) { + usedAccessorIds[sampler.input] = true; + } + if (defined(sampler.output)) { + usedAccessorIds[sampler.output] = true; + } }); - ForEach.scene(gltf, function(scene) { - scene.nodes = scene.nodes - .filter(function(x) { - return x !== nodeId; // Remove - }) - .map(function(x) { - return x > nodeId ? x - 1 : x; // Shift indices + }); + + if (hasExtension(gltf, 'EXT_mesh_gpu_instancing')) { + ForEach.node(gltf, function(node) { + if (defined(node.extensions) && defined(node.extensions.EXT_mesh_gpu_instancing)) { + Object.keys(node.extensions.EXT_mesh_gpu_instancing.attributes).forEach(function(key) { + var attributeAccessorId = node.extensions.EXT_mesh_gpu_instancing.attributes[key]; + usedAccessorIds[attributeAccessorId] = true; }); + } }); - }; + } - Remove.material = function(gltf, materialId) { - var materials = gltf.materials; - materials.splice(materialId, 1); + return usedAccessorIds; +}; - // Shift other material ids - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - if (defined(primitive.material) && primitive.material > materialId) { - primitive.material--; - } - }); - }); - }; +getListOfElementsIdsInUse.buffer = function(gltf) { + // Calculate buffer's that are currently in use. + var usedBufferIds = {}; - /** - * Contains functions for getting a list of element ids in use by the glTF asset. - * @constructor - * - * @private - */ - function getListOfElementsIdsInUse() {} + ForEach.bufferView(gltf, function(bufferView) { + if (defined(bufferView.buffer)) { + usedBufferIds[bufferView.buffer] = true; + } + }); - getListOfElementsIdsInUse.accessor = function(gltf) { - // Calculate accessor's that are currently in use. - var usedAccessorIds = {}; + return usedBufferIds; +}; +getListOfElementsIdsInUse.bufferView = function(gltf) { + // Calculate bufferView's that are currently in use. + var usedBufferViewIds = {}; + + ForEach.accessor(gltf, function(accessor) { + if (defined(accessor.bufferView)) { + usedBufferViewIds[accessor.bufferView] = true; + } + }); + + ForEach.shader(gltf, function(shader) { + if (defined(shader.bufferView)) { + usedBufferViewIds[shader.bufferView] = true; + } + }); + + ForEach.image(gltf, function(image) { + if (defined(image.bufferView)) { + usedBufferViewIds[image.bufferView] = true; + } + }); + + if (hasExtension(gltf, 'KHR_draco_mesh_compression')) { ForEach.mesh(gltf, function(mesh) { ForEach.meshPrimitive(mesh, function(primitive) { - ForEach.meshPrimitiveAttribute(primitive, function(accessorId) { - usedAccessorIds[accessorId] = true; - }); - ForEach.meshPrimitiveTarget(primitive, function(target) { - ForEach.meshPrimitiveTargetAttribute(target, function(accessorId) { - usedAccessorIds[accessorId] = true; - }); - }); - var indices = primitive.indices; - if (defined(indices)) { - usedAccessorIds[indices] = true; + if (defined(primitive.extensions) && + defined(primitive.extensions.KHR_draco_mesh_compression)) { + usedBufferViewIds[primitive.extensions.KHR_draco_mesh_compression.bufferView] = true; } }); }); + } - ForEach.skin(gltf, function(skin) { - if (defined(skin.inverseBindMatrices)) { - usedAccessorIds[skin.inverseBindMatrices] = true; - } - }); + return usedBufferViewIds; +}; - ForEach.animation(gltf, function(animation) { - ForEach.animationSampler(animation, function(sampler) { - if (defined(sampler.input)) { - usedAccessorIds[sampler.input] = true; - } - if (defined(sampler.output)) { - usedAccessorIds[sampler.output] = true; - } - }); - }); +getListOfElementsIdsInUse.image = function(gltf) { + var usedImageIds = {}; - return usedAccessorIds; - }; + ForEach.texture(gltf, function (texture) { + if (defined(texture.source)) { + usedImageIds[texture.source] = true; + } - getListOfElementsIdsInUse.buffer = function(gltf) { - // Calculate buffer's that are currently in use. - var usedBufferIds = {}; + if (defined(texture.extensions) && defined(texture.extensions.EXT_texture_webp)) { + usedImageIds[texture.extensions.EXT_texture_webp.source] = true; + } else if (defined(texture.extensions) && defined(texture.extensions.KHR_texture_basisu)) { + usedImageIds[texture.extensions.KHR_texture_basisu.source] = true; + } - ForEach.bufferView(gltf, function(bufferView) { - if (defined(bufferView.buffer)) { - usedBufferIds[bufferView.buffer] = true; + }); + return usedImageIds; +}; + +getListOfElementsIdsInUse.mesh = function(gltf) { + var usedMeshIds = {}; + ForEach.node(gltf, function(node) { + if (defined(node.mesh && defined(gltf.meshes))) { + var mesh = gltf.meshes[node.mesh]; + if (defined(mesh) && defined(mesh.primitives) && (mesh.primitives.length > 0)) { + usedMeshIds[node.mesh] = true; } - }); - - return usedBufferIds; - }; + } + }); + + return usedMeshIds; +}; + +// Check if node is empty. It is considered empty if neither referencing +// mesh, camera, extensions and has no children +function nodeIsEmpty(gltf, nodeId, usedNodeIds) { + var node = gltf.nodes[nodeId]; + if (defined(node.mesh) || defined(node.camera) || defined(node.skin) + || defined(node.weights) || defined(node.extras) + || (defined(node.extensions) && Object.keys(node.extensions).length !== 0) + || defined(usedNodeIds[nodeId])) { + return false; + } - getListOfElementsIdsInUse.bufferView = function(gltf) { - // Calculate bufferView's that are currently in use. - var usedBufferViewIds = {}; + // Empty if no children or children are all empty nodes + return !defined(node.children) + || node.children.filter(function(n) { + return !nodeIsEmpty(gltf, n, usedNodeIds); + }).length === 0; +} + +getListOfElementsIdsInUse.node = function(gltf) { + var usedNodeIds = {}; + ForEach.skin(gltf, function(skin) { + if (defined(skin.skeleton)) { + usedNodeIds[skin.skeleton] = true; + } - ForEach.accessor(gltf, function(accessor) { - if (defined(accessor.bufferView)) { - usedBufferViewIds[accessor.bufferView] = true; - } + ForEach.skinJoint(skin, function(joint) { + usedNodeIds[joint] = true; }); - - ForEach.shader(gltf, function(shader) { - if (defined(shader.bufferView)) { - usedBufferViewIds[shader.bufferView] = true; + }); + ForEach.animation(gltf, function(animation) { + ForEach.animationChannel(animation, function(channel) { + if (defined(channel.target) && defined(channel.target.node)) { + usedNodeIds[channel.target.node] = true; } }); - - ForEach.image(gltf, function(image) { - if (defined(image.bufferView)) { - usedBufferViewIds[image.bufferView] = true; + }); + ForEach.technique(gltf, function(technique) { + ForEach.techniqueUniform(technique, function(uniform) { + if (defined(uniform.node)) { + usedNodeIds[uniform.node] = true; } - ForEach.compressedImage(image, function(compressedImage) { - if (defined(compressedImage.bufferView)) { - usedBufferViewIds[compressedImage.bufferView] = true; - } - }); }); - - if (hasExtension(gltf, 'KHR_draco_mesh_compression')) { - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - if (defined(primitive.extensions) && - defined(primitive.extensions.KHR_draco_mesh_compression)) { - usedBufferViewIds[primitive.extensions.KHR_draco_mesh_compression.bufferView] = true; - } - }); - }); + }); + ForEach.node(gltf, function(node, nodeId) { + if (!nodeIsEmpty(gltf, nodeId, usedNodeIds)) { + usedNodeIds[nodeId] = true; } + }); - return usedBufferViewIds; - }; + return usedNodeIds; +}; - getListOfElementsIdsInUse.mesh = function(gltf) { - var usedMeshIds = {}; - ForEach.node(gltf, function(node) { - if (defined(node.mesh && defined(gltf.meshes))) { - var mesh = gltf.meshes[node.mesh]; - if (defined(mesh) && defined(mesh.primitives) && (mesh.primitives.length > 0)) { - usedMeshIds[node.mesh] = true; - } +getListOfElementsIdsInUse.material = function(gltf) { + var usedMaterialIds = {}; + + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + if (defined(primitive.material)) { + usedMaterialIds[primitive.material] = true; } }); + }); - return usedMeshIds; - }; - - // Check if node is empty. It is considered empty if neither referencing - // mesh, camera, extensions and has no children - function nodeIsEmpty(gltf, node) { - if (defined(node.mesh) || defined(node.camera) || defined(node.skin) - || defined(node.weights) || defined(node.extras) - || (defined(node.extensions) && node.extensions.length !== 0)) { - return false; - } + return usedMaterialIds; +}; - // Empty if no children or children are all empty nodes - return !defined(node.children) - || node.children.filter(function(n) { - return !nodeIsEmpty(gltf, gltf.nodes[n]); - }).length === 0; - } +getListOfElementsIdsInUse.texture = function(gltf) { + var usedTextureIds = {}; - getListOfElementsIdsInUse.node = function(gltf) { - var usedNodeIds = {}; - ForEach.node(gltf, function(node, nodeId) { - if (!nodeIsEmpty(gltf, node)) { - usedNodeIds[nodeId] = true; - } + ForEach.material(gltf, function(material) { + forEachTextureInMaterial(material, function(textureId) { + usedTextureIds[textureId] = true; }); - ForEach.skin(gltf, function(skin) { - if (defined(skin.skeleton)) { - usedNodeIds[skin.skeleton] = true; - } + }); - ForEach.skinJoint(skin, function(joint) { - usedNodeIds[joint] = true; - }); - }); - ForEach.animation(gltf, function(animation) { - ForEach.animationChannel(animation, function(channel) { - if (defined(channel.target) && defined(channel.target.node)) { - usedNodeIds[channel.target.node] = true; - } - }); - }); - ForEach.technique(gltf, function(technique) { - ForEach.techniqueUniform(technique, function(uniform) { - if (defined(uniform.node)) { - usedNodeIds[uniform.node] = true; - } - }); - }); - - return usedNodeIds; - }; + return usedTextureIds; +}; - getListOfElementsIdsInUse.material = function(gltf) { - var usedMaterialIds = {}; +getListOfElementsIdsInUse.sampler = function(gltf) { + var usedSamplerIds = {}; - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - if (defined(primitive.material)) { - usedMaterialIds[primitive.material] = true; - } - }); - }); + ForEach.texture(gltf, function (texture) { + if (defined(texture.sampler)) { + usedSamplerIds[texture.sampler] = true; + } + }); - return usedMaterialIds; - }; + return usedSamplerIds; +}; - export default removeUnusedElements; +export default removeUnusedElements; diff --git a/Source/ThirdParty/GltfPipeline/updateAccessorComponentTypes.js b/Source/ThirdParty/GltfPipeline/updateAccessorComponentTypes.js index 1efcb7bfe76..585c1b1ad90 100644 --- a/Source/ThirdParty/GltfPipeline/updateAccessorComponentTypes.js +++ b/Source/ThirdParty/GltfPipeline/updateAccessorComponentTypes.js @@ -4,45 +4,45 @@ import readAccessorPacked from './readAccessorPacked.js' import ComponentDatatype from '../../Core/ComponentDatatype.js' import WebGLConstants from '../../Core/WebGLConstants.js' - /** - * Update accessors referenced by JOINTS_0 and WEIGHTS_0 attributes to use correct component types. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @returns {Object} The glTF asset with compressed meshes. - * - * @private - */ - function updateAccessorComponentTypes(gltf) { - var componentType; - ForEach.accessorWithSemantic(gltf, 'JOINTS_0', function(accessorId) { - var accessor = gltf.accessors[accessorId]; - componentType = accessor.componentType; - if (componentType === WebGLConstants.BYTE) { - convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE); - } else if (componentType !== WebGLConstants.UNSIGNED_BYTE - && componentType !== WebGLConstants.UNSIGNED_SHORT) { - convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT); - } - }); - ForEach.accessorWithSemantic(gltf, 'WEIGHTS_0', function(accessorId) { - var accessor = gltf.accessors[accessorId]; - componentType = accessor.componentType; - if (componentType === WebGLConstants.BYTE) { - convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE); - } else if (componentType === WebGLConstants.SHORT) { - convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT); - } - }); +/** + * Update accessors referenced by JOINTS_0 and WEIGHTS_0 attributes to use correct component types. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @returns {Object} The glTF asset with compressed meshes. + * + * @private + */ +function updateAccessorComponentTypes(gltf) { + var componentType; + ForEach.accessorWithSemantic(gltf, 'JOINTS_0', function(accessorId) { + var accessor = gltf.accessors[accessorId]; + componentType = accessor.componentType; + if (componentType === WebGLConstants.BYTE) { + convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE); + } else if (componentType !== WebGLConstants.UNSIGNED_BYTE + && componentType !== WebGLConstants.UNSIGNED_SHORT) { + convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT); + } + }); + ForEach.accessorWithSemantic(gltf, 'WEIGHTS_0', function(accessorId) { + var accessor = gltf.accessors[accessorId]; + componentType = accessor.componentType; + if (componentType === WebGLConstants.BYTE) { + convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE); + } else if (componentType === WebGLConstants.SHORT) { + convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT); + } + }); - return gltf; - } + return gltf; +} - function convertType(gltf, accessor, updatedComponentType) { - var typedArray = ComponentDatatype.createTypedArray(updatedComponentType, readAccessorPacked(gltf, accessor)); - var newBuffer = new Uint8Array(typedArray.buffer); - accessor.bufferView = addBuffer(gltf, newBuffer); - accessor.componentType = updatedComponentType; - accessor.byteOffset = 0; - } +function convertType(gltf, accessor, updatedComponentType) { + var typedArray = ComponentDatatype.createTypedArray(updatedComponentType, readAccessorPacked(gltf, accessor)); + var newBuffer = new Uint8Array(typedArray.buffer); + accessor.bufferView = addBuffer(gltf, newBuffer); + accessor.componentType = updatedComponentType; + accessor.byteOffset = 0; +} - export default updateAccessorComponentTypes; +export default updateAccessorComponentTypes; diff --git a/Source/ThirdParty/GltfPipeline/updateVersion.js b/Source/ThirdParty/GltfPipeline/updateVersion.js index dc4f91cf1cd..61f32ccd868 100644 --- a/Source/ThirdParty/GltfPipeline/updateVersion.js +++ b/Source/ThirdParty/GltfPipeline/updateVersion.js @@ -18,919 +18,905 @@ import Matrix4 from '../../Core/Matrix4.js' import Quaternion from '../../Core/Quaternion.js' import WebGLConstants from '../../Core/WebGLConstants.js' - var updateFunctions = { - '0.8': glTF08to10, - '1.0': glTF10to20, - '2.0': undefined - }; - - /** - * Update the glTF version to the latest version (2.0), or targetVersion if specified. - * Applies changes made to the glTF spec between revisions so that the core library - * only has to handle the latest version. - * - * @param {Object} gltf A javascript object containing a glTF asset. - * @param {Object} [options] Options for updating the glTF. - * @param {String} [options.targetVersion] The glTF will be upgraded until it hits the specified version. - * @returns {Object} The updated glTF asset. - * - * @private - */ - function updateVersion(gltf, options) { - options = defaultValue(options, defaultValue.EMPTY_OBJECT); - var targetVersion = options.targetVersion; - var version = gltf.version; - - gltf.asset = defaultValue(gltf.asset, { - version: '1.0' - }); - - gltf.asset.version = defaultValue(gltf.asset.version, '1.0'); - version = defaultValue(version, gltf.asset.version).toString(); - - // Invalid version +var updateFunctions = { + '0.8': glTF08to10, + '1.0': glTF10to20, + '2.0': undefined +}; + +/** + * Update the glTF version to the latest version (2.0), or targetVersion if specified. + * Applies changes made to the glTF spec between revisions so that the core library + * only has to handle the latest version. + * + * @param {Object} gltf A javascript object containing a glTF asset. + * @param {Object} [options] Options for updating the glTF. + * @param {String} [options.targetVersion] The glTF will be upgraded until it hits the specified version. + * @returns {Object} The updated glTF asset. + * + * @private + */ +function updateVersion(gltf, options) { + options = defaultValue(options, defaultValue.EMPTY_OBJECT); + var targetVersion = options.targetVersion; + var version = gltf.version; + + gltf.asset = defaultValue(gltf.asset, { + version: '1.0' + }); + + gltf.asset.version = defaultValue(gltf.asset.version, '1.0'); + version = defaultValue(version, gltf.asset.version).toString(); + + // Invalid version + if (!Object.prototype.hasOwnProperty.call(updateFunctions, version)) { + // Try truncating trailing version numbers, could be a number as well if it is 0.8 + if (defined(version)) { + version = version.substring(0, 3); + } + // Default to 1.0 if it cannot be determined if (!Object.prototype.hasOwnProperty.call(updateFunctions, version)) { - // Try truncating trailing version numbers, could be a number as well if it is 0.8 - if (defined(version)) { - version = version.substring(0, 3); - } - // Default to 1.0 if it cannot be determined - if (!Object.prototype.hasOwnProperty.call(updateFunctions, version)) { - version = '1.0'; - } + version = '1.0'; } + } - var updateFunction = updateFunctions[version]; + var updateFunction = updateFunctions[version]; - while (defined(updateFunction)) { - if (version === targetVersion) { - break; - } - updateFunction(gltf, options); - version = gltf.asset.version; - updateFunction = updateFunctions[version]; + while (defined(updateFunction)) { + if (version === targetVersion) { + break; } - return gltf; + updateFunction(gltf, options); + version = gltf.asset.version; + updateFunction = updateFunctions[version]; } - - function updateInstanceTechniques(gltf) { - var materials = gltf.materials; - for (var materialId in materials) { - if (Object.prototype.hasOwnProperty.call(materials, materialId)) { - var material = materials[materialId]; - var instanceTechnique = material.instanceTechnique; - if (defined(instanceTechnique)) { - material.technique = instanceTechnique.technique; - material.values = instanceTechnique.values; - delete material.instanceTechnique; - } + return gltf; +} + +function updateInstanceTechniques(gltf) { + var materials = gltf.materials; + for (var materialId in materials) { + if (Object.prototype.hasOwnProperty.call(materials, materialId)) { + var material = materials[materialId]; + var instanceTechnique = material.instanceTechnique; + if (defined(instanceTechnique)) { + material.technique = instanceTechnique.technique; + material.values = instanceTechnique.values; + delete material.instanceTechnique; } } } - - function setPrimitiveModes(gltf) { - var meshes = gltf.meshes; - for (var meshId in meshes) { - if (Object.prototype.hasOwnProperty.call(meshes, meshId)) { - var mesh = meshes[meshId]; - var primitives = mesh.primitives; - if (defined(primitives)) { - var primitivesLength = primitives.length; - for (var i = 0; i < primitivesLength; ++i) { - var primitive = primitives[i]; - var defaultMode = defaultValue(primitive.primitive, WebGLConstants.TRIANGLES); - primitive.mode = defaultValue(primitive.mode, defaultMode); - delete primitive.primitive; - } +} + +function setPrimitiveModes(gltf) { + var meshes = gltf.meshes; + for (var meshId in meshes) { + if (Object.prototype.hasOwnProperty.call(meshes, meshId)) { + var mesh = meshes[meshId]; + var primitives = mesh.primitives; + if (defined(primitives)) { + var primitivesLength = primitives.length; + for (var i = 0; i < primitivesLength; ++i) { + var primitive = primitives[i]; + var defaultMode = defaultValue(primitive.primitive, WebGLConstants.TRIANGLES); + primitive.mode = defaultValue(primitive.mode, defaultMode); + delete primitive.primitive; } } } } - - function updateNodes(gltf) { - var nodes = gltf.nodes; - var axis = new Cartesian3(); - var quat = new Quaternion(); - for (var nodeId in nodes) { - if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) { - var node = nodes[nodeId]; - if (defined(node.rotation)) { - var rotation = node.rotation; - Cartesian3.fromArray(rotation, 0, axis); - Quaternion.fromAxisAngle(axis, rotation[3], quat); - node.rotation = [quat.x, quat.y, quat.z, quat.w]; - } - var instanceSkin = node.instanceSkin; - if (defined(instanceSkin)) { - node.skeletons = instanceSkin.skeletons; - node.skin = instanceSkin.skin; - node.meshes = instanceSkin.meshes; - delete node.instanceSkin; - } +} + +function updateNodes(gltf) { + var nodes = gltf.nodes; + var axis = new Cartesian3(); + var quat = new Quaternion(); + for (var nodeId in nodes) { + if (Object.prototype.hasOwnProperty.call(nodes, nodeId)) { + var node = nodes[nodeId]; + if (defined(node.rotation)) { + var rotation = node.rotation; + Cartesian3.fromArray(rotation, 0, axis); + Quaternion.fromAxisAngle(axis, rotation[3], quat); + node.rotation = [quat.x, quat.y, quat.z, quat.w]; + } + var instanceSkin = node.instanceSkin; + if (defined(instanceSkin)) { + node.skeletons = instanceSkin.skeletons; + node.skin = instanceSkin.skin; + node.meshes = instanceSkin.meshes; + delete node.instanceSkin; } } } - - function updateAnimations(gltf) { - var animations = gltf.animations; - var accessors = gltf.accessors; - var bufferViews = gltf.bufferViews; - var buffers = gltf.buffers; - var updatedAccessors = {}; - var axis = new Cartesian3(); - var quat = new Quaternion(); - for (var animationId in animations) { - if (Object.prototype.hasOwnProperty.call(animations, animationId)) { - var animation = animations[animationId]; - var channels = animation.channels; - var parameters = animation.parameters; - var samplers = animation.samplers; - if (defined(channels)) { - var channelsLength = channels.length; - for (var i = 0; i < channelsLength; ++i) { - var channel = channels[i]; - if (channel.target.path === 'rotation') { - var accessorId = parameters[samplers[channel.sampler].output]; - if (defined(updatedAccessors[accessorId])) { - continue; - } - updatedAccessors[accessorId] = true; - var accessor = accessors[accessorId]; - var bufferView = bufferViews[accessor.bufferView]; - var buffer = buffers[bufferView.buffer]; - var source = buffer.extras._pipeline.source; - var byteOffset = source.byteOffset + bufferView.byteOffset + accessor.byteOffset; - var componentType = accessor.componentType; - var count = accessor.count; - var componentsLength = numberOfComponentsForType(accessor.type); - var length = accessor.count * componentsLength; - var typedArray = ComponentDatatype.createArrayBufferView(componentType, source.buffer, byteOffset, length); - - for (var j = 0; j < count; j++) { - var offset = j * componentsLength; - Cartesian3.unpack(typedArray, offset, axis); - var angle = typedArray[offset + 3]; - Quaternion.fromAxisAngle(axis, angle, quat); - Quaternion.pack(quat, typedArray, offset); - } +} + +function updateAnimations(gltf) { + var animations = gltf.animations; + var accessors = gltf.accessors; + var bufferViews = gltf.bufferViews; + var buffers = gltf.buffers; + var updatedAccessors = {}; + var axis = new Cartesian3(); + var quat = new Quaternion(); + for (var animationId in animations) { + if (Object.prototype.hasOwnProperty.call(animations, animationId)) { + var animation = animations[animationId]; + var channels = animation.channels; + var parameters = animation.parameters; + var samplers = animation.samplers; + if (defined(channels)) { + var channelsLength = channels.length; + for (var i = 0; i < channelsLength; ++i) { + var channel = channels[i]; + if (channel.target.path === 'rotation') { + var accessorId = parameters[samplers[channel.sampler].output]; + if (defined(updatedAccessors[accessorId])) { + continue; + } + updatedAccessors[accessorId] = true; + var accessor = accessors[accessorId]; + var bufferView = bufferViews[accessor.bufferView]; + var buffer = buffers[bufferView.buffer]; + var source = buffer.extras._pipeline.source; + var byteOffset = source.byteOffset + bufferView.byteOffset + accessor.byteOffset; + var componentType = accessor.componentType; + var count = accessor.count; + var componentsLength = numberOfComponentsForType(accessor.type); + var length = accessor.count * componentsLength; + var typedArray = ComponentDatatype.createArrayBufferView(componentType, source.buffer, byteOffset, length); + + for (var j = 0; j < count; j++) { + var offset = j * componentsLength; + Cartesian3.unpack(typedArray, offset, axis); + var angle = typedArray[offset + 3]; + Quaternion.fromAxisAngle(axis, angle, quat); + Quaternion.pack(quat, typedArray, offset); } } } } } } - - function removeTechniquePasses(gltf) { - var techniques = gltf.techniques; - for (var techniqueId in techniques) { - if (Object.prototype.hasOwnProperty.call(techniques, techniqueId)) { - var technique = techniques[techniqueId]; - var passes = technique.passes; - if (defined(passes)) { - var passName = defaultValue(technique.pass, 'defaultPass'); - if (Object.prototype.hasOwnProperty.call(passes, passName)) { - var pass = passes[passName]; - var instanceProgram = pass.instanceProgram; - technique.attributes = defaultValue(technique.attributes, instanceProgram.attributes); - technique.program = defaultValue(technique.program, instanceProgram.program); - technique.uniforms = defaultValue(technique.uniforms, instanceProgram.uniforms); - technique.states = defaultValue(technique.states, pass.states); - } - delete technique.passes; - delete technique.pass; - } +} + +function removeTechniquePasses(gltf) { + var techniques = gltf.techniques; + for (var techniqueId in techniques) { + if (Object.prototype.hasOwnProperty.call(techniques, techniqueId)) { + var technique = techniques[techniqueId]; + var passes = technique.passes; + if (defined(passes)) { + var passName = defaultValue(technique.pass, 'defaultPass'); + if (Object.prototype.hasOwnProperty.call(passes, passName)) { + var pass = passes[passName]; + var instanceProgram = pass.instanceProgram; + technique.attributes = defaultValue(technique.attributes, instanceProgram.attributes); + technique.program = defaultValue(technique.program, instanceProgram.program); + technique.uniforms = defaultValue(technique.uniforms, instanceProgram.uniforms); + technique.states = defaultValue(technique.states, pass.states); + } + delete technique.passes; + delete technique.pass; } } } +} - function glTF08to10(gltf) { - if (!defined(gltf.asset)) { - gltf.asset = {}; - } - var asset = gltf.asset; - asset.version = '1.0'; - // Profile should be an object, not a string - if (typeof asset.profile === 'string') { - var split = asset.profile.split(' '); - asset.profile = { - api: split[0], - version: split[1] - }; - } else { - asset.profile = {}; - } - - // Version property should be in asset, not on the root element - if (defined(gltf.version)) { - delete gltf.version; - } - // material.instanceTechnique properties should be directly on the material - updateInstanceTechniques(gltf); - // primitive.primitive should be primitive.mode - setPrimitiveModes(gltf); - // Node rotation should be quaternion, not axis-angle - // node.instanceSkin is deprecated - updateNodes(gltf); - // Animations that target rotations should be quaternion, not axis-angle - updateAnimations(gltf); - // technique.pass and techniques.passes are deprecated - removeTechniquePasses(gltf); - // gltf.allExtensions -> extensionsUsed - if (defined(gltf.allExtensions)) { - gltf.extensionsUsed = gltf.allExtensions; - delete gltf.allExtensions; - } - // gltf.lights -> khrMaterialsCommon.lights - if (defined(gltf.lights)) { - var extensions = defaultValue(gltf.extensions, {}); - gltf.extensions = extensions; - var materialsCommon = defaultValue(extensions.KHR_materials_common, {}); - extensions.KHR_materials_common = materialsCommon; - materialsCommon.lights = gltf.lights; - delete gltf.lights; - addExtensionsUsed(gltf, 'KHR_materials_common'); - } +function glTF08to10(gltf) { + if (!defined(gltf.asset)) { + gltf.asset = {}; + } + var asset = gltf.asset; + asset.version = '1.0'; + // Profile should be an object, not a string + if (typeof asset.profile === 'string') { + var split = asset.profile.split(' '); + asset.profile = { + api: split[0], + version: split[1] + }; + } else { + asset.profile = {}; } - function removeAnimationSamplersIndirection(gltf) { - var animations = gltf.animations; - for (var animationId in animations) { - if (Object.prototype.hasOwnProperty.call(animations, animationId)) { - var animation = animations[animationId]; - var parameters = animation.parameters; - if (defined(parameters)) { - var samplers = animation.samplers; - for (var samplerId in samplers) { - if (Object.prototype.hasOwnProperty.call(samplers, samplerId)) { - var sampler = samplers[samplerId]; - sampler.input = parameters[sampler.input]; - sampler.output = parameters[sampler.output]; - } + // Version property should be in asset, not on the root element + if (defined(gltf.version)) { + delete gltf.version; + } + // material.instanceTechnique properties should be directly on the material + updateInstanceTechniques(gltf); + // primitive.primitive should be primitive.mode + setPrimitiveModes(gltf); + // Node rotation should be quaternion, not axis-angle + // node.instanceSkin is deprecated + updateNodes(gltf); + // Animations that target rotations should be quaternion, not axis-angle + updateAnimations(gltf); + // technique.pass and techniques.passes are deprecated + removeTechniquePasses(gltf); + // gltf.allExtensions -> extensionsUsed + if (defined(gltf.allExtensions)) { + gltf.extensionsUsed = gltf.allExtensions; + delete gltf.allExtensions; + } + // gltf.lights -> khrMaterialsCommon.lights + if (defined(gltf.lights)) { + var extensions = defaultValue(gltf.extensions, {}); + gltf.extensions = extensions; + var materialsCommon = defaultValue(extensions.KHR_materials_common, {}); + extensions.KHR_materials_common = materialsCommon; + materialsCommon.lights = gltf.lights; + delete gltf.lights; + addExtensionsUsed(gltf, 'KHR_materials_common'); + } +} + +function removeAnimationSamplersIndirection(gltf) { + var animations = gltf.animations; + for (var animationId in animations) { + if (Object.prototype.hasOwnProperty.call(animations, animationId)) { + var animation = animations[animationId]; + var parameters = animation.parameters; + if (defined(parameters)) { + var samplers = animation.samplers; + for (var samplerId in samplers) { + if (Object.prototype.hasOwnProperty.call(samplers, samplerId)) { + var sampler = samplers[samplerId]; + sampler.input = parameters[sampler.input]; + sampler.output = parameters[sampler.output]; } - delete animation.parameters; } + delete animation.parameters; } } } - - function objectToArray(object, mapping) { - var array = []; - for (var id in object) { - if (Object.prototype.hasOwnProperty.call(object, id)) { - var value = object[id]; - mapping[id] = array.length; - array.push(value); - if (!defined(value.name)) { - value.name = id; - } +} + +function objectToArray(object, mapping) { + var array = []; + for (var id in object) { + if (Object.prototype.hasOwnProperty.call(object, id)) { + var value = object[id]; + mapping[id] = array.length; + array.push(value); + if (!defined(value.name)) { + value.name = id; } } - return array; } + return array; +} + +function objectsToArrays(gltf) { + var i; + var globalMapping = { + accessors: {}, + animations: {}, + buffers: {}, + bufferViews: {}, + cameras: {}, + images: {}, + materials: {}, + meshes: {}, + nodes: {}, + programs: {}, + samplers: {}, + scenes: {}, + shaders: {}, + skins: {}, + textures: {}, + techniques: {} + }; - function objectsToArrays(gltf) { - var i; - var globalMapping = { - accessors: {}, - animations: {}, - buffers: {}, - bufferViews: {}, - cameras: {}, - images: {}, - materials: {}, - meshes: {}, - nodes: {}, - programs: {}, - samplers: {}, - scenes: {}, - shaders: {}, - skins: {}, - textures: {}, - techniques: {} - }; - - // Map joint names to id names - var jointName; - var jointNameToId = {}; - var nodes = gltf.nodes; - for (var id in nodes) { - if (Object.prototype.hasOwnProperty.call(nodes, id)) { - jointName = nodes[id].jointName; - if (defined(jointName)) { - jointNameToId[jointName] = id; - } + // Map joint names to id names + var jointName; + var jointNameToId = {}; + var nodes = gltf.nodes; + for (var id in nodes) { + if (Object.prototype.hasOwnProperty.call(nodes, id)) { + jointName = nodes[id].jointName; + if (defined(jointName)) { + jointNameToId[jointName] = id; } } + } - // Convert top level objects to arrays - for (var topLevelId in gltf) { - if (Object.prototype.hasOwnProperty.call(gltf, topLevelId) && defined(globalMapping[topLevelId])) { - var objectMapping = {}; - var object = gltf[topLevelId]; - gltf[topLevelId] = objectToArray(object, objectMapping); - globalMapping[topLevelId] = objectMapping; - } + // Convert top level objects to arrays + for (var topLevelId in gltf) { + if (Object.prototype.hasOwnProperty.call(gltf, topLevelId) && defined(globalMapping[topLevelId])) { + var objectMapping = {}; + var object = gltf[topLevelId]; + gltf[topLevelId] = objectToArray(object, objectMapping); + globalMapping[topLevelId] = objectMapping; } + } - // Remap joint names to array indexes - for (jointName in jointNameToId) { - if (Object.prototype.hasOwnProperty.call(jointNameToId, jointName)) { - jointNameToId[jointName] = globalMapping.nodes[jointNameToId[jointName]]; - } + // Remap joint names to array indexes + for (jointName in jointNameToId) { + if (Object.prototype.hasOwnProperty.call(jointNameToId, jointName)) { + jointNameToId[jointName] = globalMapping.nodes[jointNameToId[jointName]]; } + } - // Fix references - if (defined(gltf.scene)) { - gltf.scene = globalMapping.scenes[gltf.scene]; + // Fix references + if (defined(gltf.scene)) { + gltf.scene = globalMapping.scenes[gltf.scene]; + } + ForEach.bufferView(gltf, function(bufferView) { + if (defined(bufferView.buffer)) { + bufferView.buffer = globalMapping.buffers[bufferView.buffer]; } - ForEach.bufferView(gltf, function(bufferView) { - if (defined(bufferView.buffer)) { - bufferView.buffer = globalMapping.buffers[bufferView.buffer]; - } - }); - ForEach.accessor(gltf, function(accessor) { - if (defined(accessor.bufferView)) { - accessor.bufferView = globalMapping.bufferViews[accessor.bufferView]; - } - }); - ForEach.shader(gltf, function(shader) { - var extensions = shader.extensions; - if (defined(extensions)) { - var binaryGltf = extensions.KHR_binary_glTF; - if (defined(binaryGltf)) { - shader.bufferView = globalMapping.bufferViews[binaryGltf.bufferView]; - delete extensions.KHR_binary_glTF; - } - if (Object.keys(extensions).length === 0) { - delete shader.extensions; - } + }); + ForEach.accessor(gltf, function(accessor) { + if (defined(accessor.bufferView)) { + accessor.bufferView = globalMapping.bufferViews[accessor.bufferView]; + } + }); + ForEach.shader(gltf, function(shader) { + var extensions = shader.extensions; + if (defined(extensions)) { + var binaryGltf = extensions.KHR_binary_glTF; + if (defined(binaryGltf)) { + shader.bufferView = globalMapping.bufferViews[binaryGltf.bufferView]; + delete extensions.KHR_binary_glTF; + } + if (Object.keys(extensions).length === 0) { + delete shader.extensions; } - }); - ForEach.program(gltf, function(program) { - if (defined(program.vertexShader)) { - program.vertexShader = globalMapping.shaders[program.vertexShader]; + } + }); + ForEach.program(gltf, function(program) { + if (defined(program.vertexShader)) { + program.vertexShader = globalMapping.shaders[program.vertexShader]; + } + if (defined(program.fragmentShader)) { + program.fragmentShader = globalMapping.shaders[program.fragmentShader]; + } + }); + ForEach.technique(gltf, function(technique) { + if (defined(technique.program)) { + technique.program = globalMapping.programs[technique.program]; + } + ForEach.techniqueParameter(technique, function(parameter) { + if (defined(parameter.node)) { + parameter.node = globalMapping.nodes[parameter.node]; } - if (defined(program.fragmentShader)) { - program.fragmentShader = globalMapping.shaders[program.fragmentShader]; + var value = parameter.value; + if (typeof value === 'string') { + parameter.value = { + index: globalMapping.textures[value] + }; } }); - ForEach.technique(gltf, function(technique) { - if (defined(technique.program)) { - technique.program = globalMapping.programs[technique.program]; + }); + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + if (defined(primitive.indices)) { + primitive.indices = globalMapping.accessors[primitive.indices]; } - ForEach.techniqueParameter(technique, function(parameter) { - if (defined(parameter.node)) { - parameter.node = globalMapping.nodes[parameter.node]; - } - var value = parameter.value; - if (typeof value === 'string') { - parameter.value = { - index: globalMapping.textures[value] - }; - } - }); - }); - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - if (defined(primitive.indices)) { - primitive.indices = globalMapping.accessors[primitive.indices]; - } - ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) { - primitive.attributes[semantic] = globalMapping.accessors[accessorId]; - }); - if (defined(primitive.material)) { - primitive.material = globalMapping.materials[primitive.material]; - } + ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) { + primitive.attributes[semantic] = globalMapping.accessors[accessorId]; }); - }); - ForEach.node(gltf, function(node) { - var children = node.children; - if (defined(children)) { - var childrenLength = children.length; - for (i = 0; i < childrenLength; ++i) { - children[i] = globalMapping.nodes[children[i]]; - } - } - if (defined(node.meshes)) { - // Split out meshes on nodes - var meshes = node.meshes; - var meshesLength = meshes.length; - if (meshesLength > 0) { - node.mesh = globalMapping.meshes[meshes[0]]; - for (i = 1; i < meshesLength; ++i) { - var meshNode = { - mesh: globalMapping.meshes[meshes[i]] - }; - var meshNodeId = addToArray(gltf.nodes, meshNode); - if (!defined(children)) { - children = []; - node.children = children; - } - children.push(meshNodeId); - } - } - delete node.meshes; - } - if (defined(node.camera)) { - node.camera = globalMapping.cameras[node.camera]; - } - if (defined(node.skin)) { - node.skin = globalMapping.skins[node.skin]; - } - if (defined(node.skeletons)) { - // Assign skeletons to skins - var skeletons = node.skeletons; - var skeletonsLength = skeletons.length; - if ((skeletonsLength > 0) && defined(node.skin)) { - var skin = gltf.skins[node.skin]; - skin.skeleton = globalMapping.nodes[skeletons[0]]; - } - delete node.skeletons; - } - if (defined(node.jointName)) { - delete node.jointName; - } - }); - ForEach.skin(gltf, function(skin) { - if (defined(skin.inverseBindMatrices)) { - skin.inverseBindMatrices = globalMapping.accessors[skin.inverseBindMatrices]; - } - var jointNames = skin.jointNames; - if (defined(jointNames)) { - var joints = []; - var jointNamesLength = jointNames.length; - for (i = 0; i < jointNamesLength; ++i) { - joints[i] = jointNameToId[jointNames[i]]; - } - skin.joints = joints; - delete skin.jointNames; + if (defined(primitive.material)) { + primitive.material = globalMapping.materials[primitive.material]; } }); - ForEach.scene(gltf, function(scene) { - var sceneNodes = scene.nodes; - if (defined(sceneNodes)) { - var sceneNodesLength = sceneNodes.length; - for (i = 0; i < sceneNodesLength; ++i) { - sceneNodes[i] = globalMapping.nodes[sceneNodes[i]]; - } + }); + ForEach.node(gltf, function(node) { + var children = node.children; + if (defined(children)) { + var childrenLength = children.length; + for (i = 0; i < childrenLength; ++i) { + children[i] = globalMapping.nodes[children[i]]; } - }); - ForEach.animation(gltf, function(animation) { - var samplerMapping = {}; - animation.samplers = objectToArray(animation.samplers, samplerMapping); - ForEach.animationSampler(animation, function(sampler) { - sampler.input = globalMapping.accessors[sampler.input]; - sampler.output = globalMapping.accessors[sampler.output]; - }); - ForEach.animationChannel(animation, function(channel) { - channel.sampler = samplerMapping[channel.sampler]; - var target = channel.target; - if (defined(target)) { - target.node = globalMapping.nodes[target.id]; - delete target.id; - } - }); - }); - ForEach.material(gltf, function(material) { - if (defined(material.technique)) { - material.technique = globalMapping.techniques[material.technique]; - } - ForEach.materialValue(material, function(value, name) { - if (typeof value === 'string') { - material.values[name] = { - index: globalMapping.textures[value] + } + if (defined(node.meshes)) { + // Split out meshes on nodes + var meshes = node.meshes; + var meshesLength = meshes.length; + if (meshesLength > 0) { + node.mesh = globalMapping.meshes[meshes[0]]; + for (i = 1; i < meshesLength; ++i) { + var meshNode = { + mesh: globalMapping.meshes[meshes[i]] }; - } - }); - var extensions = material.extensions; - if (defined(extensions)) { - var materialsCommon = extensions.KHR_materials_common; - if (defined(materialsCommon)) { - ForEach.materialValue(materialsCommon, function(value, name) { - if (typeof value === 'string') { - materialsCommon.values[name] = { - index: globalMapping.textures[value] - }; - } - }); + var meshNodeId = addToArray(gltf.nodes, meshNode); + if (!defined(children)) { + children = []; + node.children = children; + } + children.push(meshNodeId); } } - }); - ForEach.image(gltf, function(image) { - var extensions = image.extensions; - if (defined(extensions)) { - var binaryGltf = extensions.KHR_binary_glTF; - if (defined(binaryGltf)) { - image.bufferView = globalMapping.bufferViews[binaryGltf.bufferView]; - image.mimeType = binaryGltf.mimeType; - delete extensions.KHR_binary_glTF; - } - if (Object.keys(extensions).length === 0) { - delete image.extensions; - } + delete node.meshes; + } + if (defined(node.camera)) { + node.camera = globalMapping.cameras[node.camera]; + } + if (defined(node.skin)) { + node.skin = globalMapping.skins[node.skin]; + } + if (defined(node.skeletons)) { + // Assign skeletons to skins + var skeletons = node.skeletons; + var skeletonsLength = skeletons.length; + if ((skeletonsLength > 0) && defined(node.skin)) { + var skin = gltf.skins[node.skin]; + skin.skeleton = globalMapping.nodes[skeletons[0]]; + } + delete node.skeletons; + } + if (defined(node.jointName)) { + delete node.jointName; + } + }); + ForEach.skin(gltf, function(skin) { + if (defined(skin.inverseBindMatrices)) { + skin.inverseBindMatrices = globalMapping.accessors[skin.inverseBindMatrices]; + } + var jointNames = skin.jointNames; + if (defined(jointNames)) { + var joints = []; + var jointNamesLength = jointNames.length; + for (i = 0; i < jointNamesLength; ++i) { + joints[i] = jointNameToId[jointNames[i]]; + } + skin.joints = joints; + delete skin.jointNames; + } + }); + ForEach.scene(gltf, function(scene) { + var sceneNodes = scene.nodes; + if (defined(sceneNodes)) { + var sceneNodesLength = sceneNodes.length; + for (i = 0; i < sceneNodesLength; ++i) { + sceneNodes[i] = globalMapping.nodes[sceneNodes[i]]; } - ForEach.compressedImage(image, function(compressedImage) { - var compressedExtensions = compressedImage.extensions; - if (defined(compressedExtensions)) { - var compressedBinaryGltf = compressedExtensions.KHR_binary_glTF; - if (defined(compressedBinaryGltf)) { - compressedImage.bufferView = globalMapping.bufferViews[compressedBinaryGltf.bufferView]; - compressedImage.mimeType = compressedBinaryGltf.mimeType; - delete compressedExtensions.KHR_binary_glTF; - } - if (Object.keys(extensions).length === 0) { - delete compressedImage.extensions; + } + }); + ForEach.animation(gltf, function(animation) { + var samplerMapping = {}; + animation.samplers = objectToArray(animation.samplers, samplerMapping); + ForEach.animationSampler(animation, function(sampler) { + sampler.input = globalMapping.accessors[sampler.input]; + sampler.output = globalMapping.accessors[sampler.output]; + }); + ForEach.animationChannel(animation, function(channel) { + channel.sampler = samplerMapping[channel.sampler]; + var target = channel.target; + if (defined(target)) { + target.node = globalMapping.nodes[target.id]; + delete target.id; + } + }); + }); + ForEach.material(gltf, function(material) { + if (defined(material.technique)) { + material.technique = globalMapping.techniques[material.technique]; + } + ForEach.materialValue(material, function(value, name) { + if (typeof value === 'string') { + material.values[name] = { + index: globalMapping.textures[value] + }; + } + }); + var extensions = material.extensions; + if (defined(extensions)) { + var materialsCommon = extensions.KHR_materials_common; + if (defined(materialsCommon)) { + ForEach.materialValue(materialsCommon, function(value, name) { + if (typeof value === 'string') { + materialsCommon.values[name] = { + index: globalMapping.textures[value] + }; } - } - }); - }); - ForEach.texture(gltf, function(texture) { - if (defined(texture.sampler)) { - texture.sampler = globalMapping.samplers[texture.sampler]; + }); } - if (defined(texture.source)) { - texture.source = globalMapping.images[texture.source]; + } + }); + ForEach.image(gltf, function(image) { + var extensions = image.extensions; + if (defined(extensions)) { + var binaryGltf = extensions.KHR_binary_glTF; + if (defined(binaryGltf)) { + image.bufferView = globalMapping.bufferViews[binaryGltf.bufferView]; + image.mimeType = binaryGltf.mimeType; + delete extensions.KHR_binary_glTF; + } + if (Object.keys(extensions).length === 0) { + delete image.extensions; } - }); - } + } + }); + ForEach.texture(gltf, function(texture) { + if (defined(texture.sampler)) { + texture.sampler = globalMapping.samplers[texture.sampler]; + } + if (defined(texture.source)) { + texture.source = globalMapping.images[texture.source]; + } + }); +} - function removeAnimationSamplerNames(gltf) { - ForEach.animation(gltf, function(animation) { - ForEach.animationSampler(animation, function(sampler) { - delete sampler.name; - }); +function removeAnimationSamplerNames(gltf) { + ForEach.animation(gltf, function(animation) { + ForEach.animationSampler(animation, function(sampler) { + delete sampler.name; }); - } + }); +} - function removeEmptyArrays(gltf) { - for (var topLevelId in gltf) { - if (Object.prototype.hasOwnProperty.call(gltf, topLevelId)) { - var array = gltf[topLevelId]; - if (Array.isArray(array) && array.length === 0) { - delete gltf[topLevelId]; - } +function removeEmptyArrays(gltf) { + for (var topLevelId in gltf) { + if (Object.prototype.hasOwnProperty.call(gltf, topLevelId)) { + var array = gltf[topLevelId]; + if (Array.isArray(array) && array.length === 0) { + delete gltf[topLevelId]; } } - ForEach.node(gltf, function(node) { - if (defined(node.children) && node.children.length === 0) { - delete node.children; - } - }); - } - - function stripAsset(gltf) { - var asset = gltf.asset; - delete asset.profile; - delete asset.premultipliedAlpha; } - - var knownExtensions = { - CESIUM_RTC: true, - KHR_materials_common: true, - WEB3D_quantized_attributes: true - }; - function requireKnownExtensions(gltf) { - var extensionsUsed = gltf.extensionsUsed; - gltf.extensionsRequired = defaultValue(gltf.extensionsRequired, []); - if (defined(extensionsUsed)) { - var extensionsUsedLength = extensionsUsed.length; - for (var i = 0; i < extensionsUsedLength; ++i) { - var extension = extensionsUsed[i]; - if (defined(knownExtensions[extension])) { - gltf.extensionsRequired.push(extension); - } + ForEach.node(gltf, function(node) { + if (defined(node.children) && node.children.length === 0) { + delete node.children; + } + }); +} + +function stripAsset(gltf) { + var asset = gltf.asset; + delete asset.profile; + delete asset.premultipliedAlpha; +} + +var knownExtensions = { + CESIUM_RTC: true, + KHR_materials_common: true, + WEB3D_quantized_attributes: true +}; +function requireKnownExtensions(gltf) { + var extensionsUsed = gltf.extensionsUsed; + gltf.extensionsRequired = defaultValue(gltf.extensionsRequired, []); + if (defined(extensionsUsed)) { + var extensionsUsedLength = extensionsUsed.length; + for (var i = 0; i < extensionsUsedLength; ++i) { + var extension = extensionsUsed[i]; + if (defined(knownExtensions[extension])) { + gltf.extensionsRequired.push(extension); } } } - - function removeBufferType(gltf) { - ForEach.buffer(gltf, function(buffer) { - delete buffer.type; - }); - } - - function removeTextureProperties(gltf) { - ForEach.texture(gltf, function(texture) { - delete texture.format; - delete texture.internalFormat; - delete texture.target; - delete texture.type; - }); - } - - function requireAttributeSetIndex(gltf) { - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) { - if (semantic === 'TEXCOORD') { - primitive.attributes.TEXCOORD_0 = accessorId; - } else if (semantic === 'COLOR') { - primitive.attributes.COLOR_0 = accessorId; - } - }); - delete primitive.attributes.TEXCOORD; - delete primitive.attributes.COLOR; - }); - }); - ForEach.technique(gltf, function(technique) { - ForEach.techniqueParameter(technique, function(parameter) { - var semantic = parameter.semantic; - if (defined(semantic)) { - if (semantic === 'TEXCOORD') { - parameter.semantic = 'TEXCOORD_0'; - } else if (semantic === 'COLOR') { - parameter.semantic = 'COLOR_0'; - } +} + +function removeBufferType(gltf) { + ForEach.buffer(gltf, function(buffer) { + delete buffer.type; + }); +} + +function removeTextureProperties(gltf) { + ForEach.texture(gltf, function(texture) { + delete texture.format; + delete texture.internalFormat; + delete texture.target; + delete texture.type; + }); +} + +function requireAttributeSetIndex(gltf) { + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) { + if (semantic === 'TEXCOORD') { + primitive.attributes.TEXCOORD_0 = accessorId; + } else if (semantic === 'COLOR') { + primitive.attributes.COLOR_0 = accessorId; } }); - }); - } - - var knownSemantics = { - POSITION: true, - NORMAL: true, - TANGENT: true - }; - var indexedSemantics = { - COLOR: 'COLOR', - JOINT : 'JOINTS', - JOINTS: 'JOINTS', - TEXCOORD: 'TEXCOORD', - WEIGHT: 'WEIGHTS', - WEIGHTS: 'WEIGHTS' - }; - function underscoreApplicationSpecificSemantics(gltf) { - var mappedSemantics = {}; - ForEach.mesh(gltf, function(mesh) { - ForEach.meshPrimitive(mesh, function(primitive) { - /*eslint-disable no-unused-vars*/ - ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) { - if (semantic.charAt(0) !== '_') { - var setIndex = semantic.search(/_[0-9]+/g); - var strippedSemantic = semantic; - var suffix = '_0'; - if (setIndex >= 0) { - strippedSemantic = semantic.substring(0, setIndex); - suffix = semantic.substring(setIndex); - } - var newSemantic; - var indexedSemantic = indexedSemantics[strippedSemantic]; - if (defined(indexedSemantic)) { - newSemantic = indexedSemantic + suffix; - mappedSemantics[semantic] = newSemantic; - } else if (!defined(knownSemantics[strippedSemantic])) { - newSemantic = '_' + semantic; - mappedSemantics[semantic] = newSemantic; - } + delete primitive.attributes.TEXCOORD; + delete primitive.attributes.COLOR; + }); + }); + ForEach.technique(gltf, function(technique) { + ForEach.techniqueParameter(technique, function(parameter) { + var semantic = parameter.semantic; + if (defined(semantic)) { + if (semantic === 'TEXCOORD') { + parameter.semantic = 'TEXCOORD_0'; + } else if (semantic === 'COLOR') { + parameter.semantic = 'COLOR_0'; + } + } + }); + }); +} + +var knownSemantics = { + POSITION: true, + NORMAL: true, + TANGENT: true +}; +var indexedSemantics = { + COLOR: 'COLOR', + JOINT : 'JOINTS', + JOINTS: 'JOINTS', + TEXCOORD: 'TEXCOORD', + WEIGHT: 'WEIGHTS', + WEIGHTS: 'WEIGHTS' +}; +function underscoreApplicationSpecificSemantics(gltf) { + var mappedSemantics = {}; + ForEach.mesh(gltf, function(mesh) { + ForEach.meshPrimitive(mesh, function(primitive) { + /*eslint-disable no-unused-vars*/ + ForEach.meshPrimitiveAttribute(primitive, function(accessorId, semantic) { + if (semantic.charAt(0) !== '_') { + var setIndex = semantic.search(/_[0-9]+/g); + var strippedSemantic = semantic; + var suffix = '_0'; + if (setIndex >= 0) { + strippedSemantic = semantic.substring(0, setIndex); + suffix = semantic.substring(setIndex); } - }); - for (var semantic in mappedSemantics) { - if (Object.prototype.hasOwnProperty.call(mappedSemantics, semantic)) { - var mappedSemantic = mappedSemantics[semantic]; - var accessorId = primitive.attributes[semantic]; - if (defined(accessorId)) { - delete primitive.attributes[semantic]; - primitive.attributes[mappedSemantic] = accessorId; - } + var newSemantic; + var indexedSemantic = indexedSemantics[strippedSemantic]; + if (defined(indexedSemantic)) { + newSemantic = indexedSemantic + suffix; + mappedSemantics[semantic] = newSemantic; + } else if (!defined(knownSemantics[strippedSemantic])) { + newSemantic = '_' + semantic; + mappedSemantics[semantic] = newSemantic; } } }); - }); - ForEach.technique(gltf, function(technique) { - ForEach.techniqueParameter(technique, function(parameter) { - var mappedSemantic = mappedSemantics[parameter.semantic]; - if (defined(mappedSemantic)) { - parameter.semantic = mappedSemantic; - } - }); - }); - } - - function clampCameraParameters(gltf) { - ForEach.camera(gltf, function(camera) { - var perspective = camera.perspective; - if (defined(perspective)) { - var aspectRatio = perspective.aspectRatio; - if (defined(aspectRatio) && aspectRatio === 0.0) { - delete perspective.aspectRatio; - } - var yfov = perspective.yfov; - if (defined(yfov) && yfov === 0.0) { - perspective.yfov = 1.0; + for (var semantic in mappedSemantics) { + if (Object.prototype.hasOwnProperty.call(mappedSemantics, semantic)) { + var mappedSemantic = mappedSemantics[semantic]; + var accessorId = primitive.attributes[semantic]; + if (defined(accessorId)) { + delete primitive.attributes[semantic]; + primitive.attributes[mappedSemantic] = accessorId; + } } } }); - } - - function computeAccessorByteStride(gltf, accessor) { - return (defined(accessor.byteStride) && accessor.byteStride !== 0) ? accessor.byteStride : getAccessorByteStride(gltf, accessor); - } - - function requireByteLength(gltf) { - ForEach.buffer(gltf, function(buffer) { - if (!defined(buffer.byteLength)) { - buffer.byteLength = buffer.extras._pipeline.source.length; + }); + ForEach.technique(gltf, function(technique) { + ForEach.techniqueParameter(technique, function(parameter) { + var mappedSemantic = mappedSemantics[parameter.semantic]; + if (defined(mappedSemantic)) { + parameter.semantic = mappedSemantic; } }); - ForEach.accessor(gltf, function(accessor) { - var bufferViewId = accessor.bufferView; - if (defined(bufferViewId)) { - var bufferView = gltf.bufferViews[bufferViewId]; - var accessorByteStride = computeAccessorByteStride(gltf, accessor); - var accessorByteEnd = accessor.byteOffset + accessor.count * accessorByteStride; - bufferView.byteLength = Math.max(defaultValue(bufferView.byteLength, 0), accessorByteEnd); - } - }); - } + }); +} - function moveByteStrideToBufferView(gltf) { - var i; - var j; - var bufferView; - var bufferViews = gltf.bufferViews; - - var bufferViewHasVertexAttributes = {}; - ForEach.accessorContainingVertexAttributeData(gltf, function(accessorId) { - var accessor = gltf.accessors[accessorId]; - if (defined(accessor.bufferView)) { - bufferViewHasVertexAttributes[accessor.bufferView] = true; +function clampCameraParameters(gltf) { + ForEach.camera(gltf, function(camera) { + var perspective = camera.perspective; + if (defined(perspective)) { + var aspectRatio = perspective.aspectRatio; + if (defined(aspectRatio) && aspectRatio === 0.0) { + delete perspective.aspectRatio; } - }); - - // Map buffer views to a list of accessors - var bufferViewMap = {}; - ForEach.accessor(gltf, function(accessor) { - if (defined(accessor.bufferView)) { - bufferViewMap[accessor.bufferView] = defaultValue(bufferViewMap[accessor.bufferView], []); - bufferViewMap[accessor.bufferView].push(accessor); + var yfov = perspective.yfov; + if (defined(yfov) && yfov === 0.0) { + perspective.yfov = 1.0; } - }); + } + }); +} - // Split accessors with different byte strides - for (var bufferViewId in bufferViewMap) { - if (Object.prototype.hasOwnProperty.call(bufferViewMap, bufferViewId)) { - bufferView = bufferViews[bufferViewId]; - var accessors = bufferViewMap[bufferViewId]; - accessors.sort(function(a, b) { - return a.byteOffset - b.byteOffset; - }); - var currentByteOffset = 0; - var currentIndex = 0; - var accessorsLength = accessors.length; - for (i = 0; i < accessorsLength; ++i) { - var accessor = accessors[i]; - var accessorByteStride = computeAccessorByteStride(gltf, accessor); - var accessorByteOffset = accessor.byteOffset; - var accessorByteLength = accessor.count * accessorByteStride; - delete accessor.byteStride; - - var hasNextAccessor = (i < accessorsLength - 1); - var nextAccessorByteStride = hasNextAccessor ? computeAccessorByteStride(gltf, accessors[i + 1]) : undefined; - if (accessorByteStride !== nextAccessorByteStride) { - var newBufferView = clone(bufferView, true); - if (bufferViewHasVertexAttributes[bufferViewId]) { - newBufferView.byteStride = accessorByteStride; - } - newBufferView.byteOffset += currentByteOffset; - newBufferView.byteLength = accessorByteOffset + accessorByteLength - currentByteOffset; - var newBufferViewId = addToArray(bufferViews, newBufferView); - for (j = currentIndex; j <= i; ++j) { - accessor = accessors[j]; - accessor.bufferView = newBufferViewId; - accessor.byteOffset = accessor.byteOffset - currentByteOffset; - } - // Set current byte offset to next accessor's byte offset - currentByteOffset = hasNextAccessor ? accessors[i + 1].byteOffset : undefined; - currentIndex = i + 1; +function computeAccessorByteStride(gltf, accessor) { + return (defined(accessor.byteStride) && accessor.byteStride !== 0) ? accessor.byteStride : getAccessorByteStride(gltf, accessor); +} + +function requireByteLength(gltf) { + ForEach.buffer(gltf, function(buffer) { + if (!defined(buffer.byteLength)) { + buffer.byteLength = buffer.extras._pipeline.source.length; + } + }); + ForEach.accessor(gltf, function(accessor) { + var bufferViewId = accessor.bufferView; + if (defined(bufferViewId)) { + var bufferView = gltf.bufferViews[bufferViewId]; + var accessorByteStride = computeAccessorByteStride(gltf, accessor); + var accessorByteEnd = accessor.byteOffset + accessor.count * accessorByteStride; + bufferView.byteLength = Math.max(defaultValue(bufferView.byteLength, 0), accessorByteEnd); + } + }); +} + +function moveByteStrideToBufferView(gltf) { + var i; + var j; + var bufferView; + var bufferViews = gltf.bufferViews; + + var bufferViewHasVertexAttributes = {}; + ForEach.accessorContainingVertexAttributeData(gltf, function(accessorId) { + var accessor = gltf.accessors[accessorId]; + if (defined(accessor.bufferView)) { + bufferViewHasVertexAttributes[accessor.bufferView] = true; + } + }); + + // Map buffer views to a list of accessors + var bufferViewMap = {}; + ForEach.accessor(gltf, function(accessor) { + if (defined(accessor.bufferView)) { + bufferViewMap[accessor.bufferView] = defaultValue(bufferViewMap[accessor.bufferView], []); + bufferViewMap[accessor.bufferView].push(accessor); + } + }); + + // Split accessors with different byte strides + for (var bufferViewId in bufferViewMap) { + if (Object.prototype.hasOwnProperty.call(bufferViewMap, bufferViewId)) { + bufferView = bufferViews[bufferViewId]; + var accessors = bufferViewMap[bufferViewId]; + accessors.sort(function(a, b) { + return a.byteOffset - b.byteOffset; + }); + var currentByteOffset = 0; + var currentIndex = 0; + var accessorsLength = accessors.length; + for (i = 0; i < accessorsLength; ++i) { + var accessor = accessors[i]; + var accessorByteStride = computeAccessorByteStride(gltf, accessor); + var accessorByteOffset = accessor.byteOffset; + var accessorByteLength = accessor.count * accessorByteStride; + delete accessor.byteStride; + + var hasNextAccessor = (i < accessorsLength - 1); + var nextAccessorByteStride = hasNextAccessor ? computeAccessorByteStride(gltf, accessors[i + 1]) : undefined; + if (accessorByteStride !== nextAccessorByteStride) { + var newBufferView = clone(bufferView, true); + if (bufferViewHasVertexAttributes[bufferViewId]) { + newBufferView.byteStride = accessorByteStride; } + newBufferView.byteOffset += currentByteOffset; + newBufferView.byteLength = accessorByteOffset + accessorByteLength - currentByteOffset; + var newBufferViewId = addToArray(bufferViews, newBufferView); + for (j = currentIndex; j <= i; ++j) { + accessor = accessors[j]; + accessor.bufferView = newBufferViewId; + accessor.byteOffset = accessor.byteOffset - currentByteOffset; + } + // Set current byte offset to next accessor's byte offset + currentByteOffset = hasNextAccessor ? accessors[i + 1].byteOffset : undefined; + currentIndex = i + 1; } } } - - // Remove unused buffer views - removeUnusedElements(gltf, ['accessor', 'bufferView', 'buffer']); - } - - function requirePositionAccessorMinMax(gltf) { - ForEach.accessorWithSemantic(gltf, 'POSITION', function(accessorId) { - var accessor = gltf.accessors[accessorId]; - if (!defined(accessor.min) || !defined(accessor.max)) { - var minMax = findAccessorMinMax(gltf, accessor); - accessor.min = minMax.min; - accessor.max = minMax.max; - } - }); - } - - function isNodeEmpty(node) { - return (!defined(node.children) || node.children.length === 0) && - (!defined(node.meshes) || node.meshes.length === 0) && - !defined(node.camera) && !defined(node.skin) && !defined(node.skeletons) && !defined(node.jointName) && - (!defined(node.translation) || Cartesian3.fromArray(node.translation).equals(Cartesian3.ZERO)) && - (!defined(node.scale) || Cartesian3.fromArray(node.scale).equals(new Cartesian3(1.0, 1.0, 1.0))) && - (!defined(node.rotation) || Cartesian4.fromArray(node.rotation).equals(new Cartesian4(0.0, 0.0, 0.0, 1.0))) && - (!defined(node.matrix) || Matrix4.fromColumnMajorArray(node.matrix).equals(Matrix4.IDENTITY)) && - !defined(node.extensions) && !defined(node.extras); } - function deleteNode(gltf, nodeId) { - // Remove from list of nodes in scene - ForEach.scene(gltf, function(scene) { - var sceneNodes = scene.nodes; - if (defined(sceneNodes)) { - var sceneNodesLength = sceneNodes.length; - for (var i = sceneNodesLength; i >= 0; --i) { - if (sceneNodes[i] === nodeId) { - sceneNodes.splice(i, 1); - return; - } + // Remove unused buffer views + removeUnusedElements(gltf, ['accessor', 'bufferView', 'buffer']); +} + +function requirePositionAccessorMinMax(gltf) { + ForEach.accessorWithSemantic(gltf, 'POSITION', function(accessorId) { + var accessor = gltf.accessors[accessorId]; + if (!defined(accessor.min) || !defined(accessor.max)) { + var minMax = findAccessorMinMax(gltf, accessor); + accessor.min = minMax.min; + accessor.max = minMax.max; + } + }); +} + +function isNodeEmpty(node) { + return (!defined(node.children) || node.children.length === 0) && + (!defined(node.meshes) || node.meshes.length === 0) && + !defined(node.camera) && !defined(node.skin) && !defined(node.skeletons) && !defined(node.jointName) && + (!defined(node.translation) || Cartesian3.fromArray(node.translation).equals(Cartesian3.ZERO)) && + (!defined(node.scale) || Cartesian3.fromArray(node.scale).equals(new Cartesian3(1.0, 1.0, 1.0))) && + (!defined(node.rotation) || Cartesian4.fromArray(node.rotation).equals(new Cartesian4(0.0, 0.0, 0.0, 1.0))) && + (!defined(node.matrix) || Matrix4.fromColumnMajorArray(node.matrix).equals(Matrix4.IDENTITY)) && + !defined(node.extensions) && !defined(node.extras); +} + +function deleteNode(gltf, nodeId) { + // Remove from list of nodes in scene + ForEach.scene(gltf, function(scene) { + var sceneNodes = scene.nodes; + if (defined(sceneNodes)) { + var sceneNodesLength = sceneNodes.length; + for (var i = sceneNodesLength; i >= 0; --i) { + if (sceneNodes[i] === nodeId) { + sceneNodes.splice(i, 1); + return; } } - }); + } + }); - // Remove parent node's reference to this node, and delete the parent if also empty - ForEach.node(gltf, function(parentNode, parentNodeId) { - if (defined(parentNode.children)) { - var index = parentNode.children.indexOf(nodeId); - if (index > -1) { - parentNode.children.splice(index, 1); + // Remove parent node's reference to this node, and delete the parent if also empty + ForEach.node(gltf, function(parentNode, parentNodeId) { + if (defined(parentNode.children)) { + var index = parentNode.children.indexOf(nodeId); + if (index > -1) { + parentNode.children.splice(index, 1); - if (isNodeEmpty(parentNode)) { - deleteNode(gltf, parentNodeId); - } + if (isNodeEmpty(parentNode)) { + deleteNode(gltf, parentNodeId); } } - }); + } + }); - delete gltf.nodes[nodeId]; - } + delete gltf.nodes[nodeId]; +} - function removeEmptyNodes(gltf) { - ForEach.node(gltf, function(node, nodeId) { - if (isNodeEmpty(node)) { - deleteNode(gltf, nodeId); - } - }); +function removeEmptyNodes(gltf) { + ForEach.node(gltf, function(node, nodeId) { + if (isNodeEmpty(node)) { + deleteNode(gltf, nodeId); + } + }); - return gltf; - } + return gltf; +} - function requireAnimationAccessorMinMax(gltf) { - ForEach.animation(gltf, function(animation) { - ForEach.animationSampler(animation, function(sampler) { - var accessor = gltf.accessors[sampler.input]; - if (!defined(accessor.min) || !defined(accessor.max)) { - var minMax = findAccessorMinMax(gltf, accessor); - accessor.min = minMax.min; - accessor.max = minMax.max; - } - }); +function requireAnimationAccessorMinMax(gltf) { + ForEach.animation(gltf, function(animation) { + ForEach.animationSampler(animation, function(sampler) { + var accessor = gltf.accessors[sampler.input]; + if (!defined(accessor.min) || !defined(accessor.max)) { + var minMax = findAccessorMinMax(gltf, accessor); + accessor.min = minMax.min; + accessor.max = minMax.max; + } }); - } - - function glTF10to20(gltf) { - gltf.asset = defaultValue(gltf.asset, {}); - gltf.asset.version = '2.0'; - // material.instanceTechnique properties should be directly on the material. instanceTechnique is a gltf 0.8 property but is seen in some 1.0 models. - updateInstanceTechniques(gltf); - // animation.samplers now refers directly to accessors and animation.parameters should be removed - removeAnimationSamplersIndirection(gltf); - // Remove empty nodes and re-assign referencing indices - removeEmptyNodes(gltf); - // Top-level objects are now arrays referenced by index instead of id - objectsToArrays(gltf); - // Animation.sampler objects cannot have names - removeAnimationSamplerNames(gltf); - // asset.profile no longer exists - stripAsset(gltf); - // Move known extensions from extensionsUsed to extensionsRequired - requireKnownExtensions(gltf); - // bufferView.byteLength and buffer.byteLength are required - requireByteLength(gltf); - // byteStride moved from accessor to bufferView - moveByteStrideToBufferView(gltf); - // accessor.min and accessor.max must be defined for accessors containing POSITION attributes - requirePositionAccessorMinMax(gltf); - // An animation sampler's input accessor must have min and max properties defined - requireAnimationAccessorMinMax(gltf); - // buffer.type is unnecessary and should be removed - removeBufferType(gltf); - // Remove format, internalFormat, target, and type - removeTextureProperties(gltf); - // TEXCOORD and COLOR attributes must be written with a set index (TEXCOORD_#) - requireAttributeSetIndex(gltf); - // Add underscores to application-specific parameters - underscoreApplicationSpecificSemantics(gltf); - // Accessors referenced by JOINTS_0 and WEIGHTS_0 attributes must have correct component types - updateAccessorComponentTypes(gltf); - // Clamp camera parameters - clampCameraParameters(gltf); - // Move legacy technique render states to material properties and add KHR_blend extension blending functions - moveTechniqueRenderStates(gltf); - // Add material techniques to KHR_techniques_webgl extension, removing shaders, programs, and techniques - moveTechniquesToExtension(gltf); - // Remove empty arrays - removeEmptyArrays(gltf); - } - - export default updateVersion; + }); +} + +function glTF10to20(gltf) { + gltf.asset = defaultValue(gltf.asset, {}); + gltf.asset.version = '2.0'; + // material.instanceTechnique properties should be directly on the material. instanceTechnique is a gltf 0.8 property but is seen in some 1.0 models. + updateInstanceTechniques(gltf); + // animation.samplers now refers directly to accessors and animation.parameters should be removed + removeAnimationSamplersIndirection(gltf); + // Remove empty nodes and re-assign referencing indices + removeEmptyNodes(gltf); + // Top-level objects are now arrays referenced by index instead of id + objectsToArrays(gltf); + // Animation.sampler objects cannot have names + removeAnimationSamplerNames(gltf); + // asset.profile no longer exists + stripAsset(gltf); + // Move known extensions from extensionsUsed to extensionsRequired + requireKnownExtensions(gltf); + // bufferView.byteLength and buffer.byteLength are required + requireByteLength(gltf); + // byteStride moved from accessor to bufferView + moveByteStrideToBufferView(gltf); + // accessor.min and accessor.max must be defined for accessors containing POSITION attributes + requirePositionAccessorMinMax(gltf); + // An animation sampler's input accessor must have min and max properties defined + requireAnimationAccessorMinMax(gltf); + // buffer.type is unnecessary and should be removed + removeBufferType(gltf); + // Remove format, internalFormat, target, and type + removeTextureProperties(gltf); + // TEXCOORD and COLOR attributes must be written with a set index (TEXCOORD_#) + requireAttributeSetIndex(gltf); + // Add underscores to application-specific parameters + underscoreApplicationSpecificSemantics(gltf); + // Accessors referenced by JOINTS_0 and WEIGHTS_0 attributes must have correct component types + updateAccessorComponentTypes(gltf); + // Clamp camera parameters + clampCameraParameters(gltf); + // Move legacy technique render states to material properties and add KHR_blend extension blending functions + moveTechniqueRenderStates(gltf); + // Add material techniques to KHR_techniques_webgl extension, removing shaders, programs, and techniques + moveTechniquesToExtension(gltf); + // Remove empty arrays + removeEmptyArrays(gltf); +} + +export default updateVersion; diff --git a/Source/ThirdParty/Workers/msc_basis_transcoder.js b/Source/ThirdParty/Workers/msc_basis_transcoder.js new file mode 100644 index 00000000000..6ae2e916975 --- /dev/null +++ b/Source/ThirdParty/Workers/msc_basis_transcoder.js @@ -0,0 +1,44 @@ + +var MSC_TRANSCODER = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(MSC_TRANSCODER) { + MSC_TRANSCODER = MSC_TRANSCODER || {}; + +var Module=typeof MSC_TRANSCODER!=="undefined"?MSC_TRANSCODER:{};var Promise=function(){function noop(){}function bind(fn,thisArg){return function(){fn.apply(thisArg,arguments)}}function Promise(fn){if(!(this instanceof Promise))throw new TypeError("Promises must be constructed via new");if(typeof fn!=="function")throw new TypeError("not a function");this._state=0;this._handled=false;this._value=undefined;this._deferreds=[];doResolve(fn,this)}function handle(self,deferred){while(self._state===3){self=self._value}if(self._state===0){self._deferreds.push(deferred);return}self._handled=true;Promise._immediateFn(function(){var cb=self._state===1?deferred.onFulfilled:deferred.onRejected;if(cb===null){(self._state===1?resolve:reject)(deferred.promise,self._value);return}var ret;try{ret=cb(self._value)}catch(e){reject(deferred.promise,e);return}resolve(deferred.promise,ret)})}function resolve(self,newValue){try{if(newValue===self)throw new TypeError("A promise cannot be resolved with itself.");if(newValue&&(typeof newValue==="object"||typeof newValue==="function")){var then=newValue.then;if(newValue instanceof Promise){self._state=3;self._value=newValue;finale(self);return}else if(typeof then==="function"){doResolve(bind(then,newValue),self);return}}self._state=1;self._value=newValue;finale(self)}catch(e){reject(self,e)}}function reject(self,newValue){self._state=2;self._value=newValue;finale(self)}function finale(self){if(self._state===2&&self._deferreds.length===0){Promise._immediateFn(function(){if(!self._handled){Promise._unhandledRejectionFn(self._value)}})}for(var i=0,len=self._deferreds.length;i1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){var data=tryParseAsDataURI(f);if(data){return intArrayToString(data)}return read(f)}}readBinary=function readBinary(f){var data;data=tryParseAsDataURI(f);if(data){return data}if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];var WebAssembly={Memory:function(opts){this.buffer=new ArrayBuffer(opts["initial"]*65536)},Module:function(binary){},Instance:function(module,info){this.exports=( +// EMSCRIPTEN_START_ASM +function instantiate(fe,ge){function _d(he){he.set=(function(qa,ie){this[qa]=ie});he.get=(function(qa){return this[qa]});return he}var a=new ArrayBuffer(16);var b=new Int32Array(a);var c=new Float32Array(a);var d=new Float64Array(a);function $d(je){c[2]=je}function ae(ke){return b[ke]}function be(le,me){var e=me.a;var f=e.buffer;e.grow=de;var g=new le.Int8Array(f);var h=new le.Int16Array(f);var i=new le.Int32Array(f);var j=new le.Uint8Array(f);var k=new le.Uint16Array(f);var l=new le.Uint32Array(f);var m=new le.Float32Array(f);var n=new le.Float64Array(f);var o=le.Math.imul;var p=le.Math.fround;var q=le.Math.abs;var r=le.Math.clz32;var s=le.Math.min;var t=le.Math.max;var u=le.Math.floor;var v=le.Math.ceil;var w=le.Math.sqrt;var x=me.abort;var y=le.NaN;var z=le.Infinity;var A=me.b;var B=me.c;var C=me.d;var D=me.e;var E=me.f;var F=me.g;var G=me.h;var H=me.i;var I=me.j;var J=me.k;var K=me.l;var L=me.m;var M=me.n;var N=me.o;var O=me.p;var P=me.q;var Q=me.r;var R=me.s;var S=me.t;var T=me.u;var U=me.v;var V=me.w;var W=me.x;var X=me.y;var Y=me.z;var Z=me.A;var _=me.B;var $=me.C;var aa=me.D;var ba=me.E;var ca=me.F;var da=me.G;var ea=me.H;var fa=me.I;var ga=me.J;var ha=5568464;var ia=0; +// EMSCRIPTEN_START_FUNCS +function za(a,b,c,d,e,f,l,m,n,p,q,s,t,u,v,w,y,z){var B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0,ra=0,sa=0,ta=0,ua=0,va=0,xa=0;C=ha-192|0;ha=C;E=l+ -21|0;U=a+176|0;a:{if(v){break a}if(E>>>0<9){v=t;break a}v=c;if((l|0)!=15){break a}v=t+7>>>3|0;E=-6}$=o(c,d);b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{if(!p){break l}if(s>>>0>15){break k}q=(U+o(q,192)|0)+o(s,12)|0;oa=q+24|0;q=i[q+28>>2]-i[oa>>2]>>2;if($>>>0<=q>>>0){break l}bb(oa,$-q|0)}if(f?!e:0){break k}q=i[a+172>>2];i[C+8>>2]=0;i[C>>2]=0;i[C+4>>2]=0;if(q){bb(C,q);D=i[a+172>>2]}i[C+12>>2]=q>>>1;s=(i[a+16>>2]-i[a+12>>2]|0)/11|0;m:{if((l&-2)==6){ja=Wa(o($,12));if(!ja){break m}xa=($<<3)+ja|0}q=i[U+4>>2]-i[U>>2]>>2;n:{if(q>>>0>=c>>>0){break n}vb(U,c-q|0);t=i[U+12>>2];q=i[U+16>>2]-t>>2;if(q>>>0>>0){vb(U+12|0,c-q|0);break n}if(q>>>0<=c>>>0){break n}i[U+16>>2]=t+(c<<2)}if(d){V=e+f|0;ra=s+D|0;pa=v<<2;la=v<<1;ka=C+128|14;ea=C+128|12;sa=C+128|5;Y=p;na=n;P=E>>>0>8?z:z?z:u;T=P;n=0;W=3;z=0;t=0;while(1){o:{if(!c){break o}Z=(T|0)<4?T:4;_=o(v,R);aa=o(c,R);ma=R<<2;ca=o(ma,v);S=R&1;qa=U+o(S,12)|0;u=1;ta=U+o(S^1,12)|0;O=0;J=v;p:{while(1){q:{if(O&1){break q}r:{s:{t:{if(!S){if(da){da=da+ -1|0;break r}if(i[a+32>>2]==i[a+28>>2]){break j}B=e;if(z>>>0<16){while(1){D=0;if(B>>>0>>0){D=j[B|0];e=B+1|0;B=e}t=D<>>0<8;z=z+8|0;if(f){continue}break}}D=i[i[a+40>>2]+((t&1023)<<2)>>2];if((D|0)>-1){break t}f=i[a+52>>2];B=10;while(1){n=t>>>B|0;B=B+1|0;D=h[f+((n&1)+(D^-1)<<1)>>1];if((D|0)<0){continue}break}break s}n=j[(i[U+12>>2]+(O<<2)|0)+2|0];break q}B=D>>>16|0;D=D&65535}z=z-B|0;B=t>>>B|0;da=0;if((D|0)!=256){t=B;N=D;break r}if(!(z>>>0>4)){D=0;if(e>>>0>>0){D=j[e|0];e=e+1|0}B=D<>>5|0;u:{if(!(B&16)){e=f;break u}v:{if(z>>>0>=5){B=t;e=f;break v}B=0;if(f>>>0>=V>>>0){e=f}else{B=j[f|0];e=f+1|0}B=B<>>5|0;D=B<<4&240|D;if(!(B&16)){break u}w:{if(z>>>0>4){B=t;break w}B=0;if(e>>>0>>0){B=j[e|0];e=e+1|0}B=B<>>5|0;n=B<<8&3840|D;if(!(B&16)){e=s;da=n+2|0;break r}x:{if(z>>>0>4){B=t;e=s;break x}B=0;if(s>>>0>=V>>>0){e=s}else{B=j[s|0];e=s+1|0}B=B<>>5|0;D=n|B<<12&61440;if(!(B&16)){break u}y:{if(z>>>0>4){B=t;break y}B=0;if(e>>>0>>0){B=j[e|0];e=e+1|0}B=B<>>5|0;n=B<<16&983040|D;if(!(B&16)){e=s;da=n+2|0;break r}z:{if(z>>>0>4){B=t;e=s;break z}B=0;if(s>>>0>=V>>>0){e=s}else{B=j[s|0];e=s+1|0}B=B<>>5|0;D=n|B<<20&15728640;if(!(B&16)){break u}A:{if(z>>>0>4){B=t;break A}B=0;if(e>>>0>>0){B=j[e|0];e=e+1|0}B=B<>>5|0;n=B<<24&251658240|D;if(!(B&16)){e=s;da=n+2|0;break r}B:{if(z>>>0>4){B=t;e=s;break B}B=0;if(s>>>0>=V>>>0){e=s}else{B=j[s|0];e=s+1|0}B=B<>>5|0;da=(n|B<<28)+2|0;break r}break i}da=D+2|0}g[(i[U+12>>2]+(O<<2)|0)+2|0]=N>>>4;n=N}p=n&3;n=n>>>2|0;C:{D:{E:{F:{G:{H:{I:{J:{K:{L:{M:{N:{O:{P:{Q:{R:{S:{T:{U:{V:{W:{X:{Y:{Z:{_:{$:{aa:{ba:{ca:{da:{ea:{fa:{ga:{ha:{q=i[ta>>2];ia:{ja:{ka:{la:{switch(p|0){case 0:if(O){break ia}if(ja){break C}break p;case 1:f=O;if(R){break ja}if(ja){break C}break p;case 2:if(Y){f=i[i[oa>>2]+(O+aa<<2)>>2];Q=f&65535;f=f>>>16|0;break fa}if(O?R:0){break ka}if(!ja){break p}break C;default:break la}}if(i[a+68>>2]==i[a+64>>2]){break j}B=e;if(z>>>0<16){while(1){D=0;if(B>>>0>>0){D=j[B|0];e=B+1|0;B=e}t=D<>>0<8;z=z+8|0;if(f){continue}break}}D=i[i[a+76>>2]+((t&1023)<<2)>>2];if((D|0)>-1){break ha}f=i[a+88>>2];B=10;while(1){q=t>>>B|0;B=B+1|0;D=h[f+((q&1)+(D^-1)<<1)>>1];if((D|0)<0){continue}break}break ga}f=O+ -1|0}Q=k[q+(f<<2)>>1]}h[i[qa>>2]+(O<<2)>>1]=Q;break ea}B=D>>>16|0;D=D&65535}f=D+Q|0;q=i[a+4>>2]-i[a>>2]>>3;Q=f-(f>>>0>>0?0:q)|0;z=z-B|0;t=t>>>B|0;f=0}h[i[qa>>2]+(O<<2)>>1]=Q;if(Y&(p|0)==2){break da}}ma:{if(fa){fa=fa+ -1|0;f=(i[a+16>>2]-i[a+12>>2]|0)/11|0;B=f;break ma}na:{oa:{if(i[a+104>>2]!=i[a+100>>2]){B=e;if(z>>>0<16){while(1){D=0;if(B>>>0>>0){D=j[B|0];e=B+1|0;B=e}t=D<>>0<8;z=z+8|0;if(f){continue}break}}D=i[i[a+112>>2]+((t&1023)<<2)>>2];if((D|0)>-1){break oa}f=i[a+124>>2];B=10;while(1){p=t>>>B|0;B=B+1|0;D=h[f+((p&1)+(D^-1)<<1)>>1];if((D|0)<0){continue}break}f=D;break na}break j}B=D>>>16|0;f=D&65535}z=z-B|0;t=t>>>B|0;pa:{qa:{if((f|0)==(ra|0)){if(i[a+140>>2]==i[a+136>>2]){break j}B=e;if(z>>>0<16){while(1){D=0;if(B>>>0>>0){D=j[B|0];e=B+1|0;B=e}t=D<>>0<8;z=z+8|0;if(f){continue}break}}D=i[i[a+148>>2]+((t&1023)<<2)>>2];if((D|0)>-1){break qa}f=i[a+160>>2];B=10;while(1){p=t>>>B|0;B=B+1|0;D=h[f+((p&1)+(D^-1)<<1)>>1];if((D|0)<0){continue}break}f=D;break pa}fa=0;B=(i[a+16>>2]-i[a+12>>2]|0)/11|0;if((f|0)>=(B|0)){break ma}if(!i[a+172>>2]){break da}p=i[C+12>>2];i[C+12>>2]=p+1;q=p<<2;p=i[C>>2];i[q+p>>2]=f;q=i[C+4>>2]-p>>2;p=i[C+12>>2];if((q|0)!=(p|0)){break da}i[C+12>>2]=p>>>1;break da}B=D>>>16|0;f=D&65535}z=z-B|0;t=t>>>B|0;if((f|0)==63){if(!(z>>>0>7)){B=0;if(e>>>0>>0){B=j[e|0];e=e+1|0}t=B<>>8|0;ra:{if(!(t&128)){t=B;break ra}sa:{if(z>>>0>=8){z=e+ -16|0;break sa}s=0;if(D>>>0>>0){s=j[D|0];D=D+1|0}B=s<>>8|0;f=B<<7&16256|f;if(!(B&128)){break ra}ta:{if(z>>>0>=8){z=z+ -8|0;break ta}B=0;if(D>>>0>>0){B=j[D|0];D=D+1|0}t=B<>>8|0;f=t<<14&2080768|f;if(!(t&128)){t=B;break ra}ua:{if(z>>>0>=8){z=z+ -8|0;break ua}s=0;if(D>>>0>>0){s=j[D|0];D=D+1|0}B=s<>>8|0;f=B<<21&266338304|f;if(!(B&128)){t=s;break ra}va:{if(z>>>0>=8){z=z+ -8|0;break va}B=0;if(D>>>0>>0){B=j[D|0];D=D+1|0}s=B<>>8|0;f=s<<28|f;break ra}break i}e=D}fa=f+3|0;if(fa>>>0>$>>>0){if(ja){break C}break p}fa=f+2|0;f=(i[a+16>>2]-i[a+12>>2]|0)/11|0;B=f}if(!i[a+172>>2]){break ca}p=f-B|0;q=i[C>>2];if((p|0)>=i[C+4>>2]-q>>2){if(ja){break C}break p}s=q+(p<<2)|0;f=i[s>>2];if(!p){break da}p=q+(p<<1&-4)|0;q=i[p>>2];i[p>>2]=f;i[s>>2]=q}wa:{E=i[a>>2];if(Q>>>0>2]-E>>3>>>0){L=i[a+12>>2];if(f>>>0<(i[a+16>>2]-L|0)/11>>>0){break wa}}if(ja){break C}break p}if(Y){i[i[oa>>2]+(O+aa<<2)>>2]=f<<16|Q}u=(J|0)<4?J:4;F=L+o(f,11)|0;s=E+(Q<<3)|0;xa:{ya:{switch(l|0){case 0:f=j[s+4|0];if(f>>>0>=8){break g}p=o(O+_|0,m)+b|0;q=j[s|0];X=X&7|(q>>>0<31?q<<3:-8);q=j[s+1|0];ga=ga&7|(q>>>0<31?q:31)<<3;q=j[s+2|0];ia=ia&7|(q>>>0<31?q:31)<<3;W=W&3|f<<5|f<<2;i[p>>2]=X&255|(ga&255)<<8|(ia&255)<<16|W<<24;i[p+4>>2]=j[F+4|0]|j[F+5|0]<<8|(j[F+6|0]<<16|j[F+7|0]<<24);break D;case 2:p=o(O+_|0,m)+b|0;f=j[s+4|0];q=j[F+8|0];u=j[F+9|0];if((q|0)==(u|0)){if(q>>>0>=4){break f}u=j[s+2|0];B=u>>>2|0;u=u<<3;D=j[s+1|0];E=D<<3|D>>>2;f=i[((f<<4)+(q<<2)|0)+28352>>2];s=j[s|0];D=f+(s<<3|s>>>2)|0;za:{if(D>>>0<256){break za}q=(D|0)>-1;D=255;if(q){break za}D=0}q=u|B;s=f+E|0;Aa:{if(s>>>0<256){break Aa}u=(s|0)>-1;s=255;if(u){break Aa}s=0}E=f+q|0;Ba:{if(E>>>0<256){break Ba}f=(E|0)>-1;E=255;if(f){break Ba}E=0}f=170;q=E<<1;s=s<<1;u=D<<1;E=j[q+300769|0]|(j[s+301793|0]<<5|j[u+300769|0]<<11);D=j[q+300768|0]|(j[s+301792|0]<<5|j[u+300768|0]<<11);Ca:{if(!(na|(E|0)!=(D|0))){if(!D){f=85;D=0;s=1;break Ca}E=D+ -1|0;f=0}if(D>>>0>=E>>>0){s=D;D=E;break Ca}f=f|85;s=E}g[p+2|0]=D;g[p|0]=s;f=o(f,16843009);g[p+4|0]=f;g[p+5|0]=f>>>8;g[p+6|0]=f>>>16;g[p+7|0]=f>>>24;g[p+3|0]=D>>>8;g[p+1|0]=s>>>8;break D}Da:{Ea:{if(!((u|0)!=3|f>>>0<7|(j[F+10|0]!=2|q))){Fa(C- -64|0,s,f);D=1;q=j[(j[C+78|0]<<1)+301280|0]|(j[(j[C+77|0]<<1)+302304|0]<<5|j[(j[C+76|0]<<1)+301280|0]<<11);s=j[(j[C+66|0]<<1)+301280|0]|(j[(j[C+65|0]<<1)+302304|0]<<5|j[(j[C+64|0]<<1)+301280|0]<<11);if((q|0)==(s|0)){if(!s){s=0;E=1;f=1;break Da}D=0;q=s+ -1|0}f=0;if(s>>>0>>0){break Ea}E=s;s=q;break Da}u=o(i[((q<<4)+(u<<2)|0)+302816>>2],10);B=f<<5;f=u+o(B+j[s|0]|0,60)<<2;I=f;q=u+o(B+j[s+2|0]|0,60)<<2;s=u+o(B+j[s+1|0]|0,60)<<2;u=k[q+91094>>1]+(k[s+152534>>1]+k[f+91094>>1]|0)|0;B=k[q+91090>>1]+(k[s+152530>>1]+k[f+91090>>1]|0)|0;D=u>>>0>>0;E=k[q+91098>>1]+(k[s+152538>>1]+k[f+91098>>1]|0)|0;u=D?u:B;B=E>>>0>>0;H=B?2:D;D=k[q+91102>>1]+(k[s+152542>>1]+k[f+91102>>1]|0)|0;u=B?E:u;B=D>>>0>>0;H=B?3:H;E=k[q+91106>>1]+(k[s+152546>>1]+k[f+91106>>1]|0)|0;u=B?D:u;B=E>>>0>>0;H=B?4:H;D=k[q+91110>>1]+(k[s+152550>>1]+k[f+91110>>1]|0)|0;u=B?E:u;B=D>>>0>>0;H=B?5:H;E=k[q+91114>>1]+(k[s+152554>>1]+k[f+91114>>1]|0)|0;u=B?D:u;B=E>>>0>>0;H=B?6:H;D=k[q+91118>>1]+(k[s+152558>>1]+k[f+91118>>1]|0)|0;u=B?E:u;B=D>>>0>>0;H=B?7:H;E=k[q+91122>>1]+(k[s+152562>>1]+k[f+91122>>1]|0)|0;u=B?D:u;B=E>>>0>>0;B=k[q+91126>>1]+(k[s+152566>>1]+k[f+91126>>1]|0)>>>0<(B?E:u)>>>0?9:B?8:H;f=B<<2;u=I+f|0;D=f+q|0;f=f+s|0;q=j[u+91088|0]<<11&63488|j[D+91088|0]|j[f+152528|0]<<5;s=j[D+91089|0]|j[u+91089|0]<<11&63488|j[f+152529|0]<<5;f=q>>>0>>0;u=f?q:s;g[p+2|0]=u;q=f?s:q;g[p|0]=q;g[p+3|0]=u>>>8;g[p+1|0]=q>>>8;if((q|0)!=(u|0)){break xa}f=p;B=f;if(na){p=0}else{s=q?q:1;g[p|0]=s;u=q?q+ -1|0:0;g[p+2|0]=u;g[p+1|0]=s>>>8;g[p+3|0]=u>>>8;p=q?0:85}p=o(p,16843009);g[B+4|0]=p;g[f+5|0]=p>>>8;g[f+6|0]=p>>>16;g[f+7|0]=p>>>24;break D}f=1;D=0;E=q}g[p+2|0]=s;g[p|0]=E;g[p+3|0]=s>>>8;g[p+1|0]=E>>>8;q=j[p+4|0]&-4|((j[F|0]&3)==3?D:f);g[p+4|0]=q;q=q&-15|((j[F|0]&12)==12?D:f)<<2;g[p+4|0]=q;q=q&-59|((j[F|0]&48)==48?D:f)<<4;g[p+4|0]=q;g[p+4|0]=q&21|(j[F|0]>191?D:f)<<6;q=j[p+5|0]&-4|((j[F+1|0]&3)==3?D:f);g[p+5|0]=q;q=q&-15|((j[F+1|0]&12)==12?D:f)<<2;g[p+5|0]=q;q=q&-59|((j[F+1|0]&48)==48?D:f)<<4;g[p+5|0]=q;g[p+5|0]=q&21|(j[F+1|0]>191?D:f)<<6;q=j[p+6|0]&-4|((j[F+2|0]&3)==3?D:f);g[p+6|0]=q;q=q&-15|((j[F+2|0]&12)==12?D:f)<<2;g[p+6|0]=q;q=q&-59|((j[F+2|0]&48)==48?D:f)<<4;g[p+6|0]=q;g[p+6|0]=q&21|(j[F+2|0]>191?D:f)<<6;q=j[p+7|0]&-4|((j[F+3|0]&3)==3?D:f);g[p+7|0]=q;q=q&-15|((j[F+3|0]&12)==12?D:f)<<2;g[p+7|0]=q;q=q&-59|((j[F+3|0]&48)==48?D:f)<<4;g[p+7|0]=q;g[p+7|0]=q&21|(j[F+3|0]>191?D:f)<<6;break D;case 4:f=o(O+_|0,m)+b|0;B=j[s+4|0];u=j[F+8|0];p=j[F+9|0];if((u|0)==(p|0)){if(u>>>0>=4){break e}p=j[s|0];D=i[((B<<4)+(u<<2)|0)+28352>>2]+(p<<3|p>>>2)|0;Fa:{if(D>>>0<256){break Fa}p=(D|0)>-1;D=255;if(p){break Fa}D=0}g[f+2|0]=0;g[f+3|0]=0;g[f+4|0]=0;g[f+5|0]=0;g[f+1|0]=D;g[f|0]=D;g[f+6|0]=0;g[f+7|0]=0;break D}Ga:{Ha:{if(j[F+10|0]!=2){q=0;switch(u|0){case 1:break Ga;case 0:break Ha;default:break E}}Fa(C- -64|0,s,B);q=j[(C- -64|0)+(u<<2)|0];g[f+1|0]=j[(C- -64|0)+(p<<2)|0];g[f|0]=q;q=j[f+2|0]&248|(p|0)==(j[F|0]&3);g[f+2|0]=q;q=q&193|((p|0)==(j[F|0]>>>2&3))<<3;g[f+2|0]=q;s=j[F|0];u=j[f+3|0];g[f+3|0]=u&254;g[f+2|0]=q&9|((p|0)==(s>>>4&3))<<6;q=u&240|((p|0)==(j[F|0]>>>6|0))<<1;g[f+3|0]=q;q=q&130|((p|0)==(j[F+1|0]&3))<<4;g[f+3|0]=q;s=j[F+1|0];u=j[f+4|0];g[f+4|0]=u&252;g[f+3|0]=q&18|((p|0)==(s>>>2&3))<<7;q=((p|0)==(j[F+1|0]>>>4&3))<<2;g[f+4|0]=q|u&224;g[f+4|0]=q|((p|0)==(j[F+1|0]>>>6|0))<<5;q=j[f+5|0]&248|(p|0)==(j[F+2|0]&3);g[f+5|0]=q;q=q&193|((p|0)==(j[F+2|0]>>>2&3))<<3;g[f+5|0]=q;s=j[F+2|0];u=j[f+6|0];g[f+6|0]=u&254;g[f+5|0]=q&9|((p|0)==(s>>>4&3))<<6;q=u&240|((p|0)==(j[F+2|0]>>>6|0))<<1;g[f+6|0]=q;q=q&130|((p|0)==(j[F+3|0]&3))<<4;g[f+6|0]=q;s=j[F+3|0];u=j[f+7|0];g[f+7|0]=u&252;g[f+6|0]=q&18|((p|0)==(s>>>2&3))<<7;q=((p|0)==(j[F+3|0]>>>4&3))<<2;g[f+7|0]=q|u&224;g[f+7|0]=q|((p|0)==(j[F+3|0]>>>6|0))<<5;break D}q=(p|0)==3?0:((p|0)==2)<<1;break E}q=(p|0)==3?1:(p|0)==2?3:0;break E;case 6:u=j[s+4|0];if(u>>>0>=8){break g}p=j[s|0];X=X&7|(p>>>0<31?p<<3:-8);p=j[s+1|0];ga=ga&7|(p>>>0<31?p:31)<<3;q=ga&255;p=q>>>24|0;B=X&255|q<<8;q=p;f=B;p=j[s+2|0];ia=ia&7|(p>>>0<31?p:31)<<3;B=ia&255;p=B>>>16|0;B=f|B<<16;D=p|q;W=W&3|u<<5|u<<2;q=W&255;p=q>>>8|0;q=q<<24|B;u=j[F+4|0]|(p|D)|j[F+5|0]<<8|j[F+6|0]<<16;p=j[F+7|0]<<24;G=O+aa|0;f=(G<<3)+ja|0;i[f>>2]=q;i[f+4>>2]=p|u;f=j[s+2|0];p=f>>>2|0;q=f<<3;f=j[s+1|0];u=f<<3|f>>>2;E=j[F+9|0];H=j[s+4|0]<<4;f=i[(H+(j[F+8|0]<<2)|0)+28352>>2];s=j[s|0];s=(s<<3|s>>>2)&255;B=f+s|0;Ia:{if(B>>>0<256){break Ia}D=(B|0)>-1;B=255;if(D){break Ia}B=0}p=p|q;q=u&255;D=q+f|0;Ja:{if(D>>>0<256){break Ja}u=(D|0)>-1;D=255;if(u){break Ja}D=0}u=p&255;f=u+f|0;Ka:{if(f>>>0<256){break Ka}p=(f|0)>-1;f=255;if(p){break Ka}f=0}p=i[(H+(E<<2)|0)+28352>>2];s=p+s|0;La:{if(s>>>0<256){break La}E=(s|0)>-1;s=255;if(E){break La}s=0}E=p+q|0;Ma:{if(E>>>0<256){break Ma}q=(E|0)>-1;E=255;if(q){break Ma}E=0}q=p+u|0;Na:{if(q>>>0<256){break Na}p=(q|0)>-1;q=255;if(p){break Na}q=0}if((B&255)>>>0>(s&255)>>>0){break ba}if((E&255)>>>0<(D&255)>>>0){break aa}if((q&255)>>>0<(f&255)>>>0){break $}f=j[f+218400|0]<<1|j[D+218144|0]<<5|j[B+218144|0]<<10|32768;if(f>>>0>=65536){break _}p=j[q+218736|0]|j[E+218736|0]<<5|j[s+218736|0]<<10|32768;if(p>>>0>=65536){break Z}i[(G<<2)+xa>>2]=f|p<<16;break D;case 7:if(!y){break Y}u=j[s+4|0];if(u>>>0>=8){break g}p=j[s|0];X=X&7|(p>>>0<31?p<<3:-8);p=j[s+1|0];ga=ga&7|(p>>>0<31?p:31)<<3;q=ga&255;p=q>>>24|0;B=X&255|q<<8;q=p;f=B;p=j[s+2|0];ia=ia&7|(p>>>0<31?p:31)<<3;B=ia&255;p=B>>>16|0;B=f|B<<16;G=p|q;W=W&3|u<<5|u<<2;q=W&255;p=q>>>8|0;q=q<<24|B;u=j[F|0]|(p|G)|j[F+1|0]<<8|j[F+2|0]<<16;p=j[F+3|0]<<24;D=O+aa|0;f=(D<<3)+ja|0;i[f>>2]=q;i[f+4>>2]=p|u;f=j[s+2|0];q=f>>>2|0;u=f<<3;f=j[s+1|0];B=f<<3|f>>>2;G=j[F+9|0];H=j[s+4|0]<<4;p=i[(H+(j[F+8|0]<<2)|0)+28352>>2];f=j[s|0];I=(f<<3|f>>>2)&255;f=p+I|0;Oa:{if(f>>>0<256){break Oa}s=(f|0)>-1;f=255;if(s){break Oa}f=0}q=q|u;B=B&255;s=B+p|0;Pa:{if(s>>>0<256){break Pa}u=(s|0)>-1;s=255;if(u){break Pa}s=0}q=q&255;u=q+p|0;Qa:{if(u>>>0<256){break Qa}p=(u|0)>-1;u=255;if(p){break Qa}u=0}p=i[(H+(G<<2)|0)+28352>>2];G=p+I|0;Ra:{if(G>>>0<256){break Ra}H=(G|0)>-1;G=255;if(H){break Ra}G=0}H=p+B|0;Sa:{if(H>>>0<256){break Sa}B=(H|0)>-1;H=255;if(B){break Sa}H=0}I=p+q|0;Ta:{if(I>>>0<256){break Ta}p=(I|0)>-1;I=255;if(p){break Ta}I=0}if((f&255)>>>0>(G&255)>>>0){break X}if((H&255)>>>0<(s&255)>>>0){break W}if((I&255)>>>0<(u&255)>>>0){break V}p=D<<2;q=p+y|0;B=L+o(k[q+2>>1],11)|0;D=j[B+9|0];q=E+(k[q>>1]<<3)|0;E=j[q+4|0]<<4;q=j[q+1|0];q=(q<<3|q>>>2)&255;B=i[(E+(j[B+8|0]<<2)|0)+28352>>2]+q|0;Ua:{if(B>>>0<256){break Ua}K=(B|0)>-1;B=255;if(K){break Ua}B=0}D=q+i[(E+(D<<2)|0)+28352>>2]|0;Va:{if(D>>>0<256){break Va}q=(D|0)>-1;D=255;if(q){break Va}D=0}if(B>>>0>D>>>0){break U}Wa:{if((B&255)==255){q=j[s+218144|0];f=j[f+218144|0];if((q|f)>>>0>=32){break T}f=f<<10|q<<5|j[u+218400|0]<<1|32768;if(f>>>0<65536){break Wa}break h}q=j[s+218400|0];f=j[f+218400|0];if((q|f)>>>0>15){break S}s=j[u+219504|0];u=j[B+219248|0];if((s|u)>>>0>=8){break S}f=f<<8|u<<12|q<<4|s<<1;if(f>>>0>=65536){break h}}Xa:{if(D+ -239>>>0<=16){u=j[I+218736|0];q=j[H+218736|0];s=j[G+218736|0];if((u|(q|s))>>>0>=32){break R}B=u|(s<<10|q<<5)|32768;if(B>>>0<65536){break Xa}break h}u=j[I+218992|0];q=j[H+218992|0];s=j[G+218992|0];if((u|(q|s))>>>0>=16){break Q}B=u|(q<<4|s<<8)|j[D+219904|0]<<12;if(B>>>0>=65536){break h}}i[p+xa>>2]=B<<16|f;break D;case 8:case 9:q=o(O+_|0,m)+b|0;f=q;i[f+8>>2]=3;i[f+12>>2]=0;i[f>>2]=32;i[f+4>>2]=-262144;u=j[s+4|0];D=j[F+9|0];L=j[F+8|0];f=j[s+2|0];p=j[s+1|0];s=j[s|0];Ya:{switch(j[F+10|0]+ -1|0){case 0:if(L>>>0>=4){break f}D=f>>>2|0;E=f<<3;p=p<<3|p>>>2;f=i[((u<<4)+(L<<2)|0)+28352>>2];B=f+(s<<3|s>>>2)|0;Za:{if(B>>>0<256){break Za}s=(B|0)>-1;B=255;if(s){break Za}B=0}s=D|E;D=f+p|0;_a:{if(D>>>0<256){break _a}p=(D|0)>-1;D=255;if(p){break _a}D=0}f=f+s|0;$a:{if(f>>>0<256){break $a}p=(f|0)>-1;f=255;if(p){break $a}f=0}E=B<<1;u=j[E+220161|0];p=u>>>24|0;B=u<<8;u=p;s=B;D=D<<1;B=j[D+220161|0];p=B>>>10|0;B=s|B<<22;u=p|u;s=B;B=f<<1;p=j[B+220161|0]<<4;f=s&532709120;u=(p|u)&2032;s=f;f=j[E+220160|0]&127;p=f>>>17|0;f=s|f<<15;u=p|u;s=f;f=j[D+220160|0]&127;p=f>>>3|0;f=s|f<<29;u=p|u;p=j[B+220160|0]<<11;i[q>>2]=f|32;i[q+4>>2]=p|u|-262144;B=31;D=66;s=2147483647;E=715827883;while(1){f=q+(D>>>3|0)|0;p=f;u=j[f|0];f=D&7;g[p|0]=u&(s<>>0>>0?f:B;D=f+D|0;s=s>>>f|0;E=E>>>f|0;B=B-f|0;if(B){continue}break}break D;case 1:g[C+131|0]=255;g[C+130|0]=f;g[C+129|0]=p;g[C+128|0]=s;Fa(C- -64|0,C+128|0,u);E=(C- -64|0)+(L<<2)|0;u=j[E+1|0]>>>1|0;s=u;p=s>>>10|0;B=s<<22;s=p;f=B;B=j[E|0]>>>1|0;p=B>>>24|0;G=f|B<<8;s=p|s;f=G;G=j[E+2|0]>>>1|0;p=G<<4;E=f|0;K=p|s;D=(C- -64|0)+(D<<2)|0;H=j[D|0]>>>1|0;s=H;p=s>>>17|0;ba=i[q>>2]&255|(s<<15|E);p=i[q+4>>2]&-262144|(p|K);M=p;s=p;I=j[D+1|0]>>>1|0;E=I;p=E>>>3|0;E=E<<29|ba;s=p|s;K=j[D+2|0]>>>1|0;p=K<<11;f=q;i[f>>2]=E;i[f+4>>2]=p|s;D=0;s=j[F|0];E=(L|0)==(s&3)?0:3;if(E&2){s=u;p=s>>>3|0;s=s<<29;u=p;p=B>>>17|0;s=B<<15|s;u=p|u|G<<11;B=s;s=H;p=s>>>24|0;s=B|s<<8;u=p|u;B=s;s=I;p=s>>>10|0;i[q>>2]=ba&255|(B|s<<22);i[f+4>>2]=M&-262144|(p|u|K<<4);D=3;E=0;s=j[F|0]}f=D^3;p=s&255;s=((L|0)==(p>>>6|0)?D:f)<<5|E|((L|0)==(p>>>2&3)?D:f)<<1|((L|0)==(p>>>4&3)?D:f)<<3;p=j[F+1|0];s=s|((L|0)==(p&3)?D:f)<<7|((L|0)==(p>>>6|0)?D:f)<<13|((L|0)==(p>>>2&3)?D:f)<<9|((L|0)==(p>>>4&3)?D:f)<<11;p=j[F+2|0];s=s|((L|0)==(p&3)?D:f)<<15|((L|0)==(p>>>6|0)?D:f)<<21|((L|0)==(p>>>2&3)?D:f)<<17|((L|0)==(p>>>4&3)?D:f)<<19;p=j[F+3|0];s=s|((L|0)==(p&3)?D:f)<<23|((L|0)==(p>>>6|0)?D:f)<<29|((L|0)==(p>>>2&3)?D:f)<<25|((L|0)==(p>>>4&3)?D:f)<<27;if((s|0)<=-1){break d}B=31;D=66;E=2147483647;while(1){f=q+(D>>>3|0)|0;p=f;u=j[f|0];f=D&7;g[p|0]=u&(E<>>0>>0?f:B;D=f+D|0;E=E>>>f|0;s=s>>>f|0;B=B-f|0;if(B){continue}break}break D;default:break Ya}}B=o(i[((L<<4)+(D<<2)|0)+321824>>2],10);u=u<<5;f=B+o(u+f|0,60)<<2;D=f+220672|0;p=B+o(p+u|0,60)<<2;E=p+220672|0;s=B+o(s+u|0,60)<<2;u=s+220672|0;B=k[f+220678>>1]+(k[p+220678>>1]+k[s+220678>>1]|0)|0;G=k[f+220674>>1]+(k[p+220674>>1]+k[s+220674>>1]|0)|0;H=B>>>0>>0;I=k[f+220682>>1]+(k[p+220682>>1]+k[s+220682>>1]|0)|0;B=H?B:G;G=I>>>0>>0;M=G?2:H;H=k[f+220686>>1]+(k[p+220686>>1]+k[s+220686>>1]|0)|0;B=G?I:B;G=H>>>0>>0;M=G?3:M;I=k[f+220690>>1]+(k[p+220690>>1]+k[s+220690>>1]|0)|0;B=G?H:B;G=I>>>0>>0;M=G?4:M;H=k[f+220694>>1]+(k[p+220694>>1]+k[s+220694>>1]|0)|0;B=G?I:B;G=H>>>0>>0;M=G?5:M;I=k[f+220698>>1]+(k[p+220698>>1]+k[s+220698>>1]|0)|0;B=G?H:B;G=I>>>0>>0;M=G?6:M;H=k[f+220702>>1]+(k[p+220702>>1]+k[s+220702>>1]|0)|0;B=G?I:B;G=H>>>0>>0;M=G?7:M;I=k[f+220706>>1]+(k[p+220706>>1]+k[s+220706>>1]|0)|0;B=G?H:B;G=I>>>0>>0;B=(k[f+220710>>1]+(k[p+220710>>1]+k[s+220710>>1]|0)>>>0<(G?I:B)>>>0?9:G?8:M)<<2;ab:{if(j[(B|j[F|0]&3)+290864|0]&2){G=u+B|0;f=j[G+1|0];p=f>>>24|0;u=f<<8;f=p;s=u;E=B+E|0;u=j[E+1|0];p=u>>>10|0;u=s|u<<22;p=f|p;f=B+D|0;D=(p|j[f+1|0]<<4)&2032;s=u&532709120;u=j[G|0]&127;p=u>>>17|0;u=s|u<<15;G=p|D;s=u;u=j[E|0]&127;p=u>>>3|0;D=s|u<<29|32;p=p|G|-262144;E=p;i[q>>2]=D;i[q+4>>2]=p;s=3;break ab}G=u+B|0;s=j[G|0];p=s>>>24|0;u=s<<8;s=p;f=u;E=B+E|0;u=j[E|0];p=u>>>10|0;u=f|u<<22;s=p|s;f=u;u=B+D|0;p=j[u|0]<<4;D=f&532709120;H=(p|s)&2032;s=j[G+1|0]&127;p=s>>>17|0;s=s<<15|D;G=p|H;f=s;s=j[E+1|0]&127;p=s>>>3|0;D=f|s<<29|32;p=p|G|-262144;E=p;f=q;i[f>>2]=D;i[f+4>>2]=p;f=u+1|0;s=0}p=j[f|0]<<11;i[q>>2]=D;i[q+4>>2]=p|E;f=B+290864|0;p=j[F+3|0];u=j[F+2|0];B=(s^j[f+(p>>>2&3)|0])<<25|(s^j[f+(p>>>4&3)|0])<<27|(s^j[f+(p&3)|0])<<23|(s^j[f+(u>>>6|0)|0])<<21|(s^j[f+(u>>>4&3)|0])<<19|(s^j[f+(u>>>2&3)|0])<<17|(s^j[f+(u&3)|0])<<15;u=j[F+1|0];B=B|(s^j[f+(u>>>6|0)|0])<<13|(s^j[f+(u>>>4&3)|0])<<11|(s^j[f+(u>>>2&3)|0])<<9|(s^j[f+(u&3)|0])<<7;u=j[F|0];s=B|(s^j[f+(u>>>6|0)|0])<<5|(s^j[f+(u>>>4&3)|0])<<3|s^j[f+(u&3)|0]|(s^j[f+(u>>>2&3)|0])<<1|(s^j[f+(p>>>6|0)|0])<<29;if((s|0)<=-1){break d}B=31;D=66;E=2147483647;while(1){f=q+(D>>>3|0)|0;p=f;u=j[f|0];f=D&7;g[p|0]=u&(E<>>0>>0?f:B;D=f+D|0;E=E>>>f|0;s=s>>>f|0;B=B-f|0;if(B){continue}break}break D;case 10:f=o(O+_|0,m)+b|0;p=j[s+4|0];u=j[F+9|0];I=j[F+8|0];bb:{switch(j[F+10|0]+ -1|0){case 0:if(I>>>0>=4){break e}q=i[((p<<4)+(I<<2)|0)+28352>>2];p=j[s|0];B=q+(p<<3|p>>>2)|0;cb:{if(B>>>0<256){break cb}p=(B|0)>-1;B=255;if(p){break cb}B=0}p=i[f+12>>2];i[f+8>>2]=i[f+8>>2]&-4|B>>>6;i[f+12>>2]=p;s=i[f+4>>2]&262143;p=B<<26;i[f>>2]=i[f>>2];i[f+4>>2]=B<<18&66846720|(p|s);break D;case 1:q=j[s+1|0];q=q<<3|q>>>2;p=p<<4;E=q+i[p+28352>>2]|0;db:{if(E>>>0<256){break db}s=(E|0)>-1;E=255;if(s){break db}E=0}i[C+32>>2]=E;E=q+i[p+28356>>2]|0;eb:{if(E>>>0<256){break eb}s=(E|0)>-1;E=255;if(s){break eb}E=0}i[C+36>>2]=E;E=q+i[p+28360>>2]|0;fb:{if(E>>>0<256){break fb}s=(E|0)>-1;E=255;if(s){break fb}E=0}i[C+40>>2]=E;D=q+i[p+28364>>2]|0;gb:{if(D>>>0<256){break gb}p=(D|0)>-1;D=255;if(p){break gb}D=0}i[C+44>>2]=D;s=i[(C+32|0)+(I<<2)>>2];E=i[f+12>>2];K=i[f+8>>2]&-4;u=i[(C+32|0)+(u<<2)>>2];i[f+8>>2]=K|u>>>6&3;i[f+12>>2]=E;p=i[f+4>>2]&262143;L=p;ba=i[f>>2];i[f>>2]=ba;i[f+4>>2]=(s&255)<<18|p|u<<26;D=0;G=j[F|0];H=(I|0)==(G&3)?0:3;if(H&2){i[f+8>>2]=s>>>6&3|K;i[f+12>>2]=E;i[f>>2]=ba;i[f+4>>2]=L|((u&255)<<18|s<<26);G=j[F|0];H=0;D=3}p=D^3;q=j[F+3|0];s=G&255;u=((I|0)==(s>>>6|0)?D:p)<<5|H|((I|0)==(s>>>2&3)?D:p)<<1|((I|0)==(s>>>4&3)?D:p)<<3;s=j[F+1|0];u=u|((I|0)==(s&3)?D:p)<<7|((I|0)==(s>>>6|0)?D:p)<<13|((I|0)==(s>>>2&3)?D:p)<<9|((I|0)==(s>>>4&3)?D:p)<<11;s=j[F+2|0];s=((I|0)==(q&3)?D:p)<<23|(u|((I|0)==(s&3)?D:p)<<15|((I|0)==(s>>>6|0)?D:p)<<21|((I|0)==(s>>>2&3)?D:p)<<17|((I|0)==(s>>>4&3)?D:p)<<19)|((I|0)==(q>>>6|0)?D:p)<<29|((I|0)==(q>>>2&3)?D:p)<<25|((I|0)==(q>>>4&3)?D:p)<<27;if((s|0)<=-1){break d}B=31;D=97;E=2147483647;while(1){p=f+(D>>>3|0)|0;q=p;u=j[p|0];p=D&7;g[q|0]=u&(E<>>0>>0?p:B;D=p+D|0;E=E>>>p|0;s=s>>>p|0;B=B-p|0;if(B){continue}break}break D;default:break bb}}H=i[f+12>>2];K=i[f+8>>2]&-4;B=o((i[((I<<4)+(u<<2)|0)+321888>>2]+o(p,192)|0)+o(j[s|0],6)|0,3);s=j[B+282161|0];i[f+8>>2]=K|s>>>6;i[f+12>>2]=H;p=i[f+4>>2]&262143;I=p;ba=j[B+282160|0];E=ba;G=E<<18|p;L=i[f>>2];i[f>>2]=L;q=s;i[f+4>>2]=q<<26|G;B=j[B+282162|0];D=j[F|0];p=B>>>(D<<1&6)|0;G=p&3;if(p&2){i[f>>2]=L;i[f+4>>2]=I|(q<<18|E<<26);i[f+8>>2]=(ba&192)>>>6|K;i[f+12>>2]=H;G=G^3;D=j[F|0];B=B^255}p=j[F+3|0];q=j[F+2|0];s=j[F+1|0];s=B>>>(p<<1&6)<<23&25165824|(B>>>(q<<1&6)<<15&98304|(B>>>(s<<1&6)<<7&384|(B>>>(D>>>5&6)<<5&96|(B>>>(D>>>3&6)<<3&24|(B>>>(D>>>1&6)<<1&6|G)))|B>>>(s>>>1&6)<<9&1536|B>>>(s>>>3&6)<<11&6144|B>>>(s>>>5&6)<<13&24576)|B>>>(q>>>1&6)<<17&393216|B>>>(q>>>3&6)<<19&1572864|B>>>(q>>>5&6)<<21&6291456)|B>>>(p>>>1&6)<<25&100663296|B>>>(p>>>3&6)<<27&402653184|B>>>(p>>>5&6)<<29&1610612736;if((s|0)<=-1){break d}B=31;D=97;E=2147483647;while(1){p=f+(D>>>3|0)|0;q=p;u=j[p|0];p=D&7;g[q|0]=u&(E<>>0>>0?p:B;D=p+D|0;E=E>>>p|0;s=s>>>p|0;B=B-p|0;if(B){continue}break}break D;case 11:f=o(O+_|0,m)+b|0;B=j[s+4|0];hb:{ib:{u=j[F+8|0];p=j[F+9|0];if((u|0)!=(p|0)){q=0;switch(u|0){case 1:break hb;case 0:break ib;default:break F}}if(u>>>0>=4){break e}p=j[s|0];B=i[((B<<4)+(u<<2)|0)+28352>>2]+(p<<3|p>>>2)|0;jb:{if(B>>>0<256){break jb}p=(B|0)>-1;B=255;if(p){break jb}B=0}h[f>>1]=B|7424;p=k[145594]|k[145595]<<16;h[f+2>>1]=p;h[f+4>>1]=p>>>16;h[f+6>>1]=k[145596];break D}q=(p|0)==3?0:((p|0)==2)<<1;break F}q=(p|0)==3?1:(p|0)==2?3:0;break F;case 12:h[C+136>>1]=0;K=o(O+_|0,m)+b|0;H=255;f=1;kb:{if(!w){break kb}q=L+o(k[K+2>>1],11)|0;f=j[q+10|0];if((f|0)!=1){break kb}p=E+(k[K>>1]<<3)|0;f=j[p+1|0];f=f<<3|f>>>2;p=j[p+4|0]<<4;G=f+i[p+28352>>2]|0;lb:{if(G>>>0<256){break lb}u=(G|0)>-1;G=255;if(u){break lb}G=0}i[C+32>>2]=G;G=f+i[p+28356>>2]|0;mb:{if(G>>>0<256){break mb}u=(G|0)>-1;G=255;if(u){break mb}G=0}i[C+36>>2]=G;G=f+i[p+28360>>2]|0;nb:{if(G>>>0<256){break nb}u=(G|0)>-1;G=255;if(u){break nb}G=0}i[C+40>>2]=G;B=f+i[p+28364>>2]|0;ob:{if(B>>>0<256){break ob}f=(B|0)>-1;B=255;if(f){break ob}B=0}i[C+44>>2]=B;H=i[(C+32|0)+(j[q+8|0]<<2)>>2];f=1}B=j[F+9|0];p=j[F+8|0];u=j[s+4|0];q=j[F+10|0];if(!((f|0)!=1|(q|0)!=1)){if(p>>>0>=4){break f}f=j[s+2|0];q=f>>>2|0;D=f<<3;f=j[s+1|0];E=f<<3|f>>>2;f=j[s|0];s=f<<3|f>>>2;f=i[((u<<4)+(p<<2)|0)+28352>>2];B=s+f|0;pb:{if(B>>>0<256){break pb}p=(B|0)>-1;B=255;if(p){break pb}B=0}p=q|D;q=f+E|0;qb:{if(q>>>0<256){break qb}s=(q|0)>-1;q=255;if(s){break qb}q=0}u=f+p|0;rb:{if(u>>>0<256){break rb}f=(u|0)>-1;u=255;if(f){break rb}u=0}i[K+12>>2]=0;i[K+4>>2]=-1;i[K+8>>2]=0;g[K|0]=-516;g[K+1|0]=16777213;g[K+2|0]=65535;g[K+3|0]=255;s=B<<8|B;f=16;B=64;while(1){p=K+(B>>3)|0;E=p;D=j[p|0];p=B&7;g[E|0]=D|s<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}s=q<<8|q;f=16;while(1){p=K+(B>>3)|0;q=p;E=j[p|0];p=B&7;g[q|0]=E|s<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}s=u<<8|u;f=16;while(1){p=K+(B>>3)|0;q=p;u=j[p|0];p=B&7;g[q|0]=u|s<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}s=H<<8|H;f=16;while(1){p=K+(B>>3)|0;q=p;u=j[p|0];p=B&7;g[q|0]=u|s<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}break D}sb:{tb:{ub:{if(!(f>>>0>2|q>>>0>2)){Fa(C- -64|0,s,u);q=(C- -64|0)+(p<<2)|0;f=j[q|0];g[C+128|0]=f;p=j[q+1|0];g[C+130|0]=p;q=j[q+2|0];g[C+132|0]=q;u=(C- -64|0)+(B<<2)|0;s=j[u|0];g[C+129|0]=s;G=j[u+1|0];g[C+131|0]=G;H=j[u+2|0];g[C+133|0]=H;ba=(s+G|0)+H|0;M=q+(f+p|0)|0;vb:{if(ba>>>0>=M>>>0){I=H;H=q;D=G;G=p;u=s;s=f;break vb}g[C+133|0]=q;g[C+132|0]=H;g[C+131|0]=p;g[C+130|0]=G;g[C+129|0]=f;g[C+128|0]=s;I=q;D=p;u=f}if(!w){break ub}q=L+o(k[K+2>>1],11)|0;f=j[q+9|0];ua=j[q+8|0];p=E+(k[K>>1]<<3)|0;E=j[p+1|0];E=E<<3|E>>>2;L=j[p+4|0]<<4;p=E+i[L+28352>>2]|0;wb:{if(p>>>0<256){break wb}va=(p|0)>-1;p=255;if(va){break wb}p=0}i[C+16>>2]=p;p=E+i[L+28356>>2]|0;xb:{if(p>>>0<256){break xb}va=(p|0)>-1;p=255;if(va){break xb}p=0}i[C+20>>2]=p;p=E+i[L+28360>>2]|0;yb:{if(p>>>0<256){break yb}va=(p|0)>-1;p=255;if(va){break yb}p=0}i[C+24>>2]=p;E=E+i[L+28364>>2]|0;zb:{if(E>>>0<256){break zb}p=(E|0)>-1;E=255;if(p){break zb}E=0}i[C+28>>2]=E;L=i[(C+16|0)+(ua<<2)>>2];g[C+134|0]=L;E=i[(C+16|0)+(f<<2)>>2];g[C+135|0]=E;p=j[q|0];g[C+139|0]=(f|0)==(p&3);g[C+145|0]=(f|0)==(p>>>6|0);g[C+141|0]=(f|0)==(p>>>2&3);g[C+143|0]=(f|0)==(p>>>4&3);p=j[q+1|0];g[C+147|0]=(f|0)==(p&3);g[C+153|0]=(f|0)==(p>>>6|0);g[C+149|0]=(f|0)==(p>>>2&3);g[C+151|0]=(f|0)==(p>>>4&3);p=j[q+2|0];g[C+155|0]=(f|0)==(p&3);g[C+161|0]=(f|0)==(p>>>6|0);g[C+157|0]=(f|0)==(p>>>2&3);g[C+159|0]=(f|0)==(p>>>4&3);p=j[q+3|0];g[C+163|0]=(f|0)==(p&3);g[C+169|0]=(f|0)==(p>>>6|0);g[C+165|0]=(f|0)==(p>>>2&3);g[C+167|0]=(f|0)==(p>>>4&3);E=E&255;q=L&255;break tb}if(w){E=E+(k[K>>1]<<3)|0;D=j[E+4|0];q=L+o(k[K+2>>1],11)|0;G=j[q+8|0];f=j[q+9|0];if((G|0)==(f|0)){q=j[E+1|0];q=q<<3|q>>>2;f=D<<4;H=q+i[f+28352>>2]|0;Ab:{if(H>>>0<256){break Ab}D=(H|0)>-1;H=255;if(D){break Ab}H=0}i[C+64>>2]=H;H=q+i[f+28356>>2]|0;Bb:{if(H>>>0<256){break Bb}D=(H|0)>-1;H=255;if(D){break Bb}H=0}i[C+68>>2]=H;H=q+i[f+28360>>2]|0;Cb:{if(H>>>0<256){break Cb}D=(H|0)>-1;H=255;if(D){break Cb}H=0}i[C+72>>2]=H;f=q+i[f+28364>>2]|0;Db:{if(f>>>0<256){break Db}q=(f|0)>-1;f=255;if(q){break Db}f=0}i[C+76>>2]=f;g[C+169|0]=1;g[C+167|0]=1;g[C+165|0]=1;g[C+163|0]=1;g[C+161|0]=1;g[C+159|0]=1;g[C+157|0]=1;g[C+155|0]=1;g[C+153|0]=1;g[C+151|0]=1;g[C+149|0]=1;g[C+147|0]=1;g[C+145|0]=1;g[C+143|0]=1;g[C+141|0]=1;g[C+139|0]=1;h[C+134>>1]=k[(i[(C- -64|0)+(G<<2)>>2]<<1)+323744>>1];break H}if((f|0)!=3|D>>>0<7|(j[q+10|0]!=2|G)){break sb}Fa(C- -64|0,E,D);g[C+134|0]=j[j[C+65|0]+324256|0];g[C+135|0]=j[j[C+77|0]+324256|0];D=j[q|0];g[C+139|0]=(f|0)==(D&3)?3:0;g[C+145|0]=(f|0)==(D>>>6|0)?3:0;g[C+141|0]=(f|0)==(D>>>2&3)?3:0;g[C+143|0]=(f|0)==(D>>>4&3)?3:0;D=j[q+1|0];g[C+147|0]=(f|0)==(D&3)?3:0;g[C+153|0]=(f|0)==(D>>>6|0)?3:0;g[C+149|0]=(f|0)==(D>>>2&3)?3:0;g[C+151|0]=(f|0)==(D>>>4&3)?3:0;D=j[q+2|0];g[C+155|0]=(f|0)==(D&3)?3:0;g[C+161|0]=(f|0)==(D>>>6|0)?3:0;g[C+157|0]=(f|0)==(D>>>2&3)?3:0;g[C+159|0]=(f|0)==(D>>>4&3)?3:0;q=j[q+3|0];g[C+163|0]=(f|0)==(q&3)?3:0;g[C+169|0]=(f|0)==(q>>>6|0)?3:0;g[C+165|0]=(f|0)==(q>>>2&3)?3:0;g[C+167|0]=(f|0)==(q>>>4&3)?3:0;break H}g[C+169|0]=0;g[C+167|0]=0;g[C+165|0]=0;g[C+163|0]=0;g[C+161|0]=0;g[C+159|0]=0;g[C+157|0]=0;g[C+155|0]=0;g[C+153|0]=0;g[C+151|0]=0;g[C+149|0]=0;g[C+147|0]=0;g[C+145|0]=0;g[C+143|0]=0;g[C+141|0]=0;g[C+139|0]=0;h[C+134>>1]=257;break H}g[C+169|0]=0;g[C+167|0]=0;g[C+165|0]=0;g[C+163|0]=0;g[C+161|0]=0;g[C+159|0]=0;g[C+157|0]=0;g[C+155|0]=0;g[C+153|0]=0;g[C+151|0]=0;g[C+149|0]=0;g[C+147|0]=0;g[C+145|0]=0;g[C+143|0]=0;g[C+141|0]=0;g[C+139|0]=0;h[C+134>>1]=65535;E=255;q=255}f=ba>>>0>>0;p=j[F|0];g[C+144|0]=f^(B|0)==(p>>>6|0);L=f^(B|0)==(p&3);g[C+138|0]=L;g[C+142|0]=f^(B|0)==(p>>>4&3);g[C+140|0]=f^(B|0)==(p>>>2&3);p=j[F+1|0];g[C+152|0]=f^(B|0)==(p>>>6|0);g[C+146|0]=f^(B|0)==(p&3);g[C+150|0]=f^(B|0)==(p>>>4&3);g[C+148|0]=f^(B|0)==(p>>>2&3);p=j[F+2|0];g[C+160|0]=f^(B|0)==(p>>>6|0);g[C+154|0]=f^(B|0)==(p&3);g[C+158|0]=f^(B|0)==(p>>>4&3);g[C+156|0]=f^(B|0)==(p>>>2&3);p=j[F+3|0];g[C+168|0]=f^(B|0)==(p>>>6|0);g[C+162|0]=f^(B|0)==(p&3);g[C+166|0]=f^(B|0)==(p>>>4&3);g[C+164|0]=f^(B|0)==(p>>>2&3);i[K+12>>2]=0;g[K+11|0]=192;g[K+3|0]=0;g[K+4|0]=0;g[K+5|0]=0;g[K+6|0]=0;g[K+7|0]=0;g[K+8|0]=0;g[K+9|0]=0;g[K+10|0]=0;g[K+2|0]=1;g[K|0]=33857;g[K+1|0]=132;f=8;B=17;break G}G=i[((G<<4)+(f<<2)|0)+323488>>2];E=j[E+1|0];f=j[(G+(o(E,48)+o(D,6)|0)|0)+321952|0]<<2;h[C+134>>1]=k[(f+(o(E+(D<<5)|0,60)+o(G,10)<<2)|0)+29104>>1];f=f+290864|0;D=j[q|0];g[C+139|0]=j[f+(D&3)|0];g[C+145|0]=j[f+(D>>>6|0)|0];g[C+143|0]=j[f+(D>>>4&3)|0];g[C+141|0]=j[f+(D>>>2&3)|0];D=j[q+1|0];g[C+153|0]=j[f+(D>>>6|0)|0];g[C+147|0]=j[f+(D&3)|0];g[C+151|0]=j[f+(D>>>4&3)|0];g[C+149|0]=j[f+(D>>>2&3)|0];D=j[q+2|0];g[C+161|0]=j[f+(D>>>6|0)|0];g[C+155|0]=j[f+(D&3)|0];g[C+159|0]=j[f+(D>>>4&3)|0];g[C+157|0]=j[f+(D>>>2&3)|0];q=j[q+3|0];g[C+169|0]=j[f+(q>>>6|0)|0];g[C+163|0]=j[f+(q&3)|0];g[C+167|0]=j[f+(q>>>4&3)|0];g[C+165|0]=j[f+(q>>>2&3)|0];break H;case 13:A(19820,19512,8353,19588);x();case 15:A(19820,19512,8368,19588);x();case 20:p=o(O+_|0,m)+b|0;h[p+2>>1]=f;h[p>>1]=Q;break D;case 23:if((m|0)!=4){break P}p=j[s+1|0];p=p<<3|p>>>2;f=j[s+4|0]<<4;s=p+i[f+28352>>2]|0;Eb:{if(s>>>0<256){break Eb}q=(s|0)>-1;s=255;if(q){break Eb}s=0}q=O<<2;i[C+128>>2]=s;s=p+i[f+28356>>2]|0;Fb:{if(s>>>0<256){break Fb}B=(s|0)>-1;s=255;if(B){break Fb}s=0}B=q+ca|0;i[C+132>>2]=s;s=p+i[f+28360>>2]|0;Gb:{if(s>>>0<256){break Gb}D=(s|0)>-1;s=255;if(D){break Gb}s=0}B=B<<2;q=v-q|0;i[C+136>>2]=s;D=p+i[f+28364>>2]|0;Hb:{if(D>>>0<256){break Hb}f=(D|0)>-1;D=255;if(f){break Hb}D=0}f=b+B|0;i[C+140>>2]=D;if((q|0)<=3){if((P|0)==(ma|0)){break D}E=0;if(!q){break D}while(1){p=j[F+E|0];D=0;while(1){g[(D<<2|3)+f|0]=i[(C+128|(p>>>(D<<1)&3)<<2)>>2];D=D+1|0;if((u|0)!=(D|0)){continue}break}f=f+pa|0;E=E+1|0;if((Z|0)!=(E|0)){continue}break}break D}D=0;if((P|0)==(ma|0)){break D}while(1){p=j[D+F|0];g[f+3|0]=i[(C+128|(p&3)<<2)>>2];g[f+7|0]=i[(C+128|p&12)>>2];g[f+11|0]=i[(C+128|p>>>2&12)>>2];g[f+15|0]=i[(C+128|p>>>4&12)>>2];f=f+pa|0;D=D+1|0;if((Z|0)!=(D|0)){continue}break}break D;case 21:if((m|0)!=4){break O}Fa(C+128|0,s,j[s+4|0]);if((P|0)==(ma|0)){break D}f=O<<2;if((f|0)==(v|0)){break D}f=(f+ca<<2)+b|0;G=0;while(1){s=j[F+G|0];D=0;while(1){p=D<<2;q=C+128|(s>>>(D<<1)&3)<<2;g[p+f|0]=j[q|0];g[(p|1)+f|0]=j[q+1|0];g[(p|2)+f|0]=j[q+2|0];D=D+1|0;if((u|0)!=(D|0)){continue}break}f=f+pa|0;G=G+1|0;if((Z|0)!=(G|0)){continue}break}break D;case 22:if((m|0)!=4){break N}Fa(C+128|0,s,j[s+4|0]);if((P|0)==(ma|0)){break D}f=O<<2;if((f|0)==(v|0)){break D}D=(f+ca<<2)+b|0;G=0;while(1){s=j[F+G|0];f=0;while(1){p=f<<2;q=C+128|(s>>>(f<<1)&3)<<2;g[p+D|0]=j[q|0];g[(p|1)+D|0]=j[q+1|0];g[(p|2)+D|0]=j[q+2|0];g[(p|3)+D|0]=255;f=f+1|0;if((u|0)!=(f|0)){continue}break}D=D+pa|0;G=G+1|0;if((Z|0)!=(G|0)){continue}break}break D;case 24:case 25:if((m|0)!=2){break M}Fa(C+128|0,s,j[s+4|0]);p=C;Ib:{if((l|0)!=24){f=o(j[C+129|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+130|0],31)+128|0;q=q|(f>>>8|0)+f<<3&63488;f=o(j[C+128|0],31)+128|0;h[C+64>>1]=q|(f>>>8|0)+f>>>8;f=o(j[C+133|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+134|0],31)+128|0;q=q|(f>>>8|0)+f<<3&63488;f=o(j[C+132|0],31)+128|0;h[C+66>>1]=q|(f>>>8|0)+f>>>8;f=o(j[C+137|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+138|0],31)+128|0;q=q|(f>>>8|0)+f<<3&63488;f=o(j[C+136|0],31)+128|0;h[C+68>>1]=q|(f>>>8|0)+f>>>8;f=o(j[C+141|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+142|0],31)+128|0;D=q|(f>>>8|0)+f<<3&260096;f=ea;break Ib}f=o(j[C+129|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+128|0],31)+128|0;q=q|(f>>>8|0)+f<<3&63488;f=o(j[C+130|0],31)+128|0;h[C+64>>1]=q|(f>>>8|0)+f>>>8;f=o(j[C+133|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+132|0],31)+128|0;q=q|(f>>>8|0)+f<<3&63488;f=o(j[C+134|0],31)+128|0;h[C+66>>1]=q|(f>>>8|0)+f>>>8;f=o(j[C+137|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+136|0],31)+128|0;q=q|(f>>>8|0)+f<<3&63488;f=o(j[C+138|0],31)+128|0;h[C+68>>1]=q|(f>>>8|0)+f>>>8;f=o(j[C+141|0],63)+128|0;q=(f>>>8|0)+f>>>3&8160;f=o(j[C+140|0],31)+128|0;D=q|(f>>>8|0)+f<<3&260096;f=ka}f=o(j[f|0],31)+128|0;h[p+70>>1]=(f>>>8|0)+f>>>8|D;if((P|0)==(ma|0)){break D}f=O<<2;if((f|0)==(v|0)){break D}s=(f+ca<<1)+b|0;q=0;while(1){f=j[q+F|0];D=0;while(1){p=D<<1;h[p+s>>1]=k[(C- -64|0)+((f>>>p&3)<<1)>>1];D=D+1|0;if((u|0)!=(D|0)){continue}break}s=s+la|0;q=q+1|0;if((Z|0)!=(q|0)){continue}break}break D;case 26:if((m|0)!=2){break L}Fa(C+128|0,s,j[s+4|0]);f=o(j[C+130|0],15)+128|0;q=(f>>>8|0)+f>>>4&1008;f=o(j[C+128|0],15)+128|0;p=(f>>>8|0)+f<<4&61440;f=o(j[C+129|0],15)+128|0;h[C+64>>1]=q|(p|(f>>>8|0)+f&16128);f=o(j[C+134|0],15)+128|0;q=(f>>>8|0)+f>>>4&1008;f=o(j[C+132|0],15)+128|0;p=(f>>>8|0)+f<<4&61440;f=o(j[C+133|0],15)+128|0;h[C+66>>1]=q|(p|(f>>>8|0)+f&16128);f=o(j[C+138|0],15)+128|0;q=(f>>>8|0)+f>>>4&1008;f=o(j[C+136|0],15)+128|0;p=(f>>>8|0)+f<<4&61440;f=o(j[C+137|0],15)+128|0;h[C+68>>1]=q|(p|(f>>>8|0)+f&16128);f=o(j[C+142|0],15)+128|0;q=(f>>>8|0)+f>>>4&1008;f=o(j[C+140|0],15)+128|0;p=(f>>>8|0)+f<<4&61440;f=o(j[C+141|0],15)+128|0;h[C+70>>1]=q|(p|(f>>>8|0)+f&16128);if((P|0)==(ma|0)){break D}f=O<<2;if((f|0)==(v|0)){break D}E=(f+ca<<1)+b|0;G=0;while(1){f=j[F+G|0];D=0;while(1){p=D<<1;q=p+E|0;h[q>>1]=k[(C- -64|0)+((f>>>p&3)<<1)>>1]|k[q>>1]&15;D=D+1|0;if((u|0)!=(D|0)){continue}break}E=E+la|0;G=G+1|0;if((Z|0)!=(G|0)){continue}break}break D;case 28:if((m|0)!=2){break K}Fa(C+128|0,s,j[s+4|0]);f=o(j[C+129|0],15)+128|0;p=(f>>>8|0)+f&16128;f=o(j[C+128|0],15)+128|0;p=p|(f>>>8|0)+f<<4&61440;f=o(j[C+130|0],15)+128|0;h[C+64>>1]=p|((f>>>8|0)+f&16128)>>>4|15;f=o(j[C+133|0],15)+128|0;p=(f>>>8|0)+f&16128;f=o(j[C+132|0],15)+128|0;p=p|(f>>>8|0)+f<<4&61440;f=o(j[C+134|0],15)+128|0;h[C+66>>1]=p|((f>>>8|0)+f&16128)>>>4|15;f=o(j[C+137|0],15)+128|0;p=(f>>>8|0)+f&16128;f=o(j[C+136|0],15)+128|0;p=p|(f>>>8|0)+f<<4&61440;f=o(j[C+138|0],15)+128|0;h[C+68>>1]=p|((f>>>8|0)+f&16128)>>>4|15;f=o(j[C+141|0],15)+128|0;p=(f>>>8|0)+f&16128;f=o(j[C+140|0],15)+128|0;p=p|(f>>>8|0)+f<<4&61440;f=o(j[C+142|0],15)+128|0;h[C+70>>1]=p|((f>>>8|0)+f&16128)>>>4|15;if((P|0)==(ma|0)){break D}f=O<<2;if((f|0)==(v|0)){break D}s=(f+ca<<1)+b|0;q=0;while(1){f=j[q+F|0];D=0;while(1){p=D<<1;h[p+s>>1]=k[(C- -64|0)+((f>>>p&3)<<1)>>1];D=D+1|0;if((u|0)!=(D|0)){continue}break}s=s+la|0;q=q+1|0;if((Z|0)!=(q|0)){continue}break}break D;case 27:if((m|0)!=2){break J}Fa(C+128|0,s,j[s+4|0]);f=o(j[C+129|0],15)+128|0;h[C+64>>1]=(f>>>8|0)+f>>>8;f=o(j[C+133|0],15)+128|0;h[C+66>>1]=(f>>>8|0)+f>>>8;f=o(j[C+137|0],15)+128|0;h[C+68>>1]=(f>>>8|0)+f>>>8;f=o(j[C+141|0],15)+128|0;h[C+70>>1]=(f>>>8|0)+f>>>8;if((P|0)==(ma|0)){break D}f=O<<2;if((f|0)==(v|0)){break D}s=(f+ca<<1)+b|0;q=0;while(1){f=j[q+F|0];D=0;while(1){p=D<<1;h[p+s>>1]=k[(C- -64|0)+((f>>>p&3)<<1)>>1];D=D+1|0;if((u|0)!=(D|0)){continue}break}s=s+la|0;q=q+1|0;if((Z|0)!=(q|0)){continue}break}break D;case 18:f=o(O+_|0,m)+b|0;B=j[s+4|0];Jb:{Kb:{u=j[F+8|0];p=j[F+9|0];if((u|0)!=(p|0)){q=0;switch(u|0){case 1:break Jb;case 0:break Kb;default:break I}}if(u>>>0>=4){break e}p=j[s|0];B=i[((B<<4)+(u<<2)|0)+28352>>2]+(p<<3|p>>>2)|0;Lb:{if(B>>>0<256){break Lb}p=(B|0)>-1;B=255;if(p){break Lb}B=0}h[f>>1]=B|7424;p=k[145594]|k[145595]<<16;g[f+2|0]=p;g[f+3|0]=p>>>8;g[f+4|0]=p>>>16;g[f+5|0]=p>>>24;p=k[145596];g[f+6|0]=p;g[f+7|0]=p>>>8;break D}q=(p|0)==3?0:((p|0)==2)<<1;break I}q=(p|0)==3?1:(p|0)==2?3:0;break I;case 16:case 17:break D;default:break ya}}A(19820,19512,8657,19588);x()}f=(B<<8)+(f?305440:302880)|0;g[p+4|0]=j[f+j[F|0]|0];g[p+5|0]=j[f+j[F+1|0]|0];g[p+6|0]=j[f+j[F+2|0]|0];g[p+7|0]=j[f+j[F+3|0]|0];break D}A(19604,19512,8125,19588);x()}A(19636,19512,8239,19588);x()}A(19677,19512,8240,19588);x()}A(19718,19512,8241,19588);x()}A(218689,19512,3092,218115);x()}A(218689,19512,3123,218706);x()}A(19759,19512,8258,19588);x()}A(19636,19512,8275,19588);x()}A(19677,19512,8276,19588);x()}A(19718,19512,8277,19588);x()}A(19773,19512,8290,19588);x()}A(219777,19512,3147,219760);x()}A(219810,19512,3164,219760);x()}A(218656,19512,3154,219760);x()}A(219853,19512,3171,219760);x()}A(19822,19512,8400,19588);x()}A(19822,19512,8440,19588);x()}A(19822,19512,8469,19588);x()}A(19880,19512,8500,19588);x()}A(19880,19512,8543,19588);x()}A(19880,19512,8583,19588);x()}A(19880,19512,8614,19588);x()}p=j[s|0]+(B<<5)<<4|q<<2;q=j[p+291201|0];h[f>>1]=q<<12|j[p+291200|0]|q<<4&3840;D=k[p+291202>>1];u=j[F|0];p=(D>>>o(u&3,3)&7)<<13;B=D>>>o(u>>>6|0,3)<<9&3584;s=p;p=(D>>>o(u>>>2&3,3)&7)<<1;u=D>>>o(u>>>4&3,3)<<21&14680064|B;s=p|s;q=j[F+1|0];p=(D>>>o(q&3,3)&7)<<10;B=D>>>o(q>>>6|0,3)<<6&448|u;E=j[F+3|0];G=j[F+2|0];g[f+7|0]=B|(D>>>o(E>>>6|0,3)&7|D>>>o(G>>>6|0,3)<<3&56);s=p|s;u=D>>>o(q>>>4&3,3)<<18&1835008;q=D>>>o(q>>>2&3,3)&7;p=q>>>2|0;q=u|(q<<30|B);p=p|s|(D>>>o(G&3,3)&7)<<7;g[f+2|0]=p>>>8;g[f+3|0]=p|(D>>>o(E&3,3)&7)<<4;q=D>>>o(G>>>2&3,3)<<27&939524096|q;B=q|D>>>o(G>>>4&3,3)<<15&229376;g[f+5|0]=(p&65535)<<16|B>>>16;g[f+4|0]=(p&16777215)<<8|(D>>>o(E>>>2&3,3)<<24&117440512|q)>>>24;g[f+6|0]=(p&255)<<24|(D>>>o(E>>>4&3,3)<<12&28672|B)>>>8;break D}Mb:{if((p|0)==(B|0)){Fa(C- -64|0,s,u);B=1;f=(C- -64|0)+(p<<2)|0;q=j[f|0]<<1;p=j[q+323744|0];g[C+128|0]=p;q=j[q+323745|0];g[C+129|0]=q;u=j[f+1|0]<<1;s=j[u+323744|0];g[C+130|0]=s;u=j[u+323745|0];g[C+131|0]=u;D=j[f+2|0]<<1;f=j[D+323744|0];g[C+132|0]=f;D=j[D+323745|0];g[C+133|0]=D;if((i[(D<<2)+323552>>2]+(i[(u<<2)+323552>>2]+i[(q<<2)+323552>>2]|0)|0)<(i[(f<<2)+323552>>2]+(i[(s<<2)+323552>>2]+i[(p<<2)+323552>>2]|0)|0)){g[C+133|0]=f;g[C+132|0]=D;g[C+131|0]=s;g[C+130|0]=u;g[C+129|0]=p;g[C+128|0]=q;B=2}g[C+168|0]=B;g[C+166|0]=B;g[C+164|0]=B;g[C+162|0]=B;g[C+160|0]=B;g[C+158|0]=B;g[C+156|0]=B;g[C+154|0]=B;g[C+152|0]=B;g[C+150|0]=B;g[C+148|0]=B;g[C+146|0]=B;g[C+144|0]=B;g[C+142|0]=B;g[C+140|0]=B;g[C+138|0]=B;break Mb}if(!(j[F+10|0]!=2|u>>>0<7|(j[F+8|0]|j[F+9|0]!=3))){Fa(C- -64|0,s,u);f=j[j[C+64|0]+324256|0];g[C+128|0]=f;q=j[j[C+76|0]+324256|0];g[C+129|0]=q;s=j[j[C+65|0]+324256|0];g[C+130|0]=s;u=j[j[C+77|0]+324256|0];g[C+131|0]=u;B=j[j[C+66|0]+324256|0];g[C+132|0]=B;D=j[j[C+78|0]+324256|0];g[C+133|0]=D;if((i[(D<<2)+323552>>2]+(i[(u<<2)+323552>>2]+i[(q<<2)+323552>>2]|0)|0)<(i[(B<<2)+323552>>2]+(i[(s<<2)+323552>>2]+i[(f<<2)+323552>>2]|0)|0)){g[C+133|0]=B;g[C+132|0]=D;g[C+131|0]=s;g[C+130|0]=u;g[C+129|0]=f;g[C+128|0]=q;f=j[F|0];g[C+144|0]=(p|0)==(f>>>6|0)?3:0;g[C+138|0]=(p|0)==(f&3)?3:0;g[C+142|0]=(p|0)==(f>>>4&3)?3:0;g[C+140|0]=(p|0)==(f>>>2&3)?3:0;f=j[F+1|0];g[C+152|0]=(p|0)==(f>>>6|0)?3:0;g[C+146|0]=(p|0)==(f&3)?3:0;g[C+150|0]=(p|0)==(f>>>4&3)?3:0;g[C+148|0]=(p|0)==(f>>>2&3)?3:0;f=j[F+2|0];g[C+160|0]=(p|0)==(f>>>6|0)?3:0;g[C+154|0]=(p|0)==(f&3)?3:0;g[C+158|0]=(p|0)==(f>>>4&3)?3:0;g[C+156|0]=(p|0)==(f>>>2&3)?3:0;f=j[F+3|0];g[C+162|0]=(p|0)==(f&3)?3:0;g[C+166|0]=(p|0)==(f>>>4&3)?3:0;g[C+164|0]=(p|0)==(f>>>2&3)?3:0;g[C+168|0]=(p|0)==(f>>>6|0)?3:0;break Mb}f=j[F|0];g[C+144|0]=(p|0)==(f>>>6|0)?0:3;g[C+138|0]=(p|0)==(f&3)?0:3;g[C+142|0]=(p|0)==(f>>>4&3)?0:3;g[C+140|0]=(p|0)==(f>>>2&3)?0:3;f=j[F+1|0];g[C+152|0]=(p|0)==(f>>>6|0)?0:3;g[C+146|0]=(p|0)==(f&3)?0:3;g[C+150|0]=(p|0)==(f>>>4&3)?0:3;g[C+148|0]=(p|0)==(f>>>2&3)?0:3;f=j[F+2|0];g[C+160|0]=(p|0)==(f>>>6|0)?0:3;g[C+154|0]=(p|0)==(f&3)?0:3;g[C+158|0]=(p|0)==(f>>>4&3)?0:3;g[C+156|0]=(p|0)==(f>>>2&3)?0:3;f=j[F+3|0];g[C+162|0]=(p|0)==(f&3)?0:3;g[C+166|0]=(p|0)==(f>>>4&3)?0:3;g[C+164|0]=(p|0)==(f>>>2&3)?0:3;g[C+168|0]=(p|0)==(f>>>6|0)?0:3;break Mb}q=u<<5;u=o(i[((p<<4)+(B<<2)|0)+323488>>2],10);f=o(q+j[s+2|0]|0,60)+u<<2;p=u+o(q+j[s+1|0]|0,60)<<2;q=u+o(q+j[s|0]|0,60)<<2;u=k[f+29110>>1]+(k[p+29110>>1]+k[q+29110>>1]|0)|0;B=k[f+29106>>1]+(k[p+29106>>1]+k[q+29106>>1]|0)|0;s=u>>>0>>0;I=f;E=s;D=k[f+29114>>1]+(k[p+29114>>1]+k[q+29114>>1]|0)|0;s=s?u:B;u=D>>>0>>0;E=u?2:E;B=k[f+29118>>1]+(k[p+29118>>1]+k[q+29118>>1]|0)|0;s=u?D:s;u=B>>>0>>0;E=u?3:E;D=k[f+29122>>1]+(k[p+29122>>1]+k[q+29122>>1]|0)|0;s=u?B:s;u=D>>>0>>0;E=u?4:E;B=k[f+29126>>1]+(k[p+29126>>1]+k[q+29126>>1]|0)|0;s=u?D:s;u=B>>>0>>0;E=u?5:E;D=k[f+29130>>1]+(k[p+29130>>1]+k[q+29130>>1]|0)|0;s=u?B:s;u=D>>>0>>0;E=u?6:E;B=k[f+29134>>1]+(k[p+29134>>1]+k[q+29134>>1]|0)|0;s=u?D:s;u=B>>>0>>0;E=u?7:E;D=k[f+29138>>1]+(k[p+29138>>1]+k[q+29138>>1]|0)|0;s=u?B:s;u=D>>>0>>0;f=(k[f+29142>>1]+(k[p+29142>>1]+k[q+29142>>1]|0)>>>0<(u?D:s)>>>0?9:u?8:E)<<2;u=I+f|0;s=j[u+29105|0];g[C+133|0]=s;u=j[u+29104|0];g[C+132|0]=u;B=f+p|0;p=j[B+29105|0];g[C+131|0]=p;B=j[B+29104|0];g[C+130|0]=B;D=f+q|0;q=j[D+29105|0];g[C+129|0]=q;D=j[D+29104|0];g[C+128|0]=D;if((i[(s<<2)+323552>>2]+(i[(p<<2)+323552>>2]+i[(q<<2)+323552>>2]|0)|0)>=(i[(u<<2)+323552>>2]+(i[(B<<2)+323552>>2]+i[(D<<2)+323552>>2]|0)|0)){f=f+290864|0;p=j[F|0];g[C+144|0]=j[f+(p>>>6|0)|0];g[C+138|0]=j[f+(p&3)|0];g[C+142|0]=j[f+(p>>>4&3)|0];g[C+140|0]=j[f+(p>>>2&3)|0];p=j[F+1|0];g[C+152|0]=j[f+(p>>>6|0)|0];g[C+146|0]=j[f+(p&3)|0];g[C+150|0]=j[f+(p>>>4&3)|0];g[C+148|0]=j[f+(p>>>2&3)|0];p=j[F+2|0];g[C+160|0]=j[f+(p>>>6|0)|0];g[C+154|0]=j[f+(p&3)|0];g[C+158|0]=j[f+(p>>>4&3)|0];g[C+156|0]=j[f+(p>>>2&3)|0];p=j[F+3|0];g[C+168|0]=j[f+(p>>>6|0)|0];g[C+162|0]=j[f+(p&3)|0];g[C+166|0]=j[f+(p>>>4&3)|0];g[C+164|0]=j[f+(p>>>2&3)|0];break Mb}g[C+133|0]=u;g[C+132|0]=s;g[C+131|0]=B;g[C+130|0]=p;g[C+129|0]=D;g[C+128|0]=q;f=f+290864|0;p=j[F|0];g[C+144|0]=3-j[f+(p>>>6|0)|0];g[C+138|0]=3-j[f+(p&3)|0];g[C+142|0]=3-j[f+(p>>>4&3)|0];g[C+140|0]=3-j[f+(p>>>2&3)|0];p=j[F+1|0];g[C+152|0]=3-j[f+(p>>>6|0)|0];g[C+146|0]=3-j[f+(p&3)|0];g[C+150|0]=3-j[f+(p>>>4&3)|0];g[C+148|0]=3-j[f+(p>>>2&3)|0];p=j[F+2|0];g[C+160|0]=3-j[f+(p>>>6|0)|0];g[C+154|0]=3-j[f+(p&3)|0];g[C+158|0]=3-j[f+(p>>>4&3)|0];g[C+156|0]=3-j[f+(p>>>2&3)|0];p=j[F+3|0];g[C+168|0]=3-j[f+(p>>>6|0)|0];g[C+162|0]=3-j[f+(p&3)|0];g[C+166|0]=3-j[f+(p>>>4&3)|0];g[C+164|0]=3-j[f+(p>>>2&3)|0]}i[K+8>>2]=0;i[K+12>>2]=0;g[K+7|0]=192;B=0;g[K+3|0]=0;g[K+4|0]=0;g[K+5|0]=0;g[K+6|0]=0;g[K+2|0]=1;g[K|0]=33858;g[K+1|0]=132;i[C+64>>2]=17;ab(K,C+128|0,C- -64|0,4);ab(K,sa,C- -64|0,4);while(1){f=126-(B<<1)|0;p=K+(f>>>3|0)|0;g[p|0]=j[p|0]|j[j[(C+B|0)+138|0]+290904|0]<<(f&6);B=B+1|0;if((B|0)!=32){continue}break}break D}while(1){p=K+(B>>3)|0;M=p;ua=j[p|0];p=B&7;g[M|0]=ua|s<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}f=8;while(1){p=K+(B>>3)|0;s=p;M=j[p|0];p=B&7;g[s|0]=M|u<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}f=8;while(1){p=K+(B>>3)|0;s=p;u=j[p|0];p=B&7;g[s|0]=u|G<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}f=8;while(1){p=K+(B>>3)|0;s=p;u=j[p|0];p=B&7;g[s|0]=u|D<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}f=8;while(1){p=K+(B>>3)|0;s=p;u=j[p|0];p=B&7;g[s|0]=u|H<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}s=8;f=8;while(1){p=K+(B>>3)|0;u=p;D=j[p|0];p=B&7;g[u|0]=D|I<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}while(1){f=K+(B>>3)|0;p=B&7;g[f|0]=j[f|0]|q<>>p|0;B=p+B|0;s=s-p|0;if(s){continue}break}while(1){p=K+(B>>3)|0;q=p;s=j[p|0];p=B&7;g[q|0]=s|E<>>p|0;B=p+B|0;f=f-p|0;if(f){continue}break}g[K+15|0]=j[K+15|0]|(L?-128:0);B=1;while(1){f=127-B|0;p=K+(f>>>3|0)|0;g[p|0]=j[p|0]|j[(C+B|0)+138|0]<<(f&7);B=B+1|0;if((B|0)!=32){continue}break}break D}p=j[s|0]+(B<<5)<<4|q<<2;q=j[p+286769|0];h[f>>1]=q<<12|j[p+286768|0]|q<<4&3840;D=k[p+286770>>1];u=j[F|0];p=(D>>>o(u&3,3)&7)<<13;B=D>>>o(u>>>6|0,3)<<9&3584;s=p;p=(D>>>o(u>>>2&3,3)&7)<<1;u=D>>>o(u>>>4&3,3)<<21&14680064|B;s=p|s;q=j[F+1|0];p=(D>>>o(q&3,3)&7)<<10;B=D>>>o(q>>>6|0,3)<<6&448|u;E=j[F+3|0];G=j[F+2|0];g[f+7|0]=B|(D>>>o(E>>>6|0,3)&7|D>>>o(G>>>6|0,3)<<3&56);s=p|s;u=D>>>o(q>>>4&3,3)<<18&1835008;q=D>>>o(q>>>2&3,3)&7;p=q>>>2|0;q=u|(q<<30|B);p=p|s|(D>>>o(G&3,3)&7)<<7;g[f+2|0]=p>>>8;g[f+3|0]=p|(D>>>o(E&3,3)&7)<<4;q=D>>>o(G>>>2&3,3)<<27&939524096|q;B=q|D>>>o(G>>>4&3,3)<<15&229376;g[f+5|0]=(p&65535)<<16|B>>>16;g[f+4|0]=(p&16777215)<<8|(D>>>o(E>>>2&3,3)<<24&117440512|q)>>>24;g[f+6|0]=(p&255)<<24|(D>>>o(E>>>4&3,3)<<12&28672|B)>>>8;break D}p=j[s|0]+(B<<5)<<4|q<<2;q=k[p+214e3>>1];g[f|0]=q;g[f+1|0]=q>>>8;p=k[p+214002>>1];s=p>>>o(j[F|0]&3,3)&7;q=j[f+2|0];g[f+2|0]=s|q&248;s=s|q&192;q=j[f+3|0]<<8;s=p>>>o(j[F|0]>>>2&3,3)<<3&56|(s|q);g[f+2|0]=s;q=p>>>o(j[F|0]>>>4&3,3)<<6&448|(s&63|q&65024);g[f+2|0]=q;g[f+3|0]=q>>>8;s=p>>>o(j[F|0]>>>6|0,3)<<1&14;q=q>>>8|0;g[f+3|0]=s|q&241;u=q&129;q=j[f+4|0]<<8;s=p>>>o(j[F+1|0]&3,3)<<4&112|(u|(q|s));g[f+3|0]=s;q=p>>>o(j[F+1|0]>>>2&3,3)<<7&896|(s&127|q&64512);g[f+3|0]=q;g[f+4|0]=q>>>8;q=p>>>o(j[F+1|0]>>>4&3,3)<<2&28|q>>>8&227;g[f+4|0]=q;g[f+4|0]=q&31|p>>>o(j[F+1|0]>>>6|0,3)<<5;s=p>>>o(j[F+2|0]&3,3)&7;q=j[f+5|0];g[f+5|0]=s|q&248;u=q&192;q=j[f+6|0]<<8;s=p>>>o(j[F+2|0]>>>2&3,3)<<3&56|(s|(u|q));g[f+5|0]=s;q=p>>>o(j[F+2|0]>>>4&3,3)<<6&448|(s&63|q&65024);g[f+5|0]=q;g[f+6|0]=q>>>8;s=q>>>8&241;q=j[f+7|0]<<8;s=s|(q|p>>>o(j[F+2|0]>>>6|0,3)<<1&14);g[f+6|0]=s;s=s&143|(q|p>>>o(j[F+3|0]&3,3)<<4&112);g[f+6|0]=s;u=s&127;s=p>>>o(j[F+3|0]>>>2&3,3)<<7;g[f+6|0]=u|s;q=(s&768|q&64512)>>>8|0;g[f+7|0]=q;q=q&227|p>>>o(j[F+3|0]>>>4&3,3)<<2&28;g[f+7|0]=q;g[f+7|0]=q&31|p>>>o(j[F+3|0]>>>6|0,3)<<5}J=J+ -4|0;O=O+1|0;u=O>>>0>>0;if((c|0)!=(O|0)){continue}break o}break}wa(ja)}if(!(u&1)){break o}B=0;break m}T=T+ -4|0;R=R+1|0;if((R|0)!=(d|0)){continue}break}B=0;if(da){break m}}Nb:{Ob:{switch(l+ -6|0){case 0:if((d|0)<1){break Nb}G=c+ -1|0;a=G?32-r(G)|0:0;O=d+ -1|0;e=O?32-r(O)|0:0;Y=a>>>0>>0?a:e;ka=Y<<1;V=-1<>2]=e;a=i[e+(G<<2)>>2];if(!(a&32768)){break b}l=f+(C+128|0)|0;n=a&30;i[l>>2]=(o(((a>>>10&31)+(a>>>5&31)|0)+(n>>>4|n)|0,255)>>>0)/31;Qb:{if((a|0)>=0){break Qb}f=f+(C- -64|0)|0;i[f>>2]=(o(((a>>>26&31)+(a>>>21&31)|0)+(a>>>16&31)|0,255)>>>0)/31;a=i[e>>2];if(!(a&32768)){break b}n=a&30;i[l+16>>2]=(o(((a>>>10&31)+(a>>>5&31)|0)+(n>>>4|n)|0,255)>>>0)/31;if((a|0)>-1){break Qb}i[f+16>>2]=(o(((a>>>26&31)+(a>>>21&31)|0)+(a>>>16&31)|0,255)>>>0)/31;a=i[e+U>>2];if(!(a&32768)){break b}e=a&30;i[l+32>>2]=(o(((a>>>10&31)+(a>>>5&31)|0)+(e>>>4|e)|0,255)>>>0)/31;if((a|0)>-1){break Qb}i[f+32>>2]=(o(((a>>>26&31)+(a>>>21&31)|0)+(a>>>16&31)|0,255)>>>0)/31;D=D+1|0;if((D|0)==3){break Pb}continue}break}break c}if((c|0)>=1){da=k[((E&255)<<1)+295296>>1]|k[(E>>>7&33554430)+295296>>1]<<16;_=E>>>Y<>2];p=i[C+72>>2];R=i[C+152>>2];l=i[C+136>>2];f=i[C+84>>2];z=i[C+68>>2];s=i[C+80>>2];J=i[C+64>>2];a=i[C+148>>2];t=i[C+132>>2];Q=i[C+144>>2];n=i[C+128>>2];P=i[C+60>>2];Z=i[C+56>>2];ma=i[C+52>>2];Rb:{while(1){v=Q;m=a;w=s;u=f;y=R;B=e;f=da|k[(q>>>7&33554430)+295296>>1]<<17|k[((q&255)<<1)+295296>>1]<<1;a=f;Sb:{if((c|0)==(d|0)){break Sb}f=f&V;a=f|q>>>Y<>>0>d>>>0){break Sb}a=f|_}I=(a<<3)+b|0;i[I+4>>2]=i[(na<<2)+xa>>2];D=(na<<3)+ja|0;a=i[D>>2];e=a>>>25&112;a=j[(a>>>19&31)+297152|0]+(j[(a>>>11&31)+297152|0]+j[(a>>>3&31)+297152|0]|0)<<4;i[C+44>>2]=i[e+295808>>2]+a;i[C+40>>2]=a+i[e+295812>>2];i[C+36>>2]=a+i[e+295820>>2];i[C+32>>2]=a+i[e+295816>>2];q=q+1|0;H=(G&q)<<2;a=i[H+ma>>2];if(a&32768){e=a&30;Q=(o(((a>>>10&31)+(a>>>5&31)|0)+(e>>>4|e)|0,255)>>>0)/31|0;if((a|0)>=0){break c}s=(o(((a>>>26&31)+(a>>>21&31)|0)+(a>>>16&31)|0,255)>>>0)/31|0;e=i[H+Z>>2];if(!(e&32768)){break b}a=e&30;a=(o(((e>>>10&31)+(e>>>5&31)|0)+(a>>>4|a)|0,255)>>>0)/31|0;if((e|0)>=0){break c}f=(o(((e>>>26&31)+(e>>>21&31)|0)+(e>>>16&31)|0,255)>>>0)/31|0;e=i[H+P>>2];if(!(e&32768)){break b}H=e&30;R=(o(((e>>>10&31)+(e>>>5&31)|0)+(H>>>4|H)|0,255)>>>0)/31|0;if((e|0)>=0){break c}ua=I;ea=j[D+5|0];K=j[D+7|0];H=ea&240|K>>>4;L=o(m,6);ca=L+o(v,6)|0;I=ca+(n+t<<1)|0;N=i[(C+32|0)+(j[H+295936|0]<<2)>>2]-I<<4;W=o(u,6);$=W+o(w,6)|0;F=$+(z+J<<1)|0;fa=(F|0)<(I|0);N=fa?0-N|0:N;I=F-I|0;I=fa?0-I|0:I;S=(N|0)>(o(I,13)|0)?12:(N|0)>I<<3?8:((N|0)>(o(I,3)|0))<<2;I=ea<<4&240|K&15;fa=n+v|0;ea=m+t|0;N=fa+ea<<2;K=i[(C+32|0)+(j[I+295936|0]<<2)>>2]-N<<4;T=0-K|0;M=K;X=w+J|0;K=u+z|0;ga=X+K<<2;ia=(ga|0)<(N|0);F=ia?T:M;N=ga-N|0;N=ia?0-N|0:N;M=S|((F|0)>(o(N,13)|0)?3:(F|0)>N<<3?2:(F|0)>(o(N,3)|0));N=(L+o(t,6)|0)+(fa<<1)|0;F=i[(C+32|0)+(j[I+296192|0]<<2)>>2]-N<<4;L=(W+o(z,6)|0)+(X<<1)|0;W=(L|0)<(N|0);F=W?0-F|0:F;N=L-N|0;N=W?0-N|0:N;S=M|((F|0)>(o(N,13)|0)?768:(F|0)>N<<3?512:((F|0)>(o(N,3)|0))<<8);X=o(v,3);W=o(m,9);fa=W+o(t,3)|0;n=X+(fa+n|0)|0;N=i[(C+32|0)+(j[H+296192|0]<<2)>>2]-n<<4;T=0-N|0;M=N;oa=o(w,3);ga=o(u,9);ia=ga+o(z,3)|0;N=oa+(ia+J|0)|0;F=(N|0)<(n|0);J=F?T:M;n=N-n|0;n=F?0-n|0:n;M=S|((J|0)>(o(n,13)|0)?3072:(J|0)>n<<3?2048:((J|0)>(o(n,3)|0))<<10);N=j[D+4|0];F=j[D+6|0];n=N<<4&240|F&15;D=m+v<<3;J=i[(C+32|0)+(j[n+295936|0]<<2)>>2]-D<<4;L=u+w<<3;pa=(L|0)<(D|0);J=pa?0-J|0:J;D=L-D|0;D=pa?0-D|0:D;M=M|((J|0)>(o(D,13)|0)?48:(J|0)>D<<3?32:((J|0)>(o(D,3)|0))<<4);D=N&240|F>>>4;J=(ca+(Q<<1)|0)+(a<<1)|0;N=i[(C+32|0)+(j[D+295936|0]<<2)>>2]-J<<4;F=($+(s<<1)|0)+(f<<1)|0;L=(F|0)<(J|0);N=L?0-N|0:N;J=F-J|0;J=L?0-J|0:J;S=M|((N|0)>(o(J,13)|0)?192:(N|0)>J<<3?128:((N|0)>(o(J,3)|0))<<6);J=o(m,12);F=J+(v<<2)|0;N=i[(C+32|0)+(j[n+296192|0]<<2)>>2]-F<<4;T=0-N|0;M=N;N=o(u,12);ca=N+(w<<2)|0;$=(ca|0)<(F|0);L=$?T:M;F=ca-F|0;F=$?0-F|0:F;M=S|((L|0)>(o(F,13)|0)?12288:(L|0)>F<<3?8192:((L|0)>(o(F,3)|0))<<12);ca=W+o(a,3)|0;F=(ca+X|0)+Q|0;L=i[(C+32|0)+(j[D+296192|0]<<2)>>2]-F<<4;W=ga+o(f,3)|0;$=(W+oa|0)+s|0;X=($|0)<(F|0);L=X?0-L|0:L;F=$-F|0;F=X?0-F|0:F;M=M|((L|0)>(o(F,13)|0)?49152:(L|0)>F<<3?32768:((L|0)>(o(F,3)|0))<<14);F=ea<<3;L=i[(C+32|0)+(j[I+296448|0]<<2)>>2]-F<<4;$=K<<3;X=($|0)<(F|0);L=X?0-L|0:L;F=$-F|0;F=X?0-F|0:F;S=M|((L|0)>(o(F,13)|0)?196608:(L|0)>F<<3?131072:((L|0)>(o(F,3)|0))<<16);t=J+(t<<2)|0;F=i[(C+32|0)+(j[H+296448|0]<<2)>>2]-t<<4;T=0-F|0;M=F;F=N+(z<<2)|0;L=(F|0)<(t|0);z=L?T:M;t=F-t|0;t=L?0-t|0:t;M=S|((z|0)>(o(t,13)|0)?786432:(z|0)>t<<3?524288:((z|0)>(o(t,3)|0))<<18);t=o(ea,6)+(l+y<<1)|0;z=i[(C+32|0)+(j[I+296704|0]<<2)>>2]-t<<4;I=o(K,6)+(p+B<<1)|0;ea=(I|0)<(t|0);z=ea?0-z|0:z;t=I-t|0;t=ea?0-t|0:t;S=M|((z|0)>(o(t,13)|0)?50331648:(z|0)>t<<3?33554432:((z|0)>(o(t,3)|0))<<24);t=o(y,3);l=fa+(t+l|0)|0;z=i[(C+32|0)+(j[H+296704|0]<<2)>>2]-l<<4;T=0-z|0;M=z;z=o(B,3);H=ia+(z+p|0)|0;I=(H|0)<(l|0);p=I?T:M;l=H-l|0;l=I?0-l|0:l;M=S|((p|0)>(o(l,13)|0)?201326592:(p|0)>l<<3?134217728:((p|0)>(o(l,3)|0))<<26);l=m<<4;p=i[(C+32|0)+(j[n+296448|0]<<2)>>2]-l<<4;H=u<<4;I=(H|0)<(l|0);p=I?0-p|0:p;l=H-l|0;l=I?0-l|0:l;M=M|((p|0)>(o(l,13)|0)?3145728:(p|0)>l<<3?2097152:((p|0)>(o(l,3)|0))<<20);l=J+(a<<2)|0;p=i[(C+32|0)+(j[D+296448|0]<<2)>>2]-l<<4;H=N+(f<<2)|0;I=(H|0)<(l|0);p=I?0-p|0:p;l=H-l|0;l=I?0-l|0:l;I=M|((p|0)>(o(l,13)|0)?12582912:(p|0)>l<<3?8388608:((p|0)>(o(l,3)|0))<<22);l=J+(y<<2)|0;n=i[(C+32|0)+(j[n+296704|0]<<2)>>2]-l<<4;p=N+(B<<2)|0;J=(p|0)<(l|0);n=J?0-n|0:n;l=p-l|0;l=J?0-l|0:l;N=I|((n|0)>(o(l,13)|0)?805306368:(n|0)>l<<3?536870912:((n|0)>(o(l,3)|0))<<28);l=(t+ca|0)+R|0;n=i[(C+32|0)+(j[D+296704|0]<<2)>>2]-l<<4;e=(o(((e>>>26&31)+(e>>>21&31)|0)+(e>>>16&31)|0,255)>>>0)/31|0;p=e+(z+W|0)|0;t=(p|0)<(l|0);n=t?0-n|0:n;l=p-l|0;l=t?0-l|0:l;i[ua>>2]=N|((n|0)>(o(l,13)|0)?-1073741824:(n|0)>l<<3?-2147483648:((n|0)>(o(l,3)|0))<<30);na=na+1|0;p=B;l=y;z=u;J=w;t=m;n=v;if((c|0)==(q|0)){break Rb}continue}break}break b}i[C+96>>2]=s;i[C+160>>2]=Q;i[C+164>>2]=a;i[C+100>>2]=f;i[C+168>>2]=R;i[C+104>>2]=e;i[C+144>>2]=Q;i[C+128>>2]=n;i[C+148>>2]=a;i[C+132>>2]=t;i[C+80>>2]=s;i[C+64>>2]=J;i[C+84>>2]=f;i[C+68>>2]=z;i[C+152>>2]=R;i[C+136>>2]=l;i[C+88>>2]=e;i[C+72>>2]=p}E=E+1|0;if((E|0)!=(d|0)){continue}break}break Nb;case 1:break Ob;default:break Nb}}if((d|0)<1){break Nb}ea=c+ -1|0;e=ea?32-r(ea)|0:0;F=d+ -1|0;f=F?32-r(F)|0:0;L=e>>>0>>0?e:f;V=L<<1;ma=-1<>2];W=i[a>>2];$=(ea&1)<<2;na=0;ka=0;while(1){n=ka+ -1|0;D=0;while(1){f=D<<2;l=(o(F&n+D,c)<<2)+xa|0;i[f+(C+52|0)>>2]=l;e=i[l+(ea<<2)>>2];Tb:{if(e&32768){z=(e>>>1&15)+297184|0;t=(e>>>5&31)+297152|0;q=(e>>>10&31)+297152|0;m=255;break Tb}z=(e>>>1&7)+297200|0;t=(e>>>4&15)+297184|0;q=(e>>>8&15)+297184|0;m=j[(e>>>12&7)+297208|0]}a=f+(C+128|0)|0;i[a>>2]=j[z|0]+(j[q|0]+(m+j[t|0]|0)|0);m=e>>>16|0;Ub:{if((e|0)<=-1){z=(m&31)+297152|0;t=(e>>>21&31)+297152|0;B=255;m=(e>>>26&31)+297152|0;break Ub}z=(m&15)+297184|0;t=(e>>>20&15)+297184|0;B=j[(e>>>28|0)+297208|0];m=(e>>>24&15)+297184|0}e=f+(C- -64|0)|0;i[e>>2]=j[z|0]+(j[m|0]+(j[t|0]+B|0)|0);f=i[l>>2];Vb:{if(f&32768){z=(f>>>1&15)+297184|0;t=(f>>>5&31)+297152|0;q=(f>>>10&31)+297152|0;m=255;break Vb}z=(f>>>1&7)+297200|0;t=(f>>>4&15)+297184|0;q=(f>>>8&15)+297184|0;m=j[(f>>>12&7)+297208|0]}i[a+16>>2]=j[z|0]+(j[q|0]+(m+j[t|0]|0)|0);m=f>>>16|0;Wb:{if((f|0)<=-1){z=(m&31)+297152|0;t=(f>>>21&31)+297152|0;B=255;f=(f>>>26&31)+297152|0;break Wb}z=(m&15)+297184|0;t=(f>>>20&15)+297184|0;B=j[(f>>>28|0)+297208|0];f=(f>>>24&15)+297184|0}i[e+16>>2]=j[z|0]+(j[f|0]+(j[t|0]+B|0)|0);f=i[l+$>>2];Xb:{if(f&32768){z=(f>>>5&31)+297152|0;t=(f>>>10&31)+297152|0;q=255;l=(f>>>1&15)+297184|0;break Xb}z=(f>>>4&15)+297184|0;t=(f>>>8&15)+297184|0;q=j[(f>>>12&7)+297208|0];l=(f>>>1&7)+297200|0}i[a+32>>2]=j[l|0]+(j[t|0]+(j[z|0]+q|0)|0);a=f>>>16|0;Yb:{if((f|0)<=-1){E=(f>>>21&31)+297152|0;z=(f>>>26&31)+297152|0;B=255;a=(a&31)+297152|0;break Yb}E=(f>>>20&15)+297184|0;z=(f>>>24&15)+297184|0;B=j[(f>>>28|0)+297208|0];a=(a&15)+297184|0}i[e+32>>2]=j[a|0]+(j[z|0]+(j[E|0]+B|0)|0);D=D+1|0;if((D|0)!=3){continue}break}if((c|0)>=1){fa=k[((ka&255)<<1)+295296>>1]|k[(ka>>>7&33554430)+295296>>1]<<16;X=ka>>>L<>2];l=i[C+72>>2];p=i[C+152>>2];Y=i[C+136>>2];f=i[C+84>>2];t=i[C+68>>2];s=i[C+80>>2];J=i[C+64>>2];a=i[C+148>>2];q=i[C+132>>2];Q=i[C+144>>2];n=i[C+128>>2];ia=i[C+60>>2];oa=i[C+56>>2];pa=i[C+52>>2];while(1){w=Q;m=a;E=s;v=f;N=p;O=e;a=ga+(z<<2)|0;f=W+(k[a>>1]<<3)|0;_=k[a+2>>1];p=fa|k[(z>>>7&33554430)+295296>>1]<<17|k[((z&255)<<1)+295296>>1]<<1;a=p;Zb:{if((c|0)==(d|0)){break Zb}p=p&ma;a=p|z>>>L<>>0>d>>>0){break Zb}a=p|X}P=(a<<3)+b|0;i[P+4>>2]=i[(na<<2)+xa>>2];K=(na<<3)+ja|0;a=i[K>>2];e=a>>>25&112;a=j[(a>>>19&31)+297152|0]+(j[(a>>>11&31)+297152|0]+j[(a>>>3&31)+297152|0]|0)<<4;p=i[e+295820>>2]+a|0;p=(p|0)<12240?p:12240;i[C+44>>2]=(p|0)>0?p:0;p=a+i[e+295816>>2]|0;p=(p|0)<12240?p:12240;i[C+40>>2]=(p|0)>0?p:0;p=a+i[e+295812>>2]|0;p=(p|0)<12240?p:12240;i[C+36>>2]=(p|0)>0?p:0;a=a+i[e+295808>>2]|0;a=(a|0)<12240?a:12240;i[C+32>>2]=(a|0)>0?a:0;e=j[j[f+1|0]+297152|0]<<4;a=j[f+4|0]<<4;f=e+i[a+297036>>2]|0;f=(f|0)<4080?f:4080;i[C+28>>2]=(f|0)>0?f:0;f=e+i[a+297032>>2]|0;f=(f|0)<4080?f:4080;i[C+24>>2]=(f|0)>0?f:0;f=e+i[a+297028>>2]|0;f=(f|0)<4080?f:4080;i[C+20>>2]=(f|0)>0?f:0;a=e+i[a+297024>>2]|0;a=(a|0)<4080?a:4080;i[C+16>>2]=(a|0)>0?a:0;z=z+1|0;U=(ea&z)<<2;f=i[U+pa>>2];_b:{if(f&32768){s=(f>>>5&31)+297152|0;Q=(f>>>10&31)+297152|0;G=255;e=(f>>>1&15)+297184|0;break _b}s=(f>>>4&15)+297184|0;Q=(f>>>8&15)+297184|0;G=j[(f>>>12&7)+297208|0];e=(f>>>1&7)+297200|0}a=f>>>16|0;$b:{if((f|0)<=-1){R=(f>>>21&31)+297152|0;p=(f>>>26&31)+297152|0;H=255;a=(a&31)+297152|0;break $b}R=(f>>>20&15)+297184|0;p=(f>>>24&15)+297184|0;H=j[(f>>>28|0)+297208|0];a=(a&15)+297184|0}u=j[s|0];B=j[R|0];f=i[U+oa>>2];ac:{if(f&32768){I=(f>>>1&15)+297184|0;D=(f>>>5&31)+297152|0;R=255;s=(f>>>10&31)+297152|0;break ac}I=(f>>>1&7)+297200|0;D=(f>>>4&15)+297184|0;R=j[(f>>>12&7)+297208|0];s=(f>>>8&15)+297184|0}G=u+G|0;Q=j[Q|0];H=B+H|0;da=j[p|0];p=f>>>16|0;D=j[D|0]+R|0;s=j[s|0];bc:{if((f|0)<=-1){u=(f>>>21&31)+297152|0;R=(f>>>26&31)+297152|0;B=255;f=(p&31)+297152|0;break bc}u=(f>>>20&15)+297184|0;R=(f>>>24&15)+297184|0;B=j[(f>>>28|0)+297208|0];f=(p&15)+297184|0}G=G+Q|0;Q=j[e|0];H=H+da|0;a=j[a|0];da=s+D|0;I=j[I|0];B=j[R|0]+(j[u|0]+B|0)|0;f=j[f|0];e=i[U+ia>>2];cc:{if(e&32768){D=(e>>>1&15)+297184|0;u=(e>>>5&31)+297152|0;R=(e>>>10&31)+297152|0;p=255;break cc}D=(e>>>1&7)+297200|0;u=(e>>>4&15)+297184|0;R=(e>>>8&15)+297184|0;p=j[(e>>>12&7)+297208|0]}Q=G+Q|0;s=a+H|0;a=I+da|0;f=f+B|0;B=e>>>16|0;p=j[D|0]+(j[R|0]+(p+j[u|0]|0)|0)|0;dc:{if((e|0)<=-1){R=(B&31)+297152|0;da=255;I=(e>>>21&31)+297152|0;H=(e>>>26&31)+297152|0;break dc}R=(B&15)+297184|0;da=j[(e>>>28|0)+297208|0];I=(e>>>20&15)+297184|0;H=(e>>>24&15)+297184|0}ua=P;e=ca+o(_,11)|0;u=j[e|0];B=j[K+4|0];P=o(m,6);la=P+o(w,6)|0;D=la+(n+q<<1)|0;G=i[(C+16|u&12)>>2]+(i[(C+32|B&12)>>2]-D|0)<<4;Z=o(v,6);T=Z+o(E,6)|0;U=T+(t+J<<1)|0;_=(U|0)<(D|0);G=_?0-G|0:G;D=U-D|0;D=_?0-D|0:D;M=(G|0)>(o(D,13)|0)?12:(G|0)>D<<3?8:((G|0)>(o(D,3)|0))<<2;aa=n+w|0;U=m+q|0;D=aa+U<<2;G=i[(C+16|(u&3)<<2)>>2]+(i[(C+32|(B&3)<<2)>>2]-D|0)<<4;S=E+J|0;_=t+v|0;qa=S+_<<2;ba=(qa|0)<(D|0);G=ba?0-G|0:G;D=qa-D|0;D=ba?0-D|0:D;ta=M|((G|0)>(o(D,13)|0)?3:(G|0)>D<<3?2:(G|0)>(o(D,3)|0));D=j[e+1|0];G=j[K+5|0];P=(P+o(q,6)|0)+(aa<<1)|0;aa=i[(C+16|(D&3)<<2)>>2]+(i[(C+32|(G&3)<<2)>>2]-P|0)<<4;ba=0-aa|0;M=aa;aa=(Z+o(t,6)|0)+(S<<1)|0;S=(aa|0)<(P|0);Z=S?ba:M;P=aa-P|0;P=S?0-P|0:P;va=ta|((Z|0)>(o(P,13)|0)?768:(Z|0)>P<<3?512:((Z|0)>(o(P,3)|0))<<8);aa=o(w,3);P=o(m,9);Z=P+o(q,3)|0;n=aa+(Z+n|0)|0;S=i[(C+16|D&12)>>2]+(i[(C+32|G&12)>>2]-n|0)<<4;ta=0-S|0;M=S;ba=o(E,3);S=o(v,9);qa=S+o(t,3)|0;ra=ba+(qa+J|0)|0;sa=(ra|0)<(n|0);J=sa?ta:M;n=ra-n|0;n=sa?0-n|0:n;M=va|((J|0)>(o(n,13)|0)?3072:(J|0)>n<<3?2048:((J|0)>(o(n,3)|0))<<10);n=m+w<<3;J=i[(C+16|u>>>2&12)>>2]+(i[(C+32|B>>>2&12)>>2]-n|0)<<4;ra=v+E<<3;sa=(ra|0)<(n|0);J=sa?0-J|0:J;n=ra-n|0;n=sa?0-n|0:n;M=M|((J|0)>(o(n,13)|0)?48:(J|0)>n<<3?32:((J|0)>(o(n,3)|0))<<4);n=(la+(Q<<1)|0)+(a<<1)|0;u=i[(C+16|u>>>4&12)>>2]+(i[(C+32|B>>>4&12)>>2]-n|0)<<4;B=(T+(s<<1)|0)+(f<<1)|0;J=(B|0)<(n|0);u=J?0-u|0:u;n=B-n|0;n=J?0-n|0:n;ta=M|((u|0)>(o(n,13)|0)?192:(u|0)>n<<3?128:((u|0)>(o(n,3)|0))<<6);n=o(m,12);B=n+(w<<2)|0;u=i[(C+16|D>>>2&12)>>2]+(i[(C+32|G>>>2&12)>>2]-B|0)<<4;M=0-u|0;J=u;u=o(v,12);la=u+(E<<2)|0;T=(la|0)<(B|0);J=T?M:J;B=la-B|0;B=T?0-B|0:B;M=ta|((J|0)>(o(B,13)|0)?12288:(J|0)>B<<3?8192:((J|0)>(o(B,3)|0))<<12);P=P+o(a,3)|0;B=(P+aa|0)+Q|0;D=i[(C+16|D>>>4&12)>>2]+(i[(C+32|G>>>4&12)>>2]-B|0)<<4;la=S+o(f,3)|0;J=(la+ba|0)+s|0;G=(J|0)<(B|0);D=G?0-D|0:D;B=J-B|0;B=G?0-B|0:B;M=M|((D|0)>(o(B,13)|0)?49152:(D|0)>B<<3?32768:((D|0)>(o(B,3)|0))<<14);B=j[e+2|0];D=j[K+6|0];J=U<<3;G=i[(C+16|(B&3)<<2)>>2]+(i[(C+32|(D&3)<<2)>>2]-J|0)<<4;T=_<<3;aa=(T|0)<(J|0);G=aa?0-G|0:G;J=T-J|0;J=aa?0-J|0:J;S=M|((G|0)>(o(J,13)|0)?196608:(G|0)>J<<3?131072:((G|0)>(o(J,3)|0))<<16);q=n+(q<<2)|0;J=i[(C+16|B&12)>>2]+(i[(C+32|D&12)>>2]-q|0)<<4;T=0-J|0;M=J;J=u+(t<<2)|0;G=(J|0)<(q|0);t=G?T:M;q=J-q|0;q=G?0-q|0:q;M=S|((t|0)>(o(q,13)|0)?786432:(t|0)>q<<3?524288:((t|0)>(o(q,3)|0))<<18);e=j[e+3|0];q=j[K+7|0];t=o(U,6)+(N+Y<<1)|0;J=i[(C+16|(e&3)<<2)>>2]+(i[(C+32|(q&3)<<2)>>2]-t|0)<<4;G=o(_,6)+(l+O<<1)|0;K=(G|0)<(t|0);J=K?0-J|0:J;t=G-t|0;t=K?0-t|0:t;S=M|((J|0)>(o(t,13)|0)?50331648:(J|0)>t<<3?33554432:((J|0)>(o(t,3)|0))<<24);J=o(N,3);t=Z+(J+Y|0)|0;G=i[(C+16|e&12)>>2]+(i[(C+32|q&12)>>2]-t|0)<<4;T=0-G|0;M=G;G=o(O,3);Y=qa+(G+l|0)|0;K=(Y|0)<(t|0);l=K?T:M;t=Y-t|0;t=K?0-t|0:t;M=S|((l|0)>(o(t,13)|0)?201326592:(l|0)>t<<3?134217728:((l|0)>(o(t,3)|0))<<26);l=m<<4;t=i[(C+16|B>>>2&12)>>2]+(i[(C+32|D>>>2&12)>>2]-l|0)<<4;Y=v<<4;K=(Y|0)<(l|0);t=K?0-t|0:t;l=Y-l|0;l=K?0-l|0:l;Y=M|((t|0)>(o(l,13)|0)?3145728:(t|0)>l<<3?2097152:((t|0)>(o(l,3)|0))<<20);l=n+(a<<2)|0;t=i[(C+16|B>>>4&12)>>2]+(i[(C+32|D>>>4&12)>>2]-l|0)<<4;B=u+(f<<2)|0;D=(B|0)<(l|0);t=D?0-t|0:t;l=B-l|0;l=D?0-l|0:l;B=Y|((t|0)>(o(l,13)|0)?12582912:(t|0)>l<<3?8388608:((t|0)>(o(l,3)|0))<<22);l=n+(N<<2)|0;n=i[(C+16|e>>>2&12)>>2]+(i[(C+32|q>>>2&12)>>2]-l|0)<<4;t=u+(O<<2)|0;u=(t|0)<(l|0);n=u?0-n|0:n;l=t-l|0;l=u?0-l|0:l;B=B|((n|0)>(o(l,13)|0)?805306368:(n|0)>l<<3?536870912:((n|0)>(o(l,3)|0))<<28);l=(J+P|0)+p|0;e=i[(C+16|e>>>4&12)>>2]+(i[(C+32|q>>>4&12)>>2]-l|0)<<4;u=0-e|0;n=e;e=j[R|0]+(j[H|0]+(j[I|0]+da|0)|0)|0;q=e+(G+la|0)|0;t=(q|0)<(l|0);n=t?u:n;l=q-l|0;l=t?0-l|0:l;i[ua>>2]=B|((n|0)>(o(l,13)|0)?-1073741824:(n|0)>l<<3?-2147483648:((n|0)>(o(l,3)|0))<<30);na=na+1|0;l=O;Y=N;t=v;J=E;q=m;n=w;if((c|0)!=(z|0)){continue}break}i[C+96>>2]=s;i[C+160>>2]=Q;i[C+164>>2]=a;i[C+100>>2]=f;i[C+168>>2]=p;i[C+104>>2]=e;i[C+144>>2]=Q;i[C+128>>2]=n;i[C+148>>2]=a;i[C+132>>2]=q;i[C+80>>2]=s;i[C+64>>2]=J;i[C+84>>2]=f;i[C+68>>2]=t;i[C+152>>2]=p;i[C+136>>2]=Y;i[C+88>>2]=e;i[C+72>>2]=l}ka=ka+1|0;if((ka|0)!=(d|0)){continue}break}}B=1;if(!ja){break m}wa(ja)}a=i[C>>2];if(!a){break k}i[C+4>>2]=a;wa(a)}ha=C+192|0;return B}A(90786,90648,445,90809);x()}A(19820,90648,435,91026);x()}A(218689,19512,3176,219760);x()}A(91069,19512,377,91053);x()}A(213968,19512,827,213978);x()}A(213968,19512,842,218096);x()}A(282127,19512,3815,282112);x()}A(296960,19512,3319,296999);x()}A(296960,19512,3304,296976);x()}function lc(a,b){var c=0,d=0,e=0,f=0,l=0,n=0,r=0,s=p(0),t=p(0),u=0,v=0,w=p(0),y=p(0),z=0,B=0,C=p(0),D=0,E=0,F=0,G=p(0),H=0,I=0,J=0,K=p(0),L=p(0),M=p(0),N=p(0),O=p(0),P=0,Q=p(0),R=p(0),S=p(0),T=p(0),U=0,V=p(0);d=ha-48|0;ha=d;b=ya(b,0,96);f=i[a+104>>2];r=j[f+21824|0];a:{b:{c:{d:{switch(f|0){case 0:case 5:case 10:case 12:case 14:case 15:case 18:i[b>>2]=6;c=r<<9;s=p(p(j[(c|j[a+21|0]<<1)+308e3|0])/p(255));m[d+32>>2]=s;e:{if(f+ -15>>>0<=2){c=c+308e3|0;e=j[c+(j[a+22|0]<<1)|0];m[d+36>>2]=s;m[d+40>>2]=s;s=p(p(e>>>0)/p(255));m[d+16>>2]=s;m[d+20>>2]=s;m[d+24>>2]=s;m[d+44>>2]=p(j[c+(j[a+23|0]<<1)|0])/p(255);m[d+28>>2]=p(j[c+(j[a+24|0]<<1)|0])/p(255);e=f+ -8|0;l=4;break e}l=j[f+21920|0];c=c+308e3|0;m[d+36>>2]=p(j[c+(j[a+23|0]<<1)|0])/p(255);m[d+40>>2]=p(j[c+(j[a+25|0]<<1)|0])/p(255);m[d+16>>2]=p(j[c+(j[a+22|0]<<1)|0])/p(255);m[d+20>>2]=p(j[c+(j[a+24|0]<<1)|0])/p(255);m[d+24>>2]=p(j[c+(j[a+26|0]<<1)|0])/p(255);e=f+ -8|0;if(e>>>0<=6){c=(r<<9)+308e3|0;m[d+44>>2]=p(j[c+(j[a+27|0]<<1)|0])/p(255);m[d+28>>2]=p(j[c+(j[a+28|0]<<1)|0])/p(255);break e}i[d+28>>2]=1065353216;i[d+44>>2]=1065353216}Ma(l&255,7,d+32|0,d+16|0,d+4|0,d,d+8|0);i[b+40>>2]=i[d+4>>2];i[b+52>>2]=i[d>>2];if(e>>>0>=10){g[b+55|0]=127;g[b+43|0]=127}i[b+64>>2]=i[d+8>>2];i[b+68>>2]=i[d+12>>2];c=b;f:{g:{switch(f+ -5|0){case 9:g[b+8|0]=j[j[a+39|0]+25968|0];g[b+9|0]=j[j[a+40|0]+25968|0];g[b+10|0]=j[j[a+41|0]+25968|0];g[b+11|0]=j[j[a+42|0]+25968|0];g[b+12|0]=j[j[a+43|0]+25968|0];g[b+13|0]=j[j[a+44|0]+25968|0];g[b+14|0]=j[j[a+45|0]+25968|0];g[b+15|0]=j[j[a+46|0]+25968|0];g[b+16|0]=j[j[a+47|0]+25968|0];g[b+17|0]=j[j[a+48|0]+25968|0];g[b+18|0]=j[j[a+49|0]+25968|0];g[b+19|0]=j[j[a+50|0]+25968|0];g[b+20|0]=j[j[a+51|0]+25968|0];g[b+21|0]=j[j[a+52|0]+25968|0];g[b+22|0]=j[j[a+53|0]+25968|0];a=j[a+54|0]+25968|0;break f;case 13:g[b+8|0]=j[j[a+39|0]+25936|0];g[b+9|0]=j[j[a+40|0]+25936|0];g[b+10|0]=j[j[a+41|0]+25936|0];g[b+11|0]=j[j[a+42|0]+25936|0];g[b+12|0]=j[j[a+43|0]+25936|0];g[b+13|0]=j[j[a+44|0]+25936|0];g[b+14|0]=j[j[a+45|0]+25936|0];g[b+15|0]=j[j[a+46|0]+25936|0];g[b+16|0]=j[j[a+47|0]+25936|0];g[b+17|0]=j[j[a+48|0]+25936|0];g[b+18|0]=j[j[a+49|0]+25936|0];g[b+19|0]=j[j[a+50|0]+25936|0];g[b+20|0]=j[j[a+51|0]+25936|0];g[b+21|0]=j[j[a+52|0]+25936|0];g[b+22|0]=j[j[a+53|0]+25936|0];a=j[a+54|0]+25936|0;break f;default:g[b+8|0]=j[a+39|0];g[b+9|0]=j[a+40|0];g[b+10|0]=j[a+41|0];g[b+11|0]=j[a+42|0];g[b+12|0]=j[a+43|0];g[b+13|0]=j[a+44|0];g[b+14|0]=j[a+45|0];g[b+15|0]=j[a+46|0];g[b+16|0]=j[a+47|0];g[b+17|0]=j[a+48|0];g[b+18|0]=j[a+49|0];g[b+19|0]=j[a+50|0];g[b+20|0]=j[a+51|0];g[b+21|0]=j[a+52|0];g[b+22|0]=j[a+53|0];a=a+54|0;break f;case 0:case 7:break g}}g[b+8|0]=j[j[a+39|0]+25972|0];g[b+9|0]=j[j[a+40|0]+25972|0];g[b+10|0]=j[j[a+41|0]+25972|0];g[b+11|0]=j[j[a+42|0]+25972|0];g[b+12|0]=j[j[a+43|0]+25972|0];g[b+13|0]=j[j[a+44|0]+25972|0];g[b+14|0]=j[j[a+45|0]+25972|0];g[b+15|0]=j[j[a+46|0]+25972|0];g[b+16|0]=j[j[a+47|0]+25972|0];g[b+17|0]=j[j[a+48|0]+25972|0];g[b+18|0]=j[j[a+49|0]+25972|0];g[b+19|0]=j[j[a+50|0]+25972|0];g[b+20|0]=j[j[a+51|0]+25972|0];g[b+21|0]=j[j[a+52|0]+25972|0];g[b+22|0]=j[j[a+53|0]+25972|0];a=j[a+54|0]+25972|0}g[c+23|0]=j[a|0];break c;case 1:i[b>>2]=3;m[d+32>>2]=p(j[a+21|0])/p(255);m[d+36>>2]=p(j[a+23|0])/p(255);c=j[a+25|0];i[d+44>>2]=1065353216;m[d+40>>2]=p(c>>>0)/p(255);m[d+16>>2]=p(j[a+22|0])/p(255);m[d+20>>2]=p(j[a+24|0])/p(255);c=j[a+26|0];i[d+28>>2]=1065353216;m[d+24>>2]=p(c>>>0)/p(255);i[d+4>>2]=0;i[d>>2]=0;Ma(3,7,d+32|0,d+16|0,d+4|0,d,d+8|0);g[b+42|0]=j[d+6|0];h[b+40>>1]=k[d+4>>1];h[b+44>>1]=k[d+4>>1];g[b+46|0]=j[d+6|0];c=j[d|0];g[b+52|0]=c;g[b+56|0]=c;c=j[d+1|0];g[b+57|0]=c;g[b+53|0]=c;c=j[d+2|0];g[b+58|0]=c;g[b+54|0]=c;c=i[d+8>>2];i[b+64>>2]=c;e=i[d+12>>2];i[b+76>>2]=e;i[b+72>>2]=c;i[b+68>>2]=e;g[b+8|0]=j[a+39|0];g[b+9|0]=j[a+40|0];g[b+10|0]=j[a+41|0];g[b+11|0]=j[a+42|0];g[b+12|0]=j[a+43|0];g[b+13|0]=j[a+44|0];g[b+14|0]=j[a+45|0];g[b+15|0]=j[a+46|0];g[b+16|0]=j[a+47|0];g[b+17|0]=j[a+48|0];g[b+18|0]=j[a+49|0];g[b+19|0]=j[a+50|0];g[b+20|0]=j[a+51|0];g[b+21|0]=j[a+52|0];g[b+22|0]=j[a+53|0];g[b+23|0]=j[a+54|0];break c;case 2:i[b>>2]=1;c=i[a+108>>2];i[b+4>>2]=j[o(c,6)+2e4|0];i[d+44>>2]=1065353216;i[d+28>>2]=1065353216;U=43795755>>>c&1;J=a+21|0;r=0;while(1){f=o(r,6);c=f+J|0;e=j[c+4|0];l=j[c+5|0];f=j[(f|1)+J|0];u=j[c|0];n=j[c+2|0];c=j[c+3|0];i[d+8>>2]=0;i[d+4>>2]=0;K=p(p((c|c<<4)>>>0)/p(255));w=p(K*p(127));s=p(p(w*p(.5))+p(.5));h:{if(p(q(s))63?126:c<<1;s=p(p(p((((F&64)>>>6|F<<1)&253)>>>0)/p(255))-K);s=p(s*s);L=p(p((n|n<<4)>>>0)/p(255));y=p(L*p(127));t=p(p(y*p(.5))+p(.5));i:{if(p(q(t))63?126:c<<1;t=p(p(p((((z&64)>>>6|z<<1)&253)>>>0)/p(255))-L);s=p(p(t*t)+s);M=p(p((u|u<<4)>>>0)/p(255));Q=p(M*p(127));t=p(p(Q*p(.5))+p(.5));j:{if(p(q(t))63?126:c<<1;t=p(p(p((((B&64)>>>6|B<<1)&253)>>>0)/p(255))-M);G=p(t*t);N=p(p((f|f<<4)>>>0)/p(255));R=p(N*p(127));C=p(p(R*p(.5))+p(.5));k:{if(p(q(C))63?126:c<<1;t=p(p(p((((D&64)>>>6|D<<1)&253)>>>0)/p(255))-N);t=p(p(p(G+p(t*t))+p(0))+s);C=p(p((l|l<<4)>>>0)/p(255));S=p(C*p(127));s=p(p(S*p(.5))+p(.5));l:{if(p(q(s))63?126:c<<1;s=p(p(p((((E&64)>>>6|E<<1)&253)>>>0)/p(255))-C);V=p(s*s);O=p(p((e|e<<4)>>>0)/p(255));T=p(O*p(127));s=p(p(T*p(.5))+p(.5));m:{if(p(q(s))63?126:c<<1;t=p(p(p((((c&64)>>>6|c<<1)&253)>>>0)/p(255))-O);t=p(G+p(p(t*t)+V));if(!(t>>1|0;e=(c&255)>>>1|0;f=(F&255)>>>1|0;v=(z&255)>>>1|0;H=(D&255)>>>1|0;I=(B&255)>>>1|0;s=t}F=0;t=p(p(p(w+p(-1))*p(.5))+p(.5));n:{if(p(q(t))63?127:c<<1|1;t=p(p(p((((z&64)>>>6|z<<1)&255)>>>0)/p(255))-K);t=p(t*t);w=p(p(p(y+p(-1))*p(.5))+p(.5));o:{if(p(q(w))63?127:c<<1|1;w=p(p(p((((B&64)>>>6|B<<1)&255)>>>0)/p(255))-L);w=p(w*w);y=p(p(p(R+p(-1))*p(.5))+p(.5));p:{if(p(q(y))63?127:c<<1|1;y=p(p(p((((D&64)>>>6|D<<1)&255)>>>0)/p(255))-N);y=p(y*y);t=p(w+t);w=p(p(p(Q+p(-1))*p(.5))+p(.5));q:{if(p(q(w))63?127:c<<1|1;w=p(p(p((((E&64)>>>6|E<<1)&255)>>>0)/p(255))-M);t=p(p(p(p(w*w)+y)+p(0))+t);w=p(p(p(S+p(-1))*p(.5))+p(.5));r:{if(p(q(w))63?127:c<<1|1;w=p(p(p((((P&64)>>>6|P<<1)&255)>>>0)/p(255))-C);w=p(w*w);G=t;y=p(p(p(T+p(-1))*p(.5))+p(.5));s:{if(p(q(y))63?127:c<<1|1;t=p(p(p((((c&64)>>>6|c<<1)&255)>>>0)/p(255))-O);if(p(G+p(p(t*t)+w))>>1|0;f=(z&254)>>>1|0;v=(B&254)>>>1|0;H=(D&254)>>>1|0;I=(E&254)>>>1|0;e=(c&254)>>>1|0}g[d+5|0]=f;g[d+9|0]=v;g[d+10|0]=e;g[d+6|0]=n;g[d+11|0]=u;g[d+7|0]=l;l=U?r:1-r|0;c=b+(l<<2)|0;g[c+42|0]=e;g[d+8|0]=I;g[d+4|0]=H;h[c+40>>1]=k[d+8>>1];g[c+54|0]=j[d+6|0];h[c+52>>1]=k[d+4>>1];i[(b+(l<<3)|0)- -64>>2]=F;r=r+1|0;if((r|0)!=2){continue}break}m[d+16>>2]=N;m[d+32>>2]=M;m[d+36>>2]=L;m[d+20>>2]=K;m[d+40>>2]=O;m[d+24>>2]=C;g[b+8|0]=j[a+39|0];g[b+9|0]=j[a+40|0];g[b+10|0]=j[a+41|0];g[b+11|0]=j[a+42|0];g[b+12|0]=j[a+43|0];g[b+13|0]=j[a+44|0];g[b+14|0]=j[a+45|0];g[b+15|0]=j[a+46|0];g[b+16|0]=j[a+47|0];g[b+17|0]=j[a+48|0];g[b+18|0]=j[a+49|0];g[b+19|0]=j[a+50|0];g[b+20|0]=j[a+51|0];g[b+21|0]=j[a+52|0];g[b+22|0]=j[a+53|0];g[b+23|0]=j[a+54|0];break c;case 9:case 16:i[b>>2]=7;c=i[a+108>>2];i[b+4>>2]=j[o(c,6)+2e4|0];H=(43795755>>>c^-1)&1;I=f+ -15>>>0>2;f=a+21|0;c=r<<9;n=c+308e3|0;u=1;while(1){z=d;t:{if(!I){v=l<<2;s=p(p(j[n+(j[v+f|0]<<1)|0])/p(255));m[d+32>>2]=s;J=j[n+(j[f+(v|1)|0]<<1)|0];m[d+36>>2]=s;m[d+40>>2]=s;s=p(p(J>>>0)/p(255));m[d+16>>2]=s;m[d+20>>2]=s;m[d+24>>2]=s;m[d+44>>2]=p(j[n+(j[f+(v|2)|0]<<1)|0])/p(255);e=v|3;break t}v=l<<3;m[d+32>>2]=p(j[n+(j[v+f|0]<<1)|0])/p(255);m[d+36>>2]=p(j[n+(j[f+(v|2)|0]<<1)|0])/p(255);m[d+40>>2]=p(j[n+(j[f+(v|4)|0]<<1)|0])/p(255);m[d+44>>2]=p(j[n+(j[f+(v|6)|0]<<1)|0])/p(255);m[d+16>>2]=p(j[n+(j[f+(v|1)|0]<<1)|0])/p(255);m[d+20>>2]=p(j[n+(j[f+(v|3)|0]<<1)|0])/p(255);m[d+24>>2]=p(j[n+(j[f+(v|5)|0]<<1)|0])/p(255);e=v|7}m[z+28>>2]=p(j[(j[(e+a|0)+21|0]<<1|c)+308e3|0])/p(255);i[d+8>>2]=0;i[d+12>>2]=0;i[d+4>>2]=0;i[d>>2]=0;Ma(4,5,d+32|0,d+16|0,d+4|0,d,d+8|0);e=l^H;r=b+(e<<2)|0;i[r+40>>2]=i[d+4>>2];i[r+52>>2]=i[d>>2];e=b+(e<<3)|0;i[e- -64>>2]=i[d+8>>2];i[e+68>>2]=i[d+12>>2];e=u&1;u=0;l=1;if(e){continue}break}g[b+8|0]=j[a+39|0];g[b+9|0]=j[a+40|0];g[b+10|0]=j[a+41|0];g[b+11|0]=j[a+42|0];g[b+12|0]=j[a+43|0];g[b+13|0]=j[a+44|0];g[b+14|0]=j[a+45|0];g[b+15|0]=j[a+46|0];g[b+16|0]=j[a+47|0];g[b+17|0]=j[a+48|0];g[b+18|0]=j[a+49|0];g[b+19|0]=j[a+50|0];g[b+20|0]=j[a+51|0];g[b+21|0]=j[a+52|0];g[b+22|0]=j[a+53|0];g[b+23|0]=j[a+54|0];break c;case 8:e=j[a+115|0]<<3;r=j[a+114|0]<<3;l=j[a+113|0]<<3;f=j[a+112|0]<<3;c=k[e+318756>>1]+(k[r+318756>>1]+(k[l+318756>>1]+k[f+318756>>1]|0)|0)|0;e=k[e+318752>>1]+(k[r+318752>>1]+(k[l+318752>>1]+k[f+318752>>1]|0)|0)|0;if(!(!e|!c)){i[b>>2]=5;g[b+40|0]=j[(j[a+112|0]<<2)+320802|0];g[b+52|0]=j[(j[a+112|0]<<2)+320803|0];g[b+41|0]=j[(j[a+113|0]<<2)+320802|0];g[b+53|0]=j[(j[a+113|0]<<2)+320803|0];g[b+42|0]=j[(j[a+114|0]<<2)+320802|0];c=j[(j[a+114|0]<<2)+320803|0];i[b+8>>2]=16843009;i[b+12>>2]=16843009;g[b+54|0]=c;i[b+16>>2]=16843009;i[b+20>>2]=16843009;g[b+43|0]=j[a+115|0];g[b+55|0]=j[a+115|0];break c}i[b>>2]=6;e=c>>>0>>0;c=e<<2;g[b+40|0]=j[(c|j[a+112|0]<<3)+318754|0];g[b+52|0]=j[(c|j[a+112|0]<<3)+318755|0];g[b+41|0]=j[(c|j[a+113|0]<<3)+318754|0];g[b+53|0]=j[(c|j[a+113|0]<<3)+318755|0];g[b+42|0]=j[(c|j[a+114|0]<<3)+318754|0];g[b+54|0]=j[(c|j[a+114|0]<<3)+318755|0];g[b+43|0]=j[(c|j[a+115|0]<<3)+318754|0];a=j[(c|j[a+115|0]<<3)+318755|0];i[b+68>>2]=e;i[b+64>>2]=e;g[b+55|0]=a;i[b+8>>2]=84215045;i[b+12>>2]=84215045;i[b+16>>2]=84215045;i[b+20>>2]=84215045;break c;case 7:i[b>>2]=2;c=o(i[a+108>>2],6);i[b+4>>2]=j[c+20192|0];c=j[c+20196|0];l=c&1;u:{v:{w:{x:{u=c>>>1|0;switch(u|0){case 0:break w;case 1:break x;default:break v}}c=(r<<9)+308e3|0;f=a+21|0;u=l?6:0;e=f+u|0;g[b+40|0]=(o(j[c+(j[e|0]<<1)|0],31)+127>>>0)/255;g[b+52|0]=(o(j[c+(j[f+(u|1)|0]<<1)|0],31)+127>>>0)/255;g[b+41|0]=(o(j[c+(j[e+2|0]<<1)|0],31)+127>>>0)/255;g[b+53|0]=(o(j[c+(j[e+3|0]<<1)|0],31)+127>>>0)/255;g[b+42|0]=(o(j[c+(j[e+4|0]<<1)|0],31)+127>>>0)/255;g[b+54|0]=(o(j[c+(j[e+5|0]<<1)|0],31)+127>>>0)/255;l=l?0:6;e=l+f|0;g[b+44|0]=(o(j[c+(j[e|0]<<1)|0],31)+127>>>0)/255;f=f+(l|1)|0;g[b+56|0]=(o(j[c+(j[f|0]<<1)|0],31)+127>>>0)/255;g[b+45|0]=(o(j[c+(j[e+2|0]<<1)|0],31)+127>>>0)/255;g[b+57|0]=(o(j[c+(j[e+3|0]<<1)|0],31)+127>>>0)/255;g[b+46|0]=(o(j[c+(j[e+4|0]<<1)|0],31)+127>>>0)/255;l=e+5|0;g[b+58|0]=(o(j[c+(j[l|0]<<1)|0],31)+127>>>0)/255;g[b+48|0]=(o(j[c+(j[e|0]<<1)|0],31)+127>>>0)/255;g[b+60|0]=(o(j[c+(j[f|0]<<1)|0],31)+127>>>0)/255;g[b+49|0]=(o(j[c+(j[e+2|0]<<1)|0],31)+127>>>0)/255;g[b+61|0]=(o(j[c+(j[e+3|0]<<1)|0],31)+127>>>0)/255;g[b+50|0]=(o(j[c+(j[e+4|0]<<1)|0],31)+127>>>0)/255;break u}c=(r<<9)+308e3|0;f=a+21|0;u=l?6:0;e=f+u|0;g[b+40|0]=(o(j[c+(j[e|0]<<1)|0],31)+127>>>0)/255;u=f+(u|1)|0;g[b+52|0]=(o(j[c+(j[u|0]<<1)|0],31)+127>>>0)/255;g[b+41|0]=(o(j[c+(j[e+2|0]<<1)|0],31)+127>>>0)/255;g[b+53|0]=(o(j[c+(j[e+3|0]<<1)|0],31)+127>>>0)/255;g[b+42|0]=(o(j[c+(j[e+4|0]<<1)|0],31)+127>>>0)/255;g[b+54|0]=(o(j[c+(j[e+5|0]<<1)|0],31)+127>>>0)/255;g[b+44|0]=(o(j[c+(j[e|0]<<1)|0],31)+127>>>0)/255;g[b+56|0]=(o(j[c+(j[u|0]<<1)|0],31)+127>>>0)/255;g[b+45|0]=(o(j[c+(j[e+2|0]<<1)|0],31)+127>>>0)/255;g[b+57|0]=(o(j[c+(j[e+3|0]<<1)|0],31)+127>>>0)/255;g[b+46|0]=(o(j[c+(j[e+4|0]<<1)|0],31)+127>>>0)/255;g[b+58|0]=(o(j[c+(j[e+5|0]<<1)|0],31)+127>>>0)/255;l=l?0:6;e=l+f|0;g[b+48|0]=(o(j[c+(j[e|0]<<1)|0],31)+127>>>0)/255;g[b+60|0]=(o(j[c+(j[f+(l|1)|0]<<1)|0],31)+127>>>0)/255;g[b+49|0]=(o(j[c+(j[e+2|0]<<1)|0],31)+127>>>0)/255;g[b+61|0]=(o(j[c+(j[e+3|0]<<1)|0],31)+127>>>0)/255;g[b+50|0]=(o(j[c+(j[e+4|0]<<1)|0],31)+127>>>0)/255;l=e+5|0;break u}c=(r<<9)+308e3|0;e=a+21|0;n=l?6:0;f=e+n|0;g[b+40|0]=(o(j[c+(j[f|0]<<1)|0],31)+127>>>0)/255;g[b+52|0]=(o(j[c+(j[e+(n|1)|0]<<1)|0],31)+127>>>0)/255;g[b+41|0]=(o(j[c+(j[f+2|0]<<1)|0],31)+127>>>0)/255;g[b+53|0]=(o(j[c+(j[f+3|0]<<1)|0],31)+127>>>0)/255;g[b+42|0]=(o(j[c+(j[f+4|0]<<1)|0],31)+127>>>0)/255;g[b+54|0]=(o(j[c+(j[f+5|0]<<1)|0],31)+127>>>0)/255;n=o(l^1,6);f=n+e|0;g[b+44|0]=(o(j[c+(j[f|0]<<1)|0],31)+127>>>0)/255;g[b+56|0]=(o(j[c+(j[e+(n|1)|0]<<1)|0],31)+127>>>0)/255;g[b+45|0]=(o(j[c+(j[f+2|0]<<1)|0],31)+127>>>0)/255;g[b+57|0]=(o(j[c+(j[f+3|0]<<1)|0],31)+127>>>0)/255;g[b+46|0]=(o(j[c+(j[f+4|0]<<1)|0],31)+127>>>0)/255;g[b+58|0]=(o(j[c+(j[f+5|0]<<1)|0],31)+127>>>0)/255;f=((u|0)!=2)<<1;f=o(l?1-f|0:f,6);l=f+e|0;g[b+48|0]=(o(j[c+(j[l|0]<<1)|0],31)+127>>>0)/255;g[b+60|0]=(o(j[c+(j[e+(f|1)|0]<<1)|0],31)+127>>>0)/255;g[b+49|0]=(o(j[c+(j[l+2|0]<<1)|0],31)+127>>>0)/255;g[b+61|0]=(o(j[c+(j[l+3|0]<<1)|0],31)+127>>>0)/255;g[b+50|0]=(o(j[c+(j[l+4|0]<<1)|0],31)+127>>>0)/255;l=l+5|0}e=1;g[b+62|0]=(o(j[(r<<9|j[l|0]<<1)+308e3|0],31)+127>>>0)/255;g[b+8|0]=j[a+39|0];g[b+9|0]=j[a+40|0];g[b+10|0]=j[a+41|0];g[b+11|0]=j[a+42|0];g[b+12|0]=j[a+43|0];g[b+13|0]=j[a+44|0];g[b+14|0]=j[a+45|0];g[b+15|0]=j[a+46|0];g[b+16|0]=j[a+47|0];g[b+17|0]=j[a+48|0];g[b+18|0]=j[a+49|0];g[b+19|0]=j[a+50|0];g[b+20|0]=j[a+51|0];g[b+21|0]=j[a+52|0];g[b+22|0]=j[a+53|0];g[b+23|0]=j[a+54|0];break a;case 6:case 11:case 13:case 17:i[b>>2]=5;c=i[a+16>>2];i[b+92>>2]=c+1&3;y:{z:{A:{B:{if(f+ -15>>>0<=2){if((c|0)!=3){break B}c=(r<<9)+308e3|0;e=(o(j[c+(j[a+21|0]<<1)|0],127)+127>>>0)/255|0;g[b+40|0]=e;r=j[c+(j[a+22|0]<<1)|0];g[b+41|0]=e;g[b+42|0]=e;e=(o(r,127)+127>>>0)/255|0;g[b+53|0]=e;g[b+52|0]=e;g[b+54|0]=e;g[b+43|0]=j[c+(j[a+23|0]<<1)|0];g[b+55|0]=j[c+(j[a+24|0]<<1)|0];break z}l=(r<<9)+308e3|0;u=j[l+(j[a+21|0]<<1)|0];n=j[l+(j[a+22|0]<<1)|0];if(c){n=(o(n&255,127)+127>>>0)/255|0;u=(o(u&255,127)+127>>>0)/255|0}c=b+(c?0:3)|0;g[c+52|0]=n;g[c+40|0]=u;e=j[l+(j[a+24|0]<<1)|0];l=j[l+(j[a+23|0]<<1)|0];c=i[a+16>>2]==1;u=c?3:1;if(!c){l=(o(l&255,127)+127>>>0)/255|0;e=(o(e&255,127)+127>>>0)/255|0}c=b+u|0;g[c+52|0]=e;g[c+40|0]=l;c=(r<<9)+308e3|0;e=j[c+(j[a+26|0]<<1)|0];l=j[c+(j[a+25|0]<<1)|0];c=i[a+16>>2]==2;u=c?3:2;if(!c){l=(o(l&255,127)+127>>>0)/255|0;e=(o(e&255,127)+127>>>0)/255|0}c=b+u|0;g[c+52|0]=e;g[c+40|0]=l;c=i[a+16>>2];e=255;l=255;if(f+ -8>>>0<=6){e=(r<<9)+308e3|0;l=j[e+(j[a+28|0]<<1)|0];e=j[e+(j[a+27|0]<<1)|0]}if(c>>>0>2){break A}l=(o(l,127)+127>>>0)/255|0;e=(o(e,127)+127>>>0)/255|0;break A}A(25980,19512,13208,26015);x()}c=b+c|0;g[c+52|0]=l;g[c+40|0]=e;if((f|0)==13){break y}}g[b+8|0]=j[a+39|0];g[b+24|0]=j[a+40|0];g[b+9|0]=j[a+41|0];g[b+25|0]=j[a+42|0];g[b+10|0]=j[a+43|0];g[b+26|0]=j[a+44|0];g[b+11|0]=j[a+45|0];g[b+27|0]=j[a+46|0];g[b+12|0]=j[a+47|0];g[b+28|0]=j[a+48|0];g[b+13|0]=j[a+49|0];g[b+29|0]=j[a+50|0];g[b+14|0]=j[a+51|0];g[b+30|0]=j[a+52|0];g[b+15|0]=j[a+53|0];g[b+31|0]=j[a+54|0];g[b+16|0]=j[a+55|0];g[b+32|0]=j[a+56|0];g[b+17|0]=j[a+57|0];g[b+33|0]=j[a+58|0];g[b+18|0]=j[a+59|0];g[b+34|0]=j[a+60|0];g[b+19|0]=j[a+61|0];g[b+35|0]=j[a+62|0];g[b+20|0]=j[a+63|0];g[b+36|0]=j[a- -64|0];g[b+21|0]=j[a+65|0];g[b+37|0]=j[a+66|0];g[b+22|0]=j[a+67|0];g[b+38|0]=j[a+68|0];g[b+23|0]=j[a+69|0];g[b+39|0]=j[a+70|0];break c}g[b+8|0]=j[a+39|0]?3:0;g[b+24|0]=j[a+40|0]?3:0;g[b+9|0]=j[a+41|0]?3:0;g[b+25|0]=j[a+42|0]?3:0;g[b+10|0]=j[a+43|0]?3:0;g[b+26|0]=j[a+44|0]?3:0;g[b+11|0]=j[a+45|0]?3:0;g[b+27|0]=j[a+46|0]?3:0;g[b+12|0]=j[a+47|0]?3:0;g[b+28|0]=j[a+48|0]?3:0;g[b+13|0]=j[a+49|0]?3:0;g[b+29|0]=j[a+50|0]?3:0;g[b+14|0]=j[a+51|0]?3:0;g[b+30|0]=j[a+52|0]?3:0;g[b+15|0]=j[a+53|0]?3:0;g[b+31|0]=j[a+54|0]?3:0;g[b+16|0]=j[a+55|0]?3:0;g[b+32|0]=j[a+56|0]?3:0;g[b+17|0]=j[a+57|0]?3:0;g[b+33|0]=j[a+58|0]?3:0;g[b+18|0]=j[a+59|0]?3:0;g[b+34|0]=j[a+60|0]?3:0;g[b+19|0]=j[a+61|0]?3:0;g[b+35|0]=j[a+62|0]?3:0;g[b+20|0]=j[a+63|0]?3:0;g[b+36|0]=j[a- -64|0]?3:0;g[b+21|0]=j[a+65|0]?3:0;g[b+37|0]=j[a+66|0]?3:0;g[b+22|0]=j[a+67|0]?3:0;g[b+38|0]=j[a+68|0]?3:0;g[b+23|0]=j[a+69|0]?3:0;g[b+39|0]=j[a+70|0]?3:0;break c;case 3:break b;case 4:break d;default:break a}}i[b>>2]=3;c=i[a+108>>2];i[b+4>>2]=j[o(c,6)+2e4|0];i[d+44>>2]=1065353216;i[d+28>>2]=1065353216;C:{if(43795755>>>c&1){c=(r<<9)+308e3|0;m[d+32>>2]=p(j[c+(j[a+21|0]<<1)|0])/p(255);m[d+16>>2]=p(j[c+(j[a+22|0]<<1)|0])/p(255);m[d+36>>2]=p(j[c+(j[a+23|0]<<1)|0])/p(255);m[d+20>>2]=p(j[c+(j[a+24|0]<<1)|0])/p(255);m[d+40>>2]=p(j[c+(j[a+25|0]<<1)|0])/p(255);m[d+24>>2]=p(j[c+(j[a+26|0]<<1)|0])/p(255);i[d+8>>2]=0;i[d+12>>2]=0;i[d+4>>2]=0;i[d>>2]=0;Ma(3,7,d+32|0,d+16|0,d+4|0,d,d+8|0);g[b+42|0]=j[d+6|0];h[b+40>>1]=k[d+4>>1];h[b+52>>1]=k[d>>1];g[b+54|0]=j[d+2|0];g[b+55|0]=127;g[b+43|0]=127;i[b+64>>2]=i[d+8>>2];i[b+68>>2]=i[d+12>>2];m[d+32>>2]=p(j[c+(j[a+27|0]<<1)|0])/p(255);m[d+16>>2]=p(j[c+(j[a+28|0]<<1)|0])/p(255);m[d+36>>2]=p(j[c+(j[a+29|0]<<1)|0])/p(255);m[d+20>>2]=p(j[c+(j[a+30|0]<<1)|0])/p(255);m[d+40>>2]=p(j[c+(j[a+31|0]<<1)|0])/p(255);m[d+24>>2]=p(j[c+(j[a+32|0]<<1)|0])/p(255);i[d+8>>2]=0;i[d+12>>2]=0;i[d+4>>2]=0;i[d>>2]=0;Ma(3,7,d+32|0,d+16|0,d+4|0,d,d+8|0);g[b+46|0]=j[d+6|0];h[b+44>>1]=k[d+4>>1];h[b+56>>1]=k[d>>1];g[b+58|0]=j[d+2|0];g[b+59|0]=127;g[b+47|0]=127;i[b+72>>2]=i[d+8>>2];i[b+76>>2]=i[d+12>>2];break C}c=(r<<9)+308e3|0;m[d+32>>2]=p(j[c+(j[a+21|0]<<1)|0])/p(255);m[d+16>>2]=p(j[c+(j[a+22|0]<<1)|0])/p(255);m[d+36>>2]=p(j[c+(j[a+23|0]<<1)|0])/p(255);m[d+20>>2]=p(j[c+(j[a+24|0]<<1)|0])/p(255);m[d+40>>2]=p(j[c+(j[a+25|0]<<1)|0])/p(255);m[d+24>>2]=p(j[c+(j[a+26|0]<<1)|0])/p(255);i[d+8>>2]=0;i[d+12>>2]=0;i[d+4>>2]=0;i[d>>2]=0;Ma(3,7,d+32|0,d+16|0,d+4|0,d,d+8|0);g[b+44|0]=j[d+4|0];g[b+56|0]=j[d|0];g[b+45|0]=j[d+5|0];g[b+57|0]=j[d+1|0];g[b+46|0]=j[d+6|0];e=j[d+2|0];g[b+59|0]=127;g[b+47|0]=127;g[b+58|0]=e;i[b+72>>2]=i[d+8>>2];i[b+76>>2]=i[d+12>>2];m[d+32>>2]=p(j[c+(j[a+27|0]<<1)|0])/p(255);m[d+16>>2]=p(j[c+(j[a+28|0]<<1)|0])/p(255);m[d+36>>2]=p(j[c+(j[a+29|0]<<1)|0])/p(255);m[d+20>>2]=p(j[c+(j[a+30|0]<<1)|0])/p(255);m[d+40>>2]=p(j[c+(j[a+31|0]<<1)|0])/p(255);m[d+24>>2]=p(j[c+(j[a+32|0]<<1)|0])/p(255);i[d+8>>2]=0;i[d+12>>2]=0;i[d+4>>2]=0;i[d>>2]=0;Ma(3,7,d+32|0,d+16|0,d+4|0,d,d+8|0);g[b+40|0]=j[d+4|0];g[b+52|0]=j[d|0];g[b+41|0]=j[d+5|0];g[b+53|0]=j[d+1|0];g[b+42|0]=j[d+6|0];c=j[d+2|0];g[b+55|0]=127;g[b+43|0]=127;g[b+54|0]=c;i[b+64>>2]=i[d+8>>2];i[b+68>>2]=i[d+12>>2]}g[b+8|0]=j[a+39|0];g[b+9|0]=j[a+40|0];g[b+10|0]=j[a+41|0];g[b+11|0]=j[a+42|0];g[b+12|0]=j[a+43|0];g[b+13|0]=j[a+44|0];g[b+14|0]=j[a+45|0];g[b+15|0]=j[a+46|0];g[b+16|0]=j[a+47|0];g[b+17|0]=j[a+48|0];g[b+18|0]=j[a+49|0];g[b+19|0]=j[a+50|0];g[b+20|0]=j[a+51|0];g[b+21|0]=j[a+52|0];g[b+22|0]=j[a+53|0];g[b+23|0]=j[a+54|0]}e=1;break a}i[b>>2]=2;l=o(i[a+108>>2],6);i[b+4>>2]=j[l+20320|0];e=1;c=(r<<9)+308e3|0;v=j[c+(j[a+22|0]<<1)|0];r=b+40|0;l=o(j[l+20324|0],3);u=j[l+20400|0]<<2;f=r+u|0;g[f|0]=(o(j[c+(j[a+21|0]<<1)|0],31)+127>>>0)/255;z=u;u=b+52|0;n=z+u|0;g[n|0]=(o(v,31)+127>>>0)/255;v=j[c+(j[a+24|0]<<1)|0];g[f+1|0]=(o(j[c+(j[a+23|0]<<1)|0],31)+127>>>0)/255;g[n+1|0]=(o(v,31)+127>>>0)/255;v=j[c+(j[a+26|0]<<1)|0];g[f+2|0]=(o(j[c+(j[a+25|0]<<1)|0],31)+127>>>0)/255;g[n+2|0]=(o(v,31)+127>>>0)/255;v=j[c+(j[a+28|0]<<1)|0];n=j[l+20401|0]<<2;f=n+r|0;g[f|0]=(o(j[c+(j[a+27|0]<<1)|0],31)+127>>>0)/255;n=n+u|0;g[n|0]=(o(v,31)+127>>>0)/255;v=j[c+(j[a+30|0]<<1)|0];g[f+1|0]=(o(j[c+(j[a+29|0]<<1)|0],31)+127>>>0)/255;g[n+1|0]=(o(v,31)+127>>>0)/255;v=j[c+(j[a+32|0]<<1)|0];g[f+2|0]=(o(j[c+(j[a+31|0]<<1)|0],31)+127>>>0)/255;g[n+2|0]=(o(v,31)+127>>>0)/255;f=j[c+(j[a+34|0]<<1)|0];l=j[l+20402|0]<<2;r=l+r|0;g[r|0]=(o(j[c+(j[a+33|0]<<1)|0],31)+127>>>0)/255;l=l+u|0;g[l|0]=(o(f,31)+127>>>0)/255;f=j[c+(j[a+36|0]<<1)|0];g[r+1|0]=(o(j[c+(j[a+35|0]<<1)|0],31)+127>>>0)/255;g[l+1|0]=(o(f,31)+127>>>0)/255;f=j[c+(j[a+38|0]<<1)|0];g[r+2|0]=(o(j[c+(j[a+37|0]<<1)|0],31)+127>>>0)/255;g[l+2|0]=(o(f,31)+127>>>0)/255;g[b+8|0]=j[a+39|0];g[b+9|0]=j[a+40|0];g[b+10|0]=j[a+41|0];g[b+11|0]=j[a+42|0];g[b+12|0]=j[a+43|0];g[b+13|0]=j[a+44|0];g[b+14|0]=j[a+45|0];g[b+15|0]=j[a+46|0];g[b+16|0]=j[a+47|0];g[b+17|0]=j[a+48|0];g[b+18|0]=j[a+49|0];g[b+19|0]=j[a+50|0];g[b+20|0]=j[a+51|0];g[b+21|0]=j[a+52|0];g[b+22|0]=j[a+53|0];g[b+23|0]=j[a+54|0]}ha=d+48|0;return e}function xc(a,b,c,d,e,f,k){var m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0;m=ha-352|0;ha=m;i[m+344>>2]=0;i[m+348>>2]=0;i[m+336>>2]=0;i[m+340>>2]=0;i[m+328>>2]=0;i[m+332>>2]=0;i[m+320>>2]=0;i[m+312>>2]=0;i[m+316>>2]=0;i[m+304>>2]=0;i[m+308>>2]=0;i[m+296>>2]=0;i[m+300>>2]=0;i[m+288>>2]=0;i[m+292>>2]=0;i[m+280>>2]=0;i[m+272>>2]=0;i[m+276>>2]=0;i[m+264>>2]=0;i[m+268>>2]=0;i[m+256>>2]=0;i[m+260>>2]=0;i[m+248>>2]=0;i[m+252>>2]=0;i[m+240>>2]=0;i[m+232>>2]=0;i[m+236>>2]=0;i[m+224>>2]=0;i[m+228>>2]=0;i[m+216>>2]=0;i[m+220>>2]=0;i[m+208>>2]=0;i[m+212>>2]=0;i[m+200>>2]=0;i[m+192>>2]=0;i[m+196>>2]=0;i[m+184>>2]=0;i[m+188>>2]=0;i[m+176>>2]=0;i[m+180>>2]=0;i[m+168>>2]=0;i[m+172>>2]=0;a:{b:{c:{d:{if(d?!c:0){break d}i[m+344>>2]=0;i[m+348>>2]=0;i[m+336>>2]=c;i[m+332>>2]=c;i[m+328>>2]=d;i[m+340>>2]=c+d;if(!Ha(m+328|0,m+288|0)){break d}if(!Ha(m+328|0,m+248|0)){break d}if(!Ha(m+328|0,m+208|0)){break d}if(!Ha(m+328|0,m+168|0)|i[m+292>>2]==i[m+288>>2]|(i[m+252>>2]==i[m+248>>2]|i[m+212>>2]==i[m+208>>2])){break d}if(i[m+172>>2]==i[m+168>>2]){break d}d=i[m+348>>2];e:{if(d){c=i[m+344>>2];break e}c=0;d=i[m+332>>2];if(d>>>0>2]){i[m+332>>2]=d+1;c=j[d|0]}d=8;i[m+348>>2]=8;c=i[m+344>>2]|c;i[m+344>>2]=c}i[m+348>>2]=d+ -1;i[m+344>>2]=c>>>1;n=i[a>>2];d=i[a+4>>2]-n>>3;f:{if(d>>>0>>0){wc(a,b-d|0);break f}if(d>>>0<=b>>>0){break f}i[a+4>>2]=n+(b<<3)}i[m+160>>2]=1052688;if(b){w=c&1;B=w?1:3;while(1){g:{h:{if(i[m+172>>2]!=i[m+168>>2]){r=i[m+348>>2];if(r>>>0<16){break h}n=i[m+344>>2];break g}break c}d=i[m+332>>2];t=i[m+340>>2];c=r;while(1){p=0;if(d>>>0>>0){n=d+1|0;i[m+332>>2]=n;p=j[d|0];d=n}r=c+8|0;i[m+348>>2]=r;n=i[m+344>>2]|p<>2]=n;p=c>>>0<8;c=r;if(p){continue}break}}d=i[i[m+180>>2]+((n&1023)<<2)>>2];i:{if((d|0)<=-1){c=10;p=i[m+192>>2];while(1){t=n>>>c|0;c=c+1|0;d=h[p+((t&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}break i}c=d>>>16|0;d=d&65535}i[m+348>>2]=r-c;i[m+344>>2]=n>>>c;s=q<<3;y=d+y&7;g[(s+i[a>>2]|0)+4|0]=y;u=0;while(1){C=m;j:{k:{l:{m:{n:{o:{p:{z=(m+160|0)+u|0;v=j[z|0];if(v>>>0<=9){q:{r:{if(i[m+292>>2]!=i[m+288>>2]){r=i[m+348>>2];if(r>>>0<16){break r}n=i[m+344>>2];break q}break c}d=i[m+332>>2];t=i[m+340>>2];c=r;while(1){p=0;if(d>>>0>>0){n=d+1|0;i[m+332>>2]=n;p=j[d|0];d=n}r=c+8|0;i[m+348>>2]=r;n=i[m+344>>2]|p<>2]=n;p=c>>>0<8;c=r;if(p){continue}break}}d=i[i[m+300>>2]+((n&1023)<<2)>>2];if((d|0)>-1){break p}c=10;p=i[m+312>>2];while(1){t=n>>>c|0;c=c+1|0;d=h[p+((t&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}p=d;break k}if(v>>>0<=21){s:{t:{if(i[m+252>>2]!=i[m+248>>2]){r=i[m+348>>2];if(r>>>0<16){break t}n=i[m+344>>2];break s}break c}d=i[m+332>>2];t=i[m+340>>2];c=r;while(1){p=0;if(d>>>0>>0){n=d+1|0;i[m+332>>2]=n;p=j[d|0];d=n}r=c+8|0;i[m+348>>2]=r;n=i[m+344>>2]|p<>2]=n;p=c>>>0<8;c=r;if(p){continue}break}}d=i[i[m+260>>2]+((n&1023)<<2)>>2];if((d|0)>-1){break o}c=10;p=i[m+272>>2];while(1){t=n>>>c|0;c=c+1|0;d=h[p+((t&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}p=d;break l}u:{v:{if(i[m+212>>2]!=i[m+208>>2]){r=i[m+348>>2];if(r>>>0<16){break v}n=i[m+344>>2];break u}break c}d=i[m+332>>2];t=i[m+340>>2];c=r;while(1){p=0;if(d>>>0>>0){n=d+1|0;i[m+332>>2]=n;p=j[d|0];d=n}r=c+8|0;i[m+348>>2]=r;n=i[m+344>>2]|p<>2]=n;p=c>>>0<8;c=r;if(p){continue}break}}d=i[i[m+220>>2]+((n&1023)<<2)>>2];if((d|0)>-1){break n}c=10;p=i[m+232>>2];while(1){t=n>>>c|0;c=c+1|0;d=h[p+((t&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}break m}p=d&65535;c=d>>>16|0;break k}p=d&65535;c=d>>>16|0;break l}c=d>>>16|0;d=d&65535}p=d;i[m+344>>2]=n>>>c;c=r-c|0;break j}i[m+344>>2]=n>>>c;c=r-c|0;break j}i[m+344>>2]=n>>>c;c=r-c|0}i[C+348>>2]=c;c=p+v&31;g[(s+i[a>>2]|0)+u|0]=c;g[z|0]=c;u=u+1|0;if((B|0)!=(u|0)){continue}break}if(w){c=s+i[a>>2]|0;g[c+1|0]=j[c|0];c=s+i[a>>2]|0;g[c+2|0]=j[c|0]}q=q+1|0;if((q|0)!=(b|0)){continue}break}}r=a+12|0;c=i[a+12>>2];b=(i[a+16>>2]-c|0)/11|0;w:{if(b>>>0>>0){vc(r,e-b|0);break w}if(b>>>0<=e>>>0){break w}i[a+16>>2]=c+o(e,11)}if(!f){p=0;if(k){break d}}i[m+344>>2]=0;i[m+348>>2]=0;i[m+336>>2]=f;i[m+332>>2]=f;i[m+328>>2]=k;b=f+k|0;i[m+340>>2]=b;c=0;i[m+152>>2]=0;i[m+144>>2]=0;i[m+148>>2]=0;i[m+136>>2]=0;i[m+140>>2]=0;i[m+128>>2]=0;i[m+132>>2]=0;i[m+120>>2]=0;i[m+124>>2]=0;x:{if((k|0)<1){d=f;break x}d=f+1|0;i[m+332>>2]=d;c=j[f|0]}i[m+348>>2]=7;f=c>>>1|0;i[m+344>>2]=f;y:{z:{if(c&1){i[m+348>>2]=3;k=c>>>5|0;i[m+344>>2]=k;c=0;if(d>>>0>>0){i[m+332>>2]=d+1;c=j[d|0]}i[m+348>>2]=7;i[m+344>>2]=c>>>1;i[m+112>>2]=0;i[m+104>>2]=0;i[m+108>>2]=0;i[m+96>>2]=0;i[m+100>>2]=0;i[m+88>>2]=0;i[m+92>>2]=0;i[m+80>>2]=0;i[m+84>>2]=0;A:{B:{C:{u=k|c<<3&8;if(u){if(!Ha(m+328|0,m+80|0)){break B}if(i[m+84>>2]==i[m+80>>2]){break C}}D:{if(!e){b=0;break D}t=f&15;b=1;q=0;while(1){k=0;if(t){k=zb(m+328|0,t)}if(u){E:{F:{if(i[m+84>>2]!=i[m+80>>2]){n=i[m+348>>2];if(n>>>0<16){break F}f=i[m+344>>2];break E}break c}d=i[m+332>>2];s=i[m+340>>2];c=n;while(1){p=0;if(d>>>0>>0){f=d+1|0;i[m+332>>2]=f;p=j[d|0];d=f}n=c+8|0;i[m+348>>2]=n;f=i[m+344>>2]|p<>2]=f;p=c>>>0<8;c=n;if(p){continue}break}}d=i[i[m+92>>2]+((f&1023)<<2)>>2];G:{if((d|0)<=-1){c=10;p=i[m+104>>2];while(1){s=f>>>c|0;c=c+1|0;d=h[p+((s&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}break G}c=d>>>16|0;d=d&65535}i[m+348>>2]=n-c;i[m+344>>2]=f>>>c}else{d=0}p=d;d=i[a+24>>2];c=i[d>>2];if(k>>>0>=i[d+4>>2]-c>>4>>>0){break D}H:{if(p>>>0<32768){g[m+36|0]=p&3;g[m+35|0]=p>>>14;g[m+27|0]=p>>>8&1;b=p&255;g[m+26|0]=b>>>7;g[m+34|0]=p>>>13&1;g[m+33|0]=p>>>12&1;g[m+32|0]=p>>>11&1;g[m+31|0]=p>>>10&1;g[m+25|0]=p>>>9&1;g[m+30|0]=b>>>2&1;g[m+29|0]=b>>>3&1;g[m+28|0]=b>>>6&1;g[m+24|0]=b>>>4&3;yb(m+40|0,c+(k<<4)|0,m+24|0);c=0;while(1){f=c<<2;k=j[f+(m+40|0)|0];if((k|c)>>>0>=4){break a}b=o(q,11);d=b+i[r>>2]|0;n=d+c|0;g[n|0]=k|j[n|0]&252;n=Yd(c);d=d-(c>>>3|0)|0;k=j[k+90991|0];g[d+7|0]=n&j[d+7|0]|(k&1)<>>1<>>0>3){break a}d=b+i[r>>2]|0;n=d+c|0;g[n|0]=j[n|0]&243|k<<2;n=c+4|0;d=d-(n>>>3|0)|0;p=16<>>1<>>0>3){break a}d=b+i[r>>2]|0;n=d+c|0;g[n|0]=j[n|0]&207|k<<4;n=c+8|0;d=d-(n>>>3|0)|0;n=n&7;p=Yd(n);k=j[k+90991|0];g[d+7|0]=p&j[d+7|0]|(k&1)<>>1<>>0>3){break a}d=b+i[r>>2]|0;k=d+c|0;g[k|0]=j[k|0]&63|f<<6;k=c+12|0;d=d-(k>>>3|0)|0;k=k&7;n=Yd(k);f=j[f+90991|0];g[d+7|0]=n&j[d+7|0]|(f&1)<>>1<>2]|0);q=q+1|0;b=q>>>0>>0;if((e|0)!=(q|0)){continue}break}}a=i[m+104>>2];if(a){i[m+108>>2]=a;wa(a)}a=i[m+92>>2];if(a){i[m+96>>2]=a;wa(a)}a=i[m+80>>2];if(a){i[m+84>>2]=a;wa(a)}p=0;if(!(b&1)){break z}break y}a=i[m+104>>2];if(a){i[m+108>>2]=a;wa(a)}a=i[m+92>>2];if(a){i[m+96>>2]=a;wa(a)}a=i[m+80>>2];if(!a){break A}i[m+84>>2]=a;wa(a);break A}a=i[m+104>>2];if(a){i[m+108>>2]=a;wa(a)}a=i[m+92>>2];if(a){i[m+96>>2]=a;wa(a)}a=i[m+80>>2];if(!a){break A}i[m+84>>2]=a;wa(a)}p=0;break y}i[m+348>>2]=6;f=c>>>2|0;i[m+344>>2]=f;I:{J:{if(c&2){i[m+348>>2]=2;k=c>>>6|0;i[m+344>>2]=k;c=0;if(d>>>0>>0){i[m+332>>2]=d+1;c=j[d|0]}i[m+348>>2]=6;i[m+344>>2]=c>>>2;i[m+112>>2]=0;i[m+104>>2]=0;i[m+108>>2]=0;i[m+96>>2]=0;i[m+100>>2]=0;i[m+88>>2]=0;i[m+92>>2]=0;i[m+80>>2]=0;i[m+84>>2]=0;d=1;if(!Ha(m+328|0,m+80|0)|i[m+84>>2]==i[m+80>>2]){break I}i[m+72>>2]=0;b=m- -64|0;i[b>>2]=0;i[b+4>>2]=0;i[m+56>>2]=0;i[m+60>>2]=0;i[m+48>>2]=0;i[m+52>>2]=0;i[m+40>>2]=0;i[m+44>>2]=0;v=k|c<<2&12;if(v){if(!Ha(m+328|0,m+40|0)|i[m+44>>2]==i[m+40>>2]){break J}}d=0;if(!e){break J}t=f&15;u=0;k=0;b=0;while(1){if(!k){K:{L:{if(i[m+84>>2]!=i[m+80>>2]){n=i[m+348>>2];if(n>>>0<16){break L}f=i[m+344>>2];break K}break c}d=i[m+332>>2];k=i[m+340>>2];c=n;while(1){p=0;if(d>>>0>>0){b=d+1|0;i[m+332>>2]=b;p=j[d|0];d=b}n=c+8|0;i[m+348>>2]=n;f=i[m+344>>2]|p<>2]=f;b=c>>>0<8;c=n;if(b){continue}break}}d=i[i[m+92>>2]+((f&1023)<<2)>>2];M:{if((d|0)<=-1){c=10;b=i[m+104>>2];while(1){k=f>>>c|0;c=c+1|0;d=h[b+((k&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}b=d;break M}c=d>>>16|0;b=d&65535}i[m+348>>2]=n-c;i[m+344>>2]=f>>>c;k=8}c=0;N:{O:{P:{Q:{if(b&1){p=0;q=0;if(t){q=zb(m+328|0,t)}if(!v){break O}R:{S:{if(i[m+44>>2]!=i[m+40>>2]){n=i[m+348>>2];if(n>>>0<16){break S}f=i[m+344>>2];break R}break c}d=i[m+332>>2];s=i[m+340>>2];c=n;while(1){p=0;if(d>>>0>>0){f=d+1|0;i[m+332>>2]=f;p=j[d|0];d=f}n=c+8|0;i[m+348>>2]=n;f=i[m+344>>2]|p<>2]=f;p=c>>>0<8;c=n;if(p){continue}break}}d=i[i[m+52>>2]+((f&1023)<<2)>>2];if((d|0)>-1){break Q}c=10;p=i[m+64>>2];while(1){s=f>>>c|0;c=c+1|0;d=h[p+((s&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}break P}while(1){f=i[m+348>>2];T:{if(f>>>0>=8){d=i[m+344>>2];n=f;break T}d=0;n=i[m+332>>2];if(n>>>0>2]){i[m+332>>2]=n+1;d=j[n|0]}n=f+8|0;i[m+348>>2]=n;d=i[m+344>>2]|d<>2]=d}i[m+348>>2]=n+ -8;i[m+344>>2]=d>>>8;n=o(u,11);f=n+i[r>>2]|0;p=f+c|0;q=d&3;g[p|0]=q|j[p|0]&252;p=Yd(c);f=f-(c>>>3|0)|0;q=j[q+90991|0];g[f+7|0]=p&j[f+7|0]|(q&1)<>>1<>2]|0;p=f+c|0;q=d>>>2&3;g[p|0]=j[p|0]&243|q<<2;p=c+4|0;f=f-(p>>>3|0)|0;s=16<>>1<>2]|0;p=f+c|0;s=d>>>4&3;g[p|0]=j[p|0]&207|s<<4;p=c+8|0;f=f-(p>>>3|0)|0;p=p&7;q=Yd(p);s=j[s+90991|0];g[f+7|0]=q&j[f+7|0]|(s&1)<>>1<>2]|0;n=f+c|0;g[n|0]=j[n|0]&63|d&192;n=c+12|0;f=f-(n>>>3|0)|0;n=n&7;p=Yd(n);d=j[(d>>>6&3)+90991|0];g[f+7|0]=p&j[f+7|0]|(d&1)<>>1<>>16|0;d=d&65535}p=d;i[m+348>>2]=n-c;i[m+344>>2]=f>>>c}c=i[a+24>>2];d=i[c>>2];if(q>>>0>=i[c+4>>2]-d>>4>>>0){d=1;break J}if(p>>>0<32768){g[m+20|0]=p&3;g[m+19|0]=p>>>14;g[m+11|0]=p>>>8&1;c=p&255;g[m+10|0]=c>>>7;g[m+18|0]=p>>>13&1;g[m+17|0]=p>>>12&1;g[m+16|0]=p>>>11&1;g[m+15|0]=p>>>10&1;g[m+9|0]=p>>>9&1;g[m+14|0]=c>>>2&1;g[m+13|0]=c>>>3&1;g[m+12|0]=c>>>6&1;g[m+8|0]=c>>>4&3;yb(m+24|0,d+(q<<4)|0,m+8|0);c=0;while(1){f=c<<2;p=j[f+(m+24|0)|0];if((p|c)>>>0>=4){break a}n=o(u,11);d=n+i[r>>2]|0;q=d+c|0;g[q|0]=p|j[q|0]&252;q=Yd(c);d=d-(c>>>3|0)|0;p=j[p+90991|0];g[d+7|0]=q&j[d+7|0]|(p&1)<>>1<>>0>3){break a}d=n+i[r>>2]|0;q=d+c|0;g[q|0]=j[q|0]&243|p<<2;q=c+4|0;d=d-(q>>>3|0)|0;s=16<>>1<>>0>3){break a}d=n+i[r>>2]|0;q=d+c|0;g[q|0]=j[q|0]&207|p<<4;q=c+8|0;d=d-(q>>>3|0)|0;q=q&7;s=Yd(q);p=j[p+90991|0];g[d+7|0]=s&j[d+7|0]|(p&1)<>>1<>>0>3){break a}d=n+i[r>>2]|0;n=d+c|0;g[n|0]=j[n|0]&63|f<<6;n=c+12|0;d=d-(n>>>3|0)|0;n=n&7;p=Yd(n);f=j[f+90991|0];g[d+7|0]=p&j[d+7|0]|(f&1)<>>1<>>1|0;k=k+ -1|0;Va(i[r>>2]+o(u,11)|0);u=u+1|0;if((u|0)!=(e|0)){continue}break}d=0;break J}i[m+348>>2]=5;i[m+344>>2]=c>>>3;if(c&4){if(!e){break z}q=0;while(1){c=0;while(1){a=i[m+348>>2];U:{if(a>>>0>=8){d=i[m+344>>2];n=a;break U}d=0;b=i[m+332>>2];if(b>>>0>2]){i[m+332>>2]=b+1;d=j[b|0]}n=a+8|0;i[m+348>>2]=n;d=i[m+344>>2]|d<>2]=d}i[m+348>>2]=n+ -8;i[m+344>>2]=d>>>8;a=o(q,11);b=a+i[r>>2]|0;f=b+c|0;k=d&3;g[f|0]=k|j[f|0]&252;f=Yd(c);b=b-(c>>>3|0)|0;k=j[k+90991|0];g[b+7|0]=f&j[b+7|0]|(k&1)<>>1<>2]|0;f=b+c|0;k=d>>>2&3;g[f|0]=j[f|0]&243|k<<2;f=c+4|0;b=b-(f>>>3|0)|0;n=16<>>1<>2]|0;f=b+c|0;n=d>>>4&3;g[f|0]=j[f|0]&207|n<<4;f=c+8|0;b=b-(f>>>3|0)|0;f=f&7;k=Yd(f);n=j[n+90991|0];g[b+7|0]=k&j[b+7|0]|(n&1)<>>1<>2]|0;f=b+c|0;g[f|0]=j[f|0]&63|d&192;f=c+12|0;b=b-(f>>>3|0)|0;f=f&7;k=Yd(f);d=j[(d>>>6&3)+90991|0];g[b+7|0]=k&j[b+7|0]|(d&1)<>>1<>2]|0);q=q+1|0;if((q|0)!=(e|0)){continue}break}break z}p=0;if(!Ha(m+328|0,m+120|0)){break y}V:{if(e>>>0>=2){if(i[m+124>>2]==i[m+120>>2]){break y}i[m+80>>2]=0;break V}i[m+80>>2]=0;if(!e){break z}}q=0;while(1){c=0;k=0;W:{if(!q){while(1){a=i[m+348>>2];X:{if(a>>>0>=8){d=i[m+344>>2];n=a;break X}d=0;b=i[m+332>>2];if(b>>>0>2]){i[m+332>>2]=b+1;d=j[b|0]}n=a+8|0;i[m+348>>2]=n;d=i[m+344>>2]|d<>2]=d}g[(m+80|0)+c|0]=d;i[m+348>>2]=n+ -8;i[m+344>>2]=d>>>8;a=i[r>>2];b=a+c|0;f=d&3;g[b|0]=f|j[b|0]&252;b=Yd(c);a=a-(c>>>3|0)|0;f=j[f+90991|0];g[a+7|0]=b&j[a+7|0]|(f&1)<>>1<>2];b=a+c|0;f=d>>>2&3;g[b|0]=j[b|0]&243|f<<2;b=c+4|0;a=a-(b>>>3|0)|0;k=16<>>1<>2];b=a+c|0;k=d>>>4&3;g[b|0]=j[b|0]&207|k<<4;b=c+8|0;a=a-(b>>>3|0)|0;b=b&7;f=Yd(b);k=j[k+90991|0];g[a+7|0]=f&j[a+7|0]|(k&1)<>>1<>2];b=a+c|0;g[b|0]=j[b|0]&63|d&192;b=c+12|0;a=a-(b>>>3|0)|0;b=b&7;f=Yd(b);d=j[(d>>>6&3)+90991|0];g[a+7|0]=f&j[a+7|0]|(d&1)<>>1<>2];break W}while(1){Y:{Z:{if(i[m+124>>2]!=i[m+120>>2]){n=i[m+348>>2];if(n>>>0<16){break Z}f=i[m+344>>2];break Y}break c}d=i[m+332>>2];b=i[m+340>>2];c=n;while(1){p=0;if(d>>>0>>0){a=d+1|0;i[m+332>>2]=a;p=j[d|0];d=a}n=c+8|0;i[m+348>>2]=n;f=i[m+344>>2]|p<>2]=f;a=c>>>0<8;c=n;if(a){continue}break}}a=(m+80|0)+k|0;b=a;d=i[i[m+132>>2]+((f&1023)<<2)>>2];_:{if((d|0)<=-1){c=10;p=i[m+144>>2];while(1){t=f>>>c|0;c=c+1|0;d=h[p+((t&1)+(d^-1)<<1)>>1];if((d|0)<0){continue}break}break _}c=d>>>16|0;d=d&65535}a=j[a|0]^d;g[b|0]=a;i[m+348>>2]=n-c;i[m+344>>2]=f>>>c;b=o(q,11);c=b+i[r>>2]|0;d=c+k|0;f=a&3;g[d|0]=f|j[d|0]&252;d=Yd(k);c=c-(k>>>3|0)|0;f=j[f+90991|0];g[c+7|0]=d&j[c+7|0]|(f&1)<>>1<>2]|0;d=c+k|0;f=a>>>2&3;g[d|0]=j[d|0]&243|f<<2;d=k+4|0;c=c-(d>>>3|0)|0;n=16<>>1<>2]|0;d=c+k|0;n=a>>>4&3;g[d|0]=j[d|0]&207|n<<4;d=k+8|0;c=c-(d>>>3|0)|0;d=d&7;f=Yd(d);n=j[n+90991|0];g[c+7|0]=f&j[c+7|0]|(n&1)<>>1<>2]|0;d=c+k|0;g[d|0]=j[d|0]&63|a&192;d=k+12|0;c=c-(d>>>3|0)|0;d=d&7;f=Yd(d);a=j[(a>>>6&3)+90991|0];g[c+7|0]=f&j[c+7|0]|(a&1)<>>1<>2]|0}Va(a);q=q+1|0;if((q|0)!=(e|0)){continue}break}break z}a=i[m+64>>2];if(a){i[m+68>>2]=a;wa(a)}a=i[m+52>>2];if(a){i[m+56>>2]=a;wa(a)}a=i[m+40>>2];if(!a){break I}i[m+44>>2]=a;wa(a)}a=i[m+104>>2];if(a){i[m+108>>2]=a;wa(a)}a=i[m+92>>2];if(a){i[m+96>>2]=a;wa(a)}a=i[m+80>>2];if(a){i[m+84>>2]=a;wa(a)}p=0;if(d){break y}}p=1}a=i[m+144>>2];if(a){i[m+148>>2]=a;wa(a)}a=i[m+132>>2];if(a){i[m+136>>2]=a;wa(a)}a=i[m+120>>2];if(!a){break d}i[m+124>>2]=a;wa(a)}a=i[m+192>>2];if(a){i[m+196>>2]=a;wa(a)}a=i[m+180>>2];if(a){i[m+184>>2]=a;wa(a)}a=i[m+168>>2];if(a){i[m+172>>2]=a;wa(a)}a=i[m+232>>2];if(a){i[m+236>>2]=a;wa(a)}a=i[m+220>>2];if(a){i[m+224>>2]=a;wa(a)}a=i[m+208>>2];if(a){i[m+212>>2]=a;wa(a)}a=i[m+272>>2];if(a){i[m+276>>2]=a;wa(a)}a=i[m+260>>2];if(a){i[m+264>>2]=a;wa(a)}a=i[m+248>>2];if(a){i[m+252>>2]=a;wa(a)}a=i[m+312>>2];if(a){i[m+316>>2]=a;wa(a)}a=i[m+300>>2];if(a){i[m+304>>2]=a;wa(a)}a=i[m+288>>2];if(a){i[m+292>>2]=a;wa(a)}ha=m+352|0;return p}A(90786,90648,445,90809);x()}A(90960,29004,48,90981);x()}A(90995,90648,748,91013);x()}function nc(a,b){var c=0,d=0,e=0,f=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0;d=ha-320|0;ha=d;a:{$=Ba(a,d+168|0,0,1);b:{if(!$){break b}a=i[d+272>>2];if((a|0)==8){p=k[(j[d+283|0]<<1)+26160>>1];a=p<<3;g[b+2|0]=a;g[b+1|0]=a;g[b|0]=a;a=i[(p>>>3&12)+26080>>2];g[b+4|0]=a;g[b+5|0]=a>>>8;g[b+6|0]=a>>>16;g[b+7|0]=a>>>24;a=p>>>7|0;g[b+3|0]=a<<5|a<<2|2;break b}Ea(a,i[d+276>>2],d+280|0,d+168|0,d+96|0);a=d;U=j[d+99|0];g[d+80|0]=U;X=j[d+103|0];g[d+81|0]=X;G=j[d+111|0];g[d+83|0]=G;F=j[d+119|0];g[d+85|0]=F;D=j[d+127|0];g[d+87|0]=D;H=j[d+135|0];g[d+89|0]=H;Y=j[d+131|0];g[d+88|0]=Y;y=j[d+123|0];g[d+86|0]=y;z=j[d+115|0];g[d+84|0]=z;L=j[d+107|0];g[d+82|0]=L;B=j[d+139|0];g[d+90|0]=B;u=j[d+143|0];g[d+91|0]=u;t=j[d+147|0];g[d+92|0]=t;r=j[d+151|0];g[d+93|0]=r;f=j[d+155|0];g[d+94|0]=f;m=j[d+159|0];g[d+95|0]=m;i[d+72>>2]=255;i[d+76>>2]=255;i[d+64>>2]=0;i[d+68>>2]=0;e=j[d+81|0];c=j[d+80|0];P=c>>>0>>0?e:c;V=c>>>0>e>>>0?e:c;q=D+(G+(y+L|0)|0)|0;n=(F+(X+(z+U|0)|0)|0)+4|0;I=q+n>>>3|0;c=z-I|0;e=o(c,c);c=U-I|0;e=e+o(c,c)|0;c=X-I|0;e=e+o(c,c)|0;c=F-I|0;e=e+o(c,c)|0;c=L-I|0;e=e+o(c,c)|0;c=y-I|0;e=e+o(c,c)|0;c=G-I|0;e=e+o(c,c)|0;c=D-I|0;s=e+o(c,c)|0;l=(m+(u+(f+B|0)|0)|0)+4|0;e=r+(H+(t+Y|0)|0)|0;J=l+e>>>3|0;c=Y-J|0;s=s+o(c,c)|0;c=t-J|0;s=s+o(c,c)|0;c=H-J|0;s=s+o(c,c)|0;c=r-J|0;s=s+o(c,c)|0;c=B-J|0;s=s+o(c,c)|0;c=f-J|0;s=s+o(c,c)|0;c=u-J|0;s=s+o(c,c)|0;c=m-J|0;Z=s+o(c,c)|0;c=G;G=q+l>>>3|0;c=c-G|0;l=o(c,c);c=L-G|0;l=l+o(c,c)|0;c=y-G|0;l=l+o(c,c)|0;c=D-G|0;l=l+o(c,c)|0;c=B-G|0;l=l+o(c,c)|0;c=f-G|0;f=l+o(c,c)|0;c=u-G|0;f=f+o(c,c)|0;u=e+n>>>3|0;c=U-u|0;e=f+o(c,c)|0;c=X-u|0;e=e+o(c,c)|0;c=z-u|0;e=e+o(c,c)|0;c=F-u|0;e=e+o(c,c)|0;c=Y-u|0;e=e+o(c,c)|0;c=H-u|0;e=e+o(c,c)|0;c=t-u|0;e=e+o(c,c)|0;c=r-u|0;e=e+o(c,c)|0;c=m-G|0;_=e+o(c,c)|0;E=(Z|0)<(_|0);c:{if(!E){f=j[d+93|0];m=j[d+92|0];q=j[d+89|0];n=j[d+88|0];l=j[d+85|0];e=j[d+84|0];c=V>>>0>e>>>0?e:V;c=c>>>0>l>>>0?l:c;c=c>>>0>n>>>0?n:c;c=c>>>0>q>>>0?q:c;c=c>>>0>m>>>0?m:c;y=c>>>0>f>>>0?f:c;i[d+72>>2]=y;c=P>>>0>>0?e:P;c=c>>>0>>0?l:c;c=c>>>0>>0?n:c;c=c>>>0>>0?q:c;c=c>>>0>>0?m:c;D=c>>>0>>0?f:c;i[d+64>>2]=D;t=j[d+95|0];r=j[d+94|0];f=j[d+91|0];m=j[d+90|0];q=j[d+87|0];n=j[d+86|0];l=j[d+83|0];e=j[d+82|0];c=e>>>0>l>>>0?l:e;c=c>>>0>n>>>0?n:c;c=c>>>0>q>>>0?q:c;c=c>>>0>m>>>0?m:c;c=c>>>0>f>>>0?f:c;c=c>>>0>r>>>0?r:c;z=c>>>0>t>>>0?t:c;i[d+76>>2]=z;c=e>>>0>>0?l:e;c=c>>>0>>0?n:c;c=c>>>0>>0?q:c;c=c>>>0>>0?m:c;c=c>>>0>>0?f:c;c=c>>>0>>0?r:c;c=c>>>0>>0?t:c;break c}f=j[d+87|0];m=j[d+86|0];q=j[d+85|0];n=j[d+84|0];l=j[d+83|0];e=j[d+82|0];c=V>>>0>e>>>0?e:V;c=c>>>0>l>>>0?l:c;c=c>>>0>n>>>0?n:c;c=c>>>0>q>>>0?q:c;c=c>>>0>m>>>0?m:c;y=c>>>0>f>>>0?f:c;i[d+72>>2]=y;c=P>>>0>>0?e:P;c=c>>>0>>0?l:c;c=c>>>0>>0?n:c;c=c>>>0>>0?q:c;c=c>>>0>>0?m:c;D=c>>>0>>0?f:c;i[d+64>>2]=D;t=j[d+95|0];r=j[d+94|0];f=j[d+93|0];m=j[d+92|0];q=j[d+91|0];n=j[d+90|0];l=j[d+89|0];e=j[d+88|0];c=e>>>0>l>>>0?l:e;c=c>>>0>n>>>0?n:c;c=c>>>0>q>>>0?q:c;c=c>>>0>m>>>0?m:c;c=c>>>0>f>>>0?f:c;c=c>>>0>r>>>0?r:c;z=c>>>0>t>>>0?t:c;i[d+76>>2]=z;c=e>>>0>>0?l:e;c=c>>>0>>0?n:c;c=c>>>0>>0?q:c;c=c>>>0>>0?m:c;c=c>>>0>>0?f:c;c=c>>>0>>0?r:c;c=c>>>0>>0?t:c}i[a+68>>2]=c;a=D-y|0;i[d+56>>2]=a;e=c-z|0;i[d+60>>2]=e;g[b+3|0]=E;d:{e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{o:{p:{q:{if((a|e)>>>0<=3){D=0;g[b+2|0]=0;h[b>>1]=0;z=0;F=0;y=0;while(1){r:{s:{switch(a|0){case 0:a=i[(d+72|0)+(v<<2)>>2];c=(a<<1)+26672|0;break r;case 1:a=i[(d+72|0)+(v<<2)>>2];c=(a<<1)+27184|0;break r;default:break s}}a=i[(d+72|0)+(v<<2)>>2];c=(a<<1)+27696|0}w=k[c>>1];p=w>>>3&31;if(p>>>0>=16){break q}i[d+44>>2]=w>>>14;i[d+40>>2]=w>>>12&3;i[d+36>>2]=w>>>10&3;i[d+32>>2]=w>>>8&3;E=(w&7)<<(v?2:5)|E;g[b+3|0]=E;p=p<<(!v<<2);D=p|D;g[b+2|0]=D;z=p|z;g[b+1|0]=z;Q=p|Q;g[b|0]=Q;B=v<<1;t:{if((Z|0)<(_|0)){w=(d+80|0)+(B<<2)|0;p=j[w|0];if(a>>>0>p>>>0){break p}f=i[(d- -64|0)+(v<<2)>>2];if(f>>>0

    >>0){break p}q=p-a|0;if(q>>>0>=4){break o}p=j[w+1|0];if(a>>>0>p>>>0|f>>>0

    >>0){break p}n=p-a|0;if(n>>>0>3){break o}p=j[w+2|0];if(a>>>0>p>>>0|f>>>0

    >>0){break p}l=p-a|0;if(l>>>0>3){break o}p=j[w+3|0];if(a>>>0>p>>>0|f>>>0

    >>0){break p}e=p-a|0;if(e>>>0>3){break o}u=B|1;m=(d+80|0)+(u<<2)|0;p=j[m|0];if(a>>>0>p>>>0|f>>>0

    >>0){break p}c=p-a|0;if(c>>>0>3){break o}p=j[m+1|0];if(a>>>0>p>>>0|f>>>0

    >>0){break p}w=p-a|0;if(w>>>0>3){break o}p=j[m+2|0];if(a>>>0>p>>>0|f>>>0

    >>0){break p}p=p-a|0;if(p>>>0>3){break o}m=j[m+3|0];if(a>>>0>m>>>0|f>>>0>>0){break p}M=m-a|0;if(M>>>0>=4){break o}K=u+12|0;t=j[i[(d+32|0)+(q<<2)>>2]+28292|0];r=j[i[(d+32|0)+(n<<2)>>2]+28292|0];f=B+4|0;m=j[i[(d+32|0)+(l<<2)>>2]+28292|0];q=B+8|0;n=j[i[(d+32|0)+(e<<2)>>2]+28292|0];l=B+12|0;e=j[i[(d+32|0)+(c<<2)>>2]+28292|0];c=j[i[(d+32|0)+(w<<2)>>2]+28292|0];w=u+4|0;p=j[i[(d+32|0)+(p<<2)>>2]+28292|0];a=u+8|0;F=(t&1)<>>1<>>1<>>1<>>1<>>1<>>1<>>1<>>0>p>>>0){break n}r=i[(d- -64|0)+(v<<2)>>2];if(r>>>0

    >>0){break n}n=p-a|0;if(n>>>0>=4){break m}p=j[w+4|0];if(a>>>0>p>>>0|r>>>0

    >>0){break n}l=p-a|0;if(l>>>0>3){break m}p=j[w+8|0];if(a>>>0>p>>>0|r>>>0

    >>0){break n}e=p-a|0;if(e>>>0>3){break m}p=j[w+12|0];if(a>>>0>p>>>0|r>>>0

    >>0){break n}c=p-a|0;if(c>>>0>3){break m}m=(d+80|0)+(B|1)|0;p=j[m|0];if(a>>>0>p>>>0|r>>>0

    >>0){break n}w=p-a|0;if(w>>>0>3){break m}p=j[m+4|0];if(a>>>0>p>>>0|r>>>0

    >>0){break n}p=p-a|0;if(p>>>0>3){break m}q=j[m+8|0];if(a>>>0>q>>>0|r>>>0>>0){break n}f=q-a|0;if(f>>>0>3){break m}q=j[m+12|0];if(a>>>0>q>>>0|r>>>0>>0){break n}M=q-a|0;if(M>>>0>=4){break m}L=v<<3;K=L|7;B=L|1;u=B+1|0;t=L|5;r=t+1|0;m=j[i[(d+32|0)+(n<<2)>>2]+28292|0];q=j[i[(d+32|0)+(l<<2)>>2]+28292|0];n=j[i[(d+32|0)+(e<<2)>>2]+28292|0];l=j[i[(d+32|0)+(c<<2)>>2]+28292|0];e=L|3;c=j[i[(d+32|0)+(w<<2)>>2]+28292|0];w=L|4;p=j[i[(d+32|0)+(p<<2)>>2]+28292|0];a=j[i[(d+32|0)+(f<<2)>>2]+28292|0];F=(m&1)<>>1<>>1<>>1<>>1<>>1<>>1<>>1<>2]+28292|0];y=p|a>>>1<>2];continue}}Y=(Z|0)<(_|0);n=Y?J:G;q=((o(n,31)+127&65535)>>>0)/255|0;a=Y?I:u;e=((o(a,31)+127&65535)>>>0)/255|0;m=q-e|0;l=m+4|0;u:{if(l>>>0<=7){E=E|2;g[b+3|0]=E;a=e<<3;C=a|((m|0)<0?m+8|0:m);g[b|0]=C;v=a|e>>>2;a=q<<3|q>>>2;break u}e=((o(a,15)+127&65535)>>>0)/255|0;a=e<<4;n=((o(n,15)+127&65535)>>>0)/255|0;C=a|n;g[b|0]=C;v=a|e;a=n|n<<4}g[b+2|0]=C;g[b+1|0]=C;i[d+28>>2]=a;i[d+24>>2]=v;c=c-a|0;n=c>>31;a=a-z|0;e=a>>31;c=n^c+n;a=e^a+e;i[d+20>>2]=(c|0)>(a|0)?c:a;c=D-v|0;n=c>>31;a=v-y|0;e=a>>31;c=n^c+n;a=e^a+e;i[d+16>>2]=(c|0)>(a|0)?c:a;L=l>>>0<8;while(1){v:{w:{if(L){break w}n=K<<2;a=i[n+(d+56|0)>>2];if(a>>>0>3){break w}x:{y:{switch(a|0){case 0:a=i[n+(d+72|0)>>2];c=(a<<1)+26672|0;break x;case 1:a=i[n+(d+72|0)>>2];c=(a<<1)+27184|0;break x;default:break y}}a=i[n+(d+72|0)>>2];c=(a<<1)+27696|0}c=k[c>>1];e=c>>>3&31;if(e>>>0>=16){break l}i[d+44>>2]=c>>>14;i[d+40>>2]=c>>>12&3;i[d+36>>2]=c>>>10&3;i[d+32>>2]=c>>>8&3;E=(c&7)<<(K?2:5)|E;g[b+3|0]=E;c=!K<<2;l=15<>>0>c>>>0){break k}t=i[n+(d- -64|0)>>2];if(t>>>0>>0){break k}f=c-a|0;if(f>>>0>=4){break j}c=j[e+1|0];if(a>>>0>c>>>0|t>>>0>>0){break k}m=c-a|0;if(m>>>0>3){break j}c=j[e+2|0];if(a>>>0>c>>>0|t>>>0>>0){break k}q=c-a|0;if(q>>>0>3){break j}c=j[e+3|0];if(a>>>0>c>>>0|t>>>0>>0){break k}n=c-a|0;if(n>>>0>3){break j}z=y|1;r=(d+80|0)+(z<<2)|0;c=j[r|0];if(a>>>0>c>>>0|t>>>0>>0){break k}l=c-a|0;if(l>>>0>3){break j}c=j[r+1|0];if(a>>>0>c>>>0|t>>>0>>0){break k}e=c-a|0;if(e>>>0>3){break j}c=j[r+2|0];if(a>>>0>c>>>0|t>>>0>>0){break k}c=c-a|0;if(c>>>0>3){break j}r=j[r+3|0];if(a>>>0>r>>>0|t>>>0>>0){break k}D=r-a|0;if(D>>>0>=4){break j}C=z+12|0;B=j[i[(d+32|0)+(f<<2)>>2]+28292|0];u=j[i[(d+32|0)+(m<<2)>>2]+28292|0];t=y+4|0;r=j[i[(d+32|0)+(q<<2)>>2]+28292|0];f=y+8|0;m=j[i[(d+32|0)+(n<<2)>>2]+28292|0];q=y+12|0;n=j[i[(d+32|0)+(l<<2)>>2]+28292|0];l=j[i[(d+32|0)+(e<<2)>>2]+28292|0];e=z+4|0;c=j[i[(d+32|0)+(c<<2)>>2]+28292|0];a=z+8|0;F=(B&1)<>>1<>>1<>>1<>>1<>>1<>>1<>>1<>>0>c>>>0){break i}u=i[n+(d- -64|0)>>2];if(u>>>0>>0){break i}m=c-a|0;if(m>>>0>=4){break h}c=j[e+4|0];if(a>>>0>c>>>0|u>>>0>>0){break i}q=c-a|0;if(q>>>0>3){break h}c=j[e+8|0];if(a>>>0>c>>>0|u>>>0>>0){break i}n=c-a|0;if(n>>>0>3){break h}c=j[e+12|0];if(a>>>0>c>>>0|u>>>0>>0){break i}l=c-a|0;if(l>>>0>3){break h}r=(d+80|0)+(y|1)|0;c=j[r|0];if(a>>>0>c>>>0|u>>>0>>0){break i}e=c-a|0;if(e>>>0>3){break h}c=j[r+4|0];if(a>>>0>c>>>0|u>>>0>>0){break i}c=c-a|0;if(c>>>0>3){break h}f=j[r+8|0];if(a>>>0>f>>>0|u>>>0>>0){break i}t=f-a|0;if(t>>>0>3){break h}f=j[r+12|0];if(a>>>0>f>>>0|u>>>0>>0){break i}D=f-a|0;if(D>>>0>=4){break h}H=K<<3;C=H|7;y=H|1;z=y+1|0;B=H|5;u=B+1|0;r=j[i[(d+32|0)+(m<<2)>>2]+28292|0];f=j[i[(d+32|0)+(q<<2)>>2]+28292|0];m=j[i[(d+32|0)+(n<<2)>>2]+28292|0];q=j[i[(d+32|0)+(l<<2)>>2]+28292|0];n=H|3;l=j[i[(d+32|0)+(e<<2)>>2]+28292|0];e=H|4;c=j[i[(d+32|0)+(c<<2)>>2]+28292|0];a=j[i[(d+32|0)+(t<<2)>>2]+28292|0];F=(r&1)<>>1<>>1<>>1<>>1<>>1<>>1<>>1<>2]+28292|0];Q=c|a>>>1<>2];if(s>>>0>=256){break g}e=i[c+(d+16|0)>>2];A:{if(e>>>0<=51){a=e>>>0>22?14:15;a=e+ -4>>>0>35?a&13:a;a=e>>>0<9?a&11:a;a=e>>>0<12?a&7:a;break A}a=e>>>0>60?248:252;a=e>>>0>89?a&244:a;a=e>>>0>120?a&236:a;a=e>>>0>136?a&220:a;a=e>>>0>174?a&188:a}V=255-s|0;U=0-s|0;R=K<<3;I=R+(d+80|0)|0;X=I|3;G=I|2;F=I|1;W=K<<1;S=W|1;J=(d+80|0)+(S<<2)|0;D=J|3;H=J|2;y=J|1;B=c+(d+72|0)|0;u=c+(d- -64|0)|0;E=-1;P=0;z=0;while(1){if(a>>>P&1){e=P<<4;c=i[e+28352>>2];m=(c|0)>(U|0)?c:U;c=i[e+28356>>2];n=(c|0)>(U|0)?c:U;if((m|0)>(n|0)){break f}c=i[e+28360>>2];l=(c|0)<(V|0)?c:V;if((n|0)>(l|0)){break f}c=i[e+28364>>2];q=(c|0)<(V|0)?c:V;if((l|0)>(q|0)){break f}i[d+32>>2]=l;i[d+36>>2]=q;i[d+40>>2]=n;i[d+44>>2]=m;if((m|0)>(l|0)|(n|0)>(q|0)){break e}N=q+l|0;T=n+l|0;O=m+n|0;c=i[u>>2]-s<<1;B:{if((Z|0)<(_|0)){if((c|0)<(O|0)){i[d+8>>2]=50529027;i[d+12>>2]=50529027;c=m+(s-j[F|0]|0)|0;e=o(c,c);c=m+(s-j[I|0]|0)|0;e=e+o(c,c)|0;c=m+(s-j[G|0]|0)|0;e=e+o(c,c)|0;c=m+(s-j[X|0]|0)|0;v=e+o(c,c)|0;if(v>>>0>=E>>>0){break B}c=m+(s-j[J|0]|0)|0;e=o(c,c)+v|0;c=m+(s-j[y|0]|0)|0;e=e+o(c,c)|0;c=m+(s-j[H|0]|0)|0;e=e+o(c,c)|0;c=m+(s-j[D|0]|0)|0;v=e+o(c,c)|0;break B}if(i[B>>2]-s<<1<(N|0)){t=j[I|0]-s|0;c=t<<1;c=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+8|0]=c;r=i[(d+32|0)+(c<<2)>>2];f=j[F|0]-s|0;c=f<<1;c=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+9|0]=c;m=i[(d+32|0)+(c<<2)>>2];q=j[G|0]-s|0;c=q<<1;c=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+10|0]=c;n=i[(d+32|0)+(c<<2)>>2];l=j[X|0]-s|0;c=l<<1;e=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+11|0]=e;c=m-f|0;f=o(c,c);c=r-t|0;f=f+o(c,c)|0;c=n-q|0;f=f+o(c,c)|0;c=i[(d+32|0)+(e<<2)>>2]-l|0;v=f+o(c,c)|0;if(v>>>0>=E>>>0){break B}t=j[J|0]-s|0;c=t<<1;c=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+12|0]=c;r=i[(d+32|0)+(c<<2)>>2];l=j[D|0];e=j[H|0];f=j[y|0]-s|0;c=f<<1;c=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+13|0]=c;m=i[(d+32|0)+(c<<2)>>2];q=e-s|0;c=q<<1;c=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+14|0]=c;n=i[(d+32|0)+(c<<2)>>2];l=l-s|0;c=l<<1;e=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[d+15|0]=e;c=r-t|0;r=o(c,c)+v|0;c=m-f|0;f=r+o(c,c)|0;c=n-q|0;f=f+o(c,c)|0;c=i[(d+32|0)+(e<<2)>>2]-l|0;v=f+o(c,c)|0;break B}i[d+8>>2]=16843009;i[d+12>>2]=16843009;c=q+(s-j[F|0]|0)|0;e=o(c,c);c=q+(s-j[I|0]|0)|0;e=e+o(c,c)|0;c=q+(s-j[G|0]|0)|0;e=e+o(c,c)|0;c=q+(s-j[X|0]|0)|0;v=e+o(c,c)|0;if(v>>>0>=E>>>0){break B}c=q+(s-j[J|0]|0)|0;e=o(c,c)+v|0;c=q+(s-j[y|0]|0)|0;e=e+o(c,c)|0;c=q+(s-j[H|0]|0)|0;e=e+o(c,c)|0;c=q+(s-j[D|0]|0)|0;v=e+o(c,c)|0;break B}if((c|0)<(O|0)){i[d+8>>2]=50529027;i[d+12>>2]=50529027;C=0;v=0;while(1){e=(d+80|0)+(C<<2)|0;c=m+(s-j[e+S|0]|0)|0;f=o(c,c);c=m+(s-j[e+W|0]|0)|0;v=f+(o(c,c)+v|0)|0;if(v>>>0>=E>>>0){break B}c=C>>>0<3;C=C+1|0;if(c){continue}break}break B}C=0;v=0;if(i[B>>2]-s<<1>=(N|0)){i[d+8>>2]=16843009;i[d+12>>2]=16843009;while(1){e=(d+80|0)+(C<<2)|0;c=q+(s-j[e+S|0]|0)|0;f=o(c,c);c=q+(s-j[e+W|0]|0)|0;v=f+(o(c,c)+v|0)|0;if(v>>>0>=E>>>0){break B}c=C>>>0<3;C=C+1|0;if(c){continue}break}break B}while(1){l=C<<1;e=(d+80|0)+(C<<2)|0;n=j[e+W|0]-s|0;c=n<<1;c=j[((((c|0)<(O|0))+((c|0)<(T|0))|0)+((c|0)<(N|0))|0)+297662|0];g[l+(d+8|0)|0]=c;f=(d+8|0)+(l|1)|0;l=j[e+S|0]-s|0;e=l<<1;e=j[((((e|0)<(O|0))+((e|0)<(T|0))|0)+((e|0)<(N|0))|0)+297662|0];g[f|0]=e;c=i[(d+32|0)+(c<<2)>>2]-n|0;f=o(c,c)+v|0;c=i[(d+32|0)+(e<<2)>>2]-l|0;v=f+o(c,c)|0;if(v>>>0>=E>>>0){break B}c=C>>>0<3;C=C+1|0;if(c){continue}break}}c=v>>>0>>0;z=c?P:z;w=c?i[d+8>>2]:w;E=c?v:E;p=c?i[d+12>>2]:p}P=P+1|0;if((P|0)!=8){continue}break}E=j[b+3|0]|z<<(K?2:5);g[b+3|0]=E;a=p;B=a>>>24|0;u=a>>>8|0;t=(a&16777215)<<8|w>>>24;l=(a&255)<<24|w>>>8;r=a>>>16|0;e=a;c=(a&65535)<<16|w>>>16;C:{if(Y){if(K>>>0<2){break C}break a}f=R|1;m=R|2;q=R|3;n=R|4;z=(w&1)<>>1&127)<>>17&127)<>>1&127)<>>17&127)<>>9&127)<>>25<>>9&127)<>>25<>>0>3){break a}f=w;m=W+4|0;q=W+8|0;n=W+12|0;z=(f&1)<>>1&127)<>>9&127)<>>17&127)<>>25<>>1&127)<>>9&127)<>>17&127)<>>25<>>8;h[b+6>>1]=(M<<8&16711680|M<<24)>>>16;break b}A(28208,19512,14079,28219);x()}A(28243,19512,14097,28219);x()}A(28285,19512,14099,28219);x()}A(28243,19512,14120,28219);x()}A(28285,19512,14122,28219);x()}A(28208,19512,14196,28219);x()}A(28243,19512,14220,28219);x()}A(28285,19512,14222,28219);x()}A(28243,19512,14243,28219);x()}A(28285,19512,14245,28219);x()}A(28305,19512,14269,28219);x()}A(28480,19512,14319,28219);x()}A(28519,19512,14327,28219);x()}g[b+5|0]=y;g[b+4|0]=y>>>8;h[b+6>>1]=(F<<8&16711680|F<<24)>>>16}ha=d+320|0;return $}A(28296,19512,14477,28219);x()}function Ba(a,b,c,d){var e=0,f=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;u=ha-48|0;ha=u;a:{n=j[a|0]&127;b:{if((n|0)==69){break b}z=j[n+25568|0];i[b+104>>2]=z;n=i[(z<<3)+21604>>2];c:{if((z|0)==8){c=(n>>>3|0)+a|0;s=n&7;g[b+112|0]=j[c+1|0]<<8-s|j[c|0]>>>s;c=n+8|0;q=(c>>>3|0)+a|0;m=c&7;c=j[q|0]>>>m|0;s=b;if(m){c=c|j[q+1|0]<<8-m}g[s+113|0]=c;c=n+16|0;q=(c>>>3|0)+a|0;m=c&7;c=j[q|0]>>>m|0;if(m){c=c|j[q+1|0]<<8-m}g[s+114|0]=c;c=n+24|0;q=(c>>>3|0)+a|0;m=c&7;c=j[q|0]>>>m|0;if(m){c=c|j[q+1|0]<<8-m}g[s+115|0]=c;f=1;if(!d){break b}g[b+118|0]=0;c=n+32|0;g[b+119|0]=j[(c>>>3|0)+a|0]>>>(c&7)&1;c=n+33|0;d=(c>>>3|0)+a|0;c=c&7;f=j[d|0]>>>c|0;f=c>>>0>=6?j[d+1|0]<<8-c|f:f;i[b+124>>2]=0;i[b+120>>2]=f&7;c=n+36|0;s=(c>>>3|0)+a|0;m=c&7;c=j[s|0]>>>m|0;d=b;if((m|0)==7){c=c|j[s+1|0]<<1}i[d+136>>2]=c&3;c=n+38|0;m=(c>>>3|0)+a|0;s=c&7;c=j[m|0]>>>s|0;if(s>>>0>=4){c=c|j[m+1|0]<<8-s}i[d+140>>2]=c&31;c=n+43|0;m=(c>>>3|0)+a|0;s=c&7;c=j[m|0]>>>s|0;if(s>>>0>=4){c=c|j[m+1|0]<<8-s}i[d+144>>2]=c&31;c=a;a=n+48|0;c=c+(a>>>3|0)|0;a=a&7;e=j[c|0]>>>a|0;e=a>>>0>=4?j[c+1|0]<<8-a|e:e;i[b+128>>2]=0;i[b+132>>2]=0;i[b+148>>2]=e&31;break c}d:{if(d){g[b+116|0]=j[(n>>>3|0)+a|0]>>>(n&7)&1;d=n+1|0;w=7424>>>z&1;if(!w){l=j[(d>>>3|0)+a|0]>>>(d&7)&1;d=n+2|0}g[b+117|0]=l;g[b+118|0]=j[(d>>>3|0)+a|0]>>>(d&7)&1;n=d+1|0;g[b+119|0]=j[(n>>>3|0)+a|0]>>>(n&7)&1;n=d+2|0;if(n>>>0>=112){break a}e=(n>>>3|0)+a|0;B=n&7;n=j[e|0]>>>B|0;q=b;if(B>>>0>=6){n=n|j[e+1|0]<<8-B}i[q+120>>2]=n&7;n=d+5|0;if(n>>>0>=112){break a}e=(n>>>3|0)+a|0;B=n&7;n=j[e|0]>>>B|0;if(B>>>0>=6){n=n|j[e+1|0]<<8-B}i[q+124>>2]=n&7;e=d+8|0;l=0;if(!w){if(e>>>0>=112){break a}B=(e>>>3|0)+a|0;q=e&7;n=j[B|0]>>>q|0;if(q>>>0>=4){n=n|j[B+1|0]<<8-q}l=n&31;e=d+13|0}i[b+128>>2]=l;if(z+ -8>>>0<=9){if(e>>>0>=112){break a}B=(e>>>3|0)+a|0;q=e&7;d=j[B|0]>>>q|0;n=b;if(q){d=d|j[B+1|0]<<8-q}i[n+132>>2]=d&255;e=e+8|0;break d}i[b+132>>2]=0;break d}e=n+j[z+25696|0]|0}C=1;e:{f:{g:{h:{i:{j:{k:{l:{m:{n:{l=z>>>0>16;d=1;o:{if(l){break o}if(!(1<>>0>=112){break a}B=(e>>>3|0)+a|0;q=e&7;d=j[B|0]>>>q|0;n=b;if(q>>>0>=4){d=d|j[B+1|0]<<8-q}i[n+108>>2]=d&31;e=e+5|0;C=0;d=2}B=d;d=0;if(l){break l}if(1<>2];if(d>>>0>18){break b}d=o(d,6)+20194|0;break i}if(e>>>0>=112){break a}B=3;l=(e>>>3|0)+a|0;q=e&7;d=j[l|0]>>>q|0;n=b;if(q>>>0>=5){d=d|j[l+1|0]<<8-q}d=d&15;i[n+108>>2]=d;e=e+4|0;C=0;break j}d=i[b+108>>2];if(d>>>0>29){break b}d=k[o(d,6)+20002>>1]}w=1;switch(z+ -6|0){case 11:break g;case 0:case 5:case 7:break h;default:break e}}d=i[b+108>>2]}if(d>>>0>10){break b}d=o(d,6)+20322|0}d=k[d>>1];w=1;break e}if(e>>>0>=112){break a}f=(e>>>3|0)+a|0;l=e&7;n=j[f|0]>>>l|0;q=b;if((l|0)==7){n=n|j[f+1|0]<<1}i[q+16>>2]=n&3;e=e+2|0;break f}i[b+16>>2]=3}w=2;M=1}i[b+4>>2]=B;g[b+20|0]=M;i[b+8>>2]=d&65535;i[b+12>>2]=j[z+25728|0];i[b>>2]=j[z+21792|0];L=j[z+21920|0];G=o(L,B);y=G<<1;H=j[z+21824|0];v=i[o(H,12)+21952>>2];p:{q:{r:{s:{t:{u:{d=1497965>>>H&1;v:{if(!d){q=3;l=4;n=5;break v}if(1797559>>>H&1){break u}q=5;l=2;n=3}f=l+y|0;p=(f>>>0)/(n>>>0)|0;I=n>>>0>f>>>0;if(I){break s}t=d?7:8;r=p+ -1|0;f=y-o(r,n)|0;if(!d){D=f+ -1|0;E=(D<<2)+297868|0;d=0;while(1){l=(d|0)==(r|0)?8:t;l=(d|0)!=(r|0)|D>>>0>3?l:i[E>>2];if(e>>>0>111){break a}J=(e>>>3|0)+a|0;K=e&7;f=j[J|0]>>>K|0;F=(u+16|0)+(d<<2)|0;K=8-K|0;if(K>>>0>>0){f=f|j[J+1|0]<>2]=(-1<>>H&1){break t}D=(f|0)==1?3:(f|0)==2?5:7;while(1){if(e>>>0>111){break a}E=(e>>>3|0)+a|0;f=e&7;l=j[E|0]>>>f|0;F=(u+16|0)+(d<<2)|0;J=8-f|0;f=(d|0)==(r|0)?D:t;if(J>>>0>>0){l=j[E+1|0]<>2]=l&(-1<>>0>=112){break a}D=(e>>>3|0)+a|0;f=e&7;l=j[D|0]>>>f|0;F=(u+16|0)+(d<<2)|0;E=8-f|0;f=(d|0)==(r|0)?7:t;if(E>>>0>>0){l=j[D+1|0]<>2]=l&(-1<>>0>=112){break p}I=(e>>>3|0)+a|0;D=e&7;y=j[I|0]>>>D|0;D=8-D|0;if((D|0)<(v|0)){y=j[I+1|0]<>>0>=p>>>0){break w}f=i[(u+16|0)+(r<<2)>>2];r=r+1|0;d=n}e=e+v|0;F=f;f=(f>>>0)/(q>>>0)|0;g[(b+l|0)+21|0]=t&y|F-o(q,f)<>>0>111){break p}f=(e>>>3|0)+a|0;l=e&7;n=j[f|0]>>>l|0;y=b+d|0;l=8-l|0;if((l|0)<(v|0)){n=n|j[f+1|0]<>>0<2){break A}d=i[b+108>>2];if((B|0)==3){y=o(d,3)+21488|0;q=(d<<4)+20912|0;break A}if((z|0)==7){y=o(d,3)+21536|0;q=(d<<4)+21088|0;break z}y=o(d,3)+21392|0;q=(d<<4)+20432|0}if((z|0)!=18){break z}f=0;while(1){s=l-!f|0;if(s>>>0<10){t=b+f|0;if(s){m=(e>>>3|0)+a|0;v=e&7;d=j[m|0]>>>v|0;e=e+s|0;v=8-v|0;if((v|0)<(s|0)){d=d|j[m+1|0]<>>0>64){break x}if(v){f=0;while(1){d=v-f|0;n=e&7;p=8-n|0;p=(d|0)<(p|0)?d:p;r=(-1<>>3|0)+a|0]>>>n;d=f;n=d&31;if(32<=(d&63)>>>0){d=r<>>32-n;t=r<>>0>>0){continue}break}}f=-1<>>0?d>>>v|0:((1<>>v);e=a<<1;a=e&31;g[b+41|0]=f&(32<=(e&63)>>>0?d>>>a|0:((1<>>a);a=d;e=e+l|0;d=e&31;g[b+42|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+43|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+44|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+45|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+46|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+47|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+48|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+49|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+50|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+51|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+52|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+53|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+54|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+55|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+56|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+57|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+58|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+59|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+60|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+61|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+62|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+63|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b- -64|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+65|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+66|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+67|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+68|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+69|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);n=e+l|0;a=n&31;g[b+70|0]=f&(32<=(n&63)>>>0?s>>>a|0:((1<>>a);break y}if(C){if(33793>>>z&1){d=m;g[b+39|0]=d&7;a=s;g[b+54|0]=a>>>27&15;g[b+53|0]=a>>>23&15;g[b+52|0]=a>>>19&15;g[b+51|0]=a>>>15&15;g[b+50|0]=a>>>11&15;g[b+49|0]=a>>>7&15;g[b+48|0]=a>>>3&15;g[b+47|0]=((a&2147483647)<<1|d>>>31)&15;g[b+46|0]=d>>>27&15;g[b+45|0]=d>>>23&15;g[b+44|0]=d>>>19&15;g[b+43|0]=d>>>15&15;g[b+42|0]=d>>>11&15;g[b+41|0]=d>>>7&15;g[b+40|0]=d>>>3&15;break y}g[b+39|0]=e&m;d=s;e=a&31;g[b+40|0]=f&(32<=(a&63)>>>0?d>>>e|0:((1<>>e);e=a+l|0;a=e&31;g[b+41|0]=f&(32<=(e&63)>>>0?d>>>a|0:((1<>>a);a=d;e=e+l|0;d=e&31;g[b+42|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+43|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+44|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+45|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+46|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+47|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+48|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+49|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+50|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+51|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+52|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);e=e+l|0;d=e&31;g[b+53|0]=f&(32<=(e&63)>>>0?a>>>d|0:((1<>>d);n=e+l|0;a=n&31;g[b+54|0]=f&(32<=(n&63)>>>0?s>>>a|0:((1<>>a);break y}n=j[y+2|0];v=j[y|0];y=j[y+1|0];p=!n|(!v|!y);g[b+39|0]=(p?e:f)&m;d=s;t=p?a:l;p=t&31;r=(v|0)==1|(y|0)==1|(n|0)==1;g[b+40|0]=(32<=(t&63)>>>0?d>>>p|0:((1<>>p)&(r?e:f);t=t+(r?a:l)|0;r=t;p=r&31;C=(v|0)==2|(y|0)==2|(n|0)==2;g[b+41|0]=(32<=(r&63)>>>0?d>>>p|0:((1<>>p)&(C?e:f);t=r+(C?a:l)|0;p=t&31;r=(v|0)==3|(y|0)==3|(n|0)==3;g[b+42|0]=(32<=(t&63)>>>0?d>>>p|0:((1<>>p)&(r?e:f);t=t+(r?a:l)|0;r=t;p=r&31;C=(v|0)==4|(y|0)==4|(n|0)==4;g[b+43|0]=(32<=(r&63)>>>0?d>>>p|0:((1<>>p)&(C?e:f);t=r+(C?a:l)|0;p=t&31;r=(v|0)==5|(y|0)==5|(n|0)==5;g[b+44|0]=(32<=(t&63)>>>0?d>>>p|0:((1<>>p)&(r?e:f);t=t+(r?a:l)|0;r=t;p=r&31;C=(v|0)==6|(y|0)==6|(n|0)==6;g[b+45|0]=(32<=(r&63)>>>0?d>>>p|0:((1<>>p)&(C?e:f);t=r+(C?a:l)|0;p=t&31;r=(v|0)==7|(y|0)==7|(n|0)==7;g[b+46|0]=(32<=(t&63)>>>0?d>>>p|0:((1<>>p)&(r?e:f);t=t+(r?a:l)|0;r=t;p=r&31;C=(v|0)==8|(y|0)==8|(n|0)==8;g[b+47|0]=(32<=(r&63)>>>0?d>>>p|0:((1<>>p)&(C?e:f);t=r+(C?a:l)|0;p=t&31;r=(v|0)==9|(y|0)==9|(n|0)==9;g[b+48|0]=(32<=(t&63)>>>0?d>>>p|0:((1<>>p)&(r?e:f);t=t+(r?a:l)|0;r=t;p=r&31;C=(v|0)==10|(y|0)==10|(n|0)==10;g[b+49|0]=(32<=(r&63)>>>0?d>>>p|0:((1<>>p)&(C?e:f);t=r+(C?a:l)|0;p=t&31;r=(v|0)==11|(y|0)==11|(n|0)==11;g[b+50|0]=(32<=(t&63)>>>0?d>>>p|0:((1<>>p)&(r?e:f);t=t+(r?a:l)|0;r=t;p=r&31;C=(v|0)==12|(y|0)==12|(n|0)==12;g[b+51|0]=(32<=(r&63)>>>0?d>>>p|0:((1<>>p)&(C?e:f);t=r+(C?a:l)|0;p=t&31;r=(v|0)==13|(y|0)==13|(n|0)==13;g[b+52|0]=(32<=(t&63)>>>0?d>>>p|0:((1<>>p)&(r?e:f);r=t+(r?a:l)|0;p=r&31;C=(v|0)==14|(y|0)==14|(n|0)==14;g[b+53|0]=(32<=(r&63)>>>0?d>>>p|0:((1<>>p)&(C?e:f);d=m;m=r+(C?a:l)|0;a=m&31;g[b+54|0]=(32<=(m&63)>>>0?s>>>a|0:((1<>>a)&((n|0)==15?e:(v|0)==15?e:(y|0)==15?e:f)}if(!c|z+ -15>>>0<3){break c}d=0;g[u+14|0]=0;h[u+12>>1]=0;n=L>>>0>1?L:1;s=b+21|0;c=(H<<9)+308e3|0;f=0;B:{while(1){m=o(d,L);e=m<<1;a=e+s|0;if((j[c+(j[a+3|0]<<1)|0]+j[c+(j[s+(e|1)|0]<<1)|0]|0)+j[c+(j[a+5|0]<<1)|0]>>>0>>0){a=0;while(1){f=a+m<<1;e=f+s|0;z=j[e|0];f=s+(f|1)|0;g[e|0]=j[f|0];g[f|0]=z;a=a+1|0;if((n|0)!=(a|0)){continue}break}f=1;g[(u+12|0)+d|0]=1;d=d+1|0;if((B|0)!=(d|0)){continue}break B}d=d+1|0;if((B|0)!=(d|0)){continue}break}if(!(f&1)){break c}}a=-1<>2]=0;i[f>>2]=0;i[f+4>>2]=0;u=o(c,d);if(u){if(u>>>0>=1073741824){break c}u=u<<2;l=xa(u);i[f>>2]=l;C=l+u|0;i[f+8>>2]=C;ya(l,0,u);i[f+4>>2]=C}qa=d>>>0>1?d:1;oa=c>>>0>1?c:1;pa=f+344|0;e:{while(1){l=o(c,na);h=Ba((l<<4)+a|0,f+232|0,0,0);f:{g:{h:{i:{j:{if(!e){C=0;u=l;if(h){break j}break e}C=0;u=l;if(!h){break e}while(1){Ea(i[f+336>>2],i[f+340>>2],pa,f+232|0,f+160|0);h=j[f+223|0];F=j[f+219|0];K=j[f+215|0];G=j[f+211|0];D=j[f+207|0];p=j[f+203|0];E=j[f+199|0];q=j[f+195|0];L=j[f+191|0];M=j[f+187|0];t=j[f+183|0];s=j[f+179|0];z=j[f+175|0];I=j[f+171|0];J=j[f+167|0];Q=j[f+163|0];n=Q>>>0>J>>>0?J:Q;n=n>>>0>I>>>0?I:n;n=n>>>0>z>>>0?z:n;n=n>>>0>s>>>0?s:n;n=n>>>0>t>>>0?t:n;n=n>>>0>M>>>0?M:n;n=n>>>0>L>>>0?L:n;n=n>>>0>q>>>0?q:n;n=n>>>0>E>>>0?E:n;n=n>>>0>p>>>0?p:n;n=n>>>0>D>>>0?D:n;n=n>>>0>G>>>0?G:n;n=n>>>0>K>>>0?K:n;n=n>>>0>F>>>0?F:n;S=n>>>0>h>>>0?h:n;n=j[S+218144|0];n=j[S+218400|0]<<1|n<<5|n<<10|32768;if(n>>>0>65535){break h}J=Q>>>0>>0?J:Q;I=J>>>0>>0?I:J;z=I>>>0>>0?z:I;s=z>>>0>>0?s:z;t=s>>>0>>0?t:s;M=t>>>0>>0?M:t;L=M>>>0>>0?L:M;q=L>>>0>>0?q:L;E=q>>>0>>0?E:q;p=E>>>0

    >>0?p:E;D=p>>>0>>0?D:p;G=D>>>0>>0?G:D;K=G>>>0>>0?K:G;F=K>>>0>>0?F:K;h=j[(F>>>0>>0?h:F)+218736|0];h=h<<5|h|h<<10|32768;if(h>>>0>=65536){break i}i[i[f>>2]+(u<<2)>>2]=n|h<<16;C=C+1|0;if((oa|0)==(C|0)){break f}u=l+C|0;if(Ba((u<<4)+a|0,f+232|0,0,0)){continue}break}break g}while(1){Ea(i[f+336>>2],i[f+340>>2],pa,f+232|0,f+160|0);h=j[f+222|0];F=j[f+218|0];K=j[f+214|0];G=j[f+210|0];D=j[f+206|0];p=j[f+202|0];E=j[f+198|0];q=j[f+194|0];L=j[f+190|0];M=j[f+186|0];t=j[f+182|0];s=j[f+178|0];z=j[f+174|0];I=j[f+170|0];J=j[f+166|0];Q=j[f+162|0];n=J>>>0>>0?J:Q;n=I>>>0>>0?I:n;n=z>>>0>>0?z:n;n=s>>>0>>0?s:n;n=t>>>0>>0?t:n;n=M>>>0>>0?M:n;n=L>>>0<(n&255)>>>0?L:n;n=q>>>0<(n&255)>>>0?q:n;n=E>>>0<(n&255)>>>0?E:n;n=p>>>0<(n&255)>>>0?p:n;n=D>>>0<(n&255)>>>0?D:n;n=G>>>0<(n&255)>>>0?G:n;n=K>>>0<(n&255)>>>0?K:n;n=F>>>0<(n&255)>>>0?F:n;w=j[((h>>>0<(n&255)>>>0?h:n)&255)+218400|0]<<1;n=j[f+221|0];S=j[f+217|0];Z=j[f+213|0];_=j[f+209|0];$=j[f+205|0];aa=j[f+201|0];ba=j[f+197|0];B=j[f+193|0];m=j[f+189|0];N=j[f+185|0];v=j[f+181|0];ca=j[f+177|0];da=j[f+173|0];ea=j[f+169|0];fa=j[f+165|0];ga=j[f+161|0];y=fa>>>0>>0?fa:ga;y=ea>>>0>>0?ea:y;y=da>>>0>>0?da:y;y=ca>>>0>>0?ca:y;y=v>>>0>>0?v:y;y=N>>>0>>0?N:y;y=m>>>0<(y&255)>>>0?m:y;y=B>>>0<(y&255)>>>0?B:y;y=ba>>>0<(y&255)>>>0?ba:y;y=aa>>>0<(y&255)>>>0?aa:y;y=$>>>0<(y&255)>>>0?$:y;y=_>>>0<(y&255)>>>0?_:y;y=Z>>>0<(y&255)>>>0?Z:y;y=S>>>0<(y&255)>>>0?S:y;ra=w|j[((n>>>0<(y&255)>>>0?n:y)&255)+218144|0]<<5;y=j[f+220|0];ia=j[f+216|0];ja=j[f+212|0];R=j[f+208|0];T=j[f+204|0];U=j[f+200|0];O=j[f+196|0];P=j[f+192|0];V=j[f+188|0];W=j[f+184|0];X=j[f+180|0];H=j[f+176|0];Y=j[f+172|0];ka=j[f+168|0];la=j[f+164|0];ma=j[f+160|0];w=la>>>0>>0?la:ma;w=ka>>>0>>0?ka:w;w=Y>>>0>>0?Y:w;w=H>>>0>>0?H:w;w=X>>>0>>0?X:w;w=W>>>0>>0?W:w;w=V>>>0<(w&255)>>>0?V:w;w=P>>>0<(w&255)>>>0?P:w;w=O>>>0<(w&255)>>>0?O:w;w=U>>>0<(w&255)>>>0?U:w;w=T>>>0<(w&255)>>>0?T:w;w=R>>>0<(w&255)>>>0?R:w;w=ja>>>0<(w&255)>>>0?ja:w;w=ia>>>0<(w&255)>>>0?ia:w;w=ra|j[((y>>>0<(w&255)>>>0?y:w)&255)+218144|0]<<10|32768;if(w>>>0>=65536){break h}J=Q>>>0>>0?J:Q;I=J>>>0>>0?I:J;z=I>>>0>>0?z:I;s=z>>>0>>0?s:z;t=s>>>0>>0?t:s;M=t>>>0>>0?M:t;L=(M&255)>>>0>>0?L:M;q=(L&255)>>>0>>0?q:L;E=(q&255)>>>0>>0?E:q;p=(E&255)>>>0

    >>0?p:E;D=(p&255)>>>0>>0?D:p;G=(D&255)>>>0>>0?G:D;K=(G&255)>>>0>>0?K:G;F=(K&255)>>>0>>0?F:K;s=j[(((F&255)>>>0>>0?h:F)&255)+218736|0];h=ga>>>0>>0?fa:ga;h=h>>>0>>0?ea:h;h=h>>>0>>0?da:h;h=h>>>0>>0?ca:h;h=h>>>0>>0?v:h;h=h>>>0>>0?N:h;h=(h&255)>>>0>>0?m:h;h=(h&255)>>>0>>0?B:h;h=(h&255)>>>0>>0?ba:h;h=(h&255)>>>0>>0?aa:h;h=(h&255)>>>0<$>>>0?$:h;h=(h&255)>>>0<_>>>0?_:h;h=(h&255)>>>0>>0?Z:h;h=(h&255)>>>0>>0?S:h;m=s|j[(((h&255)>>>0>>0?n:h)&255)+218736|0]<<5;h=ma>>>0>>0?la:ma;h=h>>>0>>0?ka:h;h=h>>>0>>0?Y:h;h=h>>>0>>0?H:h;h=h>>>0>>0?X:h;h=h>>>0>>0?W:h;h=(h&255)>>>0>>0?V:h;h=(h&255)>>>0

    >>0?P:h;h=(h&255)>>>0>>0?O:h;h=(h&255)>>>0>>0?U:h;h=(h&255)>>>0>>0?T:h;h=(h&255)>>>0>>0?R:h;h=(h&255)>>>0>>0?ja:h;h=(h&255)>>>0>>0?ia:h;h=m|j[(((h&255)>>>0>>0?y:h)&255)+218736|0]<<10|32768;if(h>>>0>=65536){break i}i[i[f>>2]+(u<<2)>>2]=w|h<<16;C=C+1|0;if((oa|0)==(C|0)){break f}u=l+C|0;if(Ba((u<<4)+a|0,f+232|0,0,0)){continue}break}break g}A(218689,19512,3123,218706);x()}A(218689,19512,3092,218115);x()}if(C>>>0>>0){break e}}na=na+1|0;if((qa|0)!=(na|0)){continue}break}if((d|0)<1){break e}S=c+ -1|0;u=S?32-r(S)|0:0;_=d+ -1|0;l=_?32-r(_)|0:0;$=u>>>0>>0?u:l;aa=$<<1;ca=-1<>2];da=f+344|0;ea=(S&1)<<2;Z=0;Q=0;while(1){K=Q+ -1|0;u=0;k:{while(1){h=u<<2;C=ba+(o(_&u+K,c)<<2)|0;i[h+(f+84|0)>>2]=C;l=i[C+(S<<2)>>2];if(!(l&32768)){break a}F=h+(f+160|0)|0;G=l&30;i[F>>2]=(o(((l>>>10&31)+(l>>>5&31)|0)+(G>>>4|G)|0,255)>>>0)/31;l:{if((l|0)>=0){break l}h=h+(f+96|0)|0;i[h>>2]=(o(((l>>>26&31)+(l>>>21&31)|0)+(l>>>16&31)|0,255)>>>0)/31;l=i[C>>2];if(!(l&32768)){break a}G=l&30;i[F+16>>2]=(o(((l>>>10&31)+(l>>>5&31)|0)+(G>>>4|G)|0,255)>>>0)/31;if((l|0)>-1){break l}i[h+16>>2]=(o(((l>>>26&31)+(l>>>21&31)|0)+(l>>>16&31)|0,255)>>>0)/31;l=i[C+ea>>2];if(!(l&32768)){break a}C=l&30;i[F+32>>2]=(o(((l>>>10&31)+(l>>>5&31)|0)+(C>>>4|C)|0,255)>>>0)/31;if((l|0)>-1){break l}i[h+32>>2]=(o(((l>>>26&31)+(l>>>21&31)|0)+(l>>>16&31)|0,255)>>>0)/31;u=u+1|0;if((u|0)==3){break k}continue}break}break b}if((c|0)>=1){fa=k[((Q&255)<<1)+295296>>1]|k[(Q>>>7&33554430)+295296>>1]<<16;ga=Q>>>$<>2];I=i[f+104>>2];u=i[f+184>>2];J=i[f+168>>2];D=i[f+116>>2];p=i[f+100>>2];L=i[f+112>>2];t=i[f+96>>2];E=i[f+180>>2];q=i[f+164>>2];M=i[f+176>>2];s=i[f+160>>2];y=i[f+92>>2];ia=i[f+88>>2];ja=i[f+84>>2];m:{while(1){if(Ba((Z<<4)+a|0,f+232|0,0,0)){Ea(i[f+336>>2],i[f+340>>2],da,f+232|0,f+16|0)}if(e){l=j[f+19|0];g[f+19|0]=255;g[f+18|0]=l;g[f+17|0]=l;g[f+16|0]=l;l=j[f+23|0];g[f+23|0]=255;g[f+22|0]=l;g[f+21|0]=l;g[f+20|0]=l;l=j[f+27|0];g[f+27|0]=255;g[f+26|0]=l;g[f+25|0]=l;g[f+24|0]=l;l=j[f+31|0];g[f+31|0]=255;g[f+30|0]=l;g[f+29|0]=l;g[f+28|0]=l;l=j[f+35|0];g[f+35|0]=255;g[f+34|0]=l;g[f+33|0]=l;g[f+32|0]=l;l=j[f+39|0];g[f+39|0]=255;g[f+38|0]=l;g[f+37|0]=l;g[f+36|0]=l;l=j[f+43|0];g[f+43|0]=255;g[f+42|0]=l;g[f+41|0]=l;g[f+40|0]=l;l=j[f+47|0];g[f+47|0]=255;g[f+46|0]=l;g[f+45|0]=l;g[f+44|0]=l;l=j[f+51|0];g[f+51|0]=255;g[f+50|0]=l;g[f+49|0]=l;g[f+48|0]=l;l=j[f+55|0];g[f+55|0]=255;g[f+54|0]=l;g[f+53|0]=l;g[f+52|0]=l;l=j[f+59|0];g[f+59|0]=255;g[f+58|0]=l;g[f+57|0]=l;g[f+56|0]=l;l=j[f+63|0];g[f+63|0]=255;g[f+62|0]=l;g[f+61|0]=l;g[f+60|0]=l;l=j[f+67|0];g[f+67|0]=255;g[f+66|0]=l;g[f+65|0]=l;g[f+64|0]=l;l=j[f+71|0];g[f+71|0]=255;g[f+70|0]=l;g[f+69|0]=l;g[f+68|0]=l;l=j[f+75|0];g[f+75|0]=255;g[f+74|0]=l;g[f+73|0]=l;g[f+72|0]=l;l=j[f+79|0];g[f+79|0]=255;g[f+78|0]=l;g[f+77|0]=l;g[f+76|0]=l}h=M;l=E;F=L;C=D;K=u;G=z;E=fa|k[(n>>>7&33554430)+295296>>1]<<17|k[((n&255)<<1)+295296>>1]<<1;u=E;n:{if((c|0)==(d|0)){break n}E=E&ca;u=E|n>>>$<>>0>d>>>0){break n}u=E|ga}B=(u<<3)+b|0;i[B+4>>2]=i[ba+(Z<<2)>>2];n=n+1|0;z=(S&n)<<2;u=i[z+ja>>2];if(u&32768){D=u&30;M=(o(((u>>>10&31)+(u>>>5&31)|0)+(D>>>4|D)|0,255)>>>0)/31|0;if((u|0)>=0){break b}L=(o(((u>>>26&31)+(u>>>21&31)|0)+(u>>>16&31)|0,255)>>>0)/31|0;u=i[z+ia>>2];if(!(u&32768)){break a}D=u&30;E=(o(((u>>>10&31)+(u>>>5&31)|0)+(D>>>4|D)|0,255)>>>0)/31|0;if((u|0)>=0){break b}D=(o(((u>>>26&31)+(u>>>21&31)|0)+(u>>>16&31)|0,255)>>>0)/31|0;z=i[y+z>>2];if(!(z&32768)){break a}u=z&30;u=(o(((z>>>10&31)+(z>>>5&31)|0)+(u>>>4|u)|0,255)>>>0)/31|0;if((z|0)>=0){break b}w=B;R=o(l,6);T=R+o(h,6)|0;B=T+(q+s<<1)|0;m=(j[f+22|0]+(j[f+21|0]+j[f+20|0]|0)<<4)-B<<4;U=o(C,6);O=U+o(F,6)|0;N=O+(p+t<<1)|0;v=(N|0)<(B|0);m=v?0-m|0:m;B=N-B|0;B=v?0-B|0:B;Y=(m|0)>(o(B,13)|0)?12:(m|0)>B<<3?8:((m|0)>(o(B,3)|0))<<2;P=h+s|0;B=l+q|0;m=P+B<<2;N=(j[f+18|0]+(j[f+17|0]+j[f+16|0]|0)<<4)-m<<4;v=0-N|0;H=N;V=t+F|0;N=p+C|0;W=V+N<<2;X=(W|0)<(m|0);v=X?v:H;m=W-m|0;m=X?0-m|0:m;H=Y|((v|0)>(o(m,13)|0)?3:(v|0)>m<<3?2:(v|0)>(o(m,3)|0));m=(R+o(q,6)|0)+(P<<1)|0;v=(j[f+34|0]+(j[f+33|0]+j[f+32|0]|0)<<4)-m<<4;R=(U+o(p,6)|0)+(V<<1)|0;U=(R|0)<(m|0);v=U?0-v|0:v;m=R-m|0;m=U?0-m|0:m;Y=H|((v|0)>(o(m,13)|0)?768:(v|0)>m<<3?512:((v|0)>(o(m,3)|0))<<8);P=o(h,3);R=o(l,9);U=R+o(q,3)|0;s=P+(U+s|0)|0;m=(j[f+38|0]+(j[f+37|0]+j[f+36|0]|0)<<4)-s<<4;ka=0-m|0;H=m;X=o(F,3);V=o(C,9);W=V+o(p,3)|0;m=X+(W+t|0)|0;v=(m|0)<(s|0);t=v?ka:H;s=m-s|0;s=v?0-s|0:s;H=Y|((t|0)>(o(s,13)|0)?3072:(t|0)>s<<3?2048:((t|0)>(o(s,3)|0))<<10);t=l+h<<3;s=(j[f+26|0]+(j[f+25|0]+j[f+24|0]|0)<<4)-t<<4;m=C+F<<3;v=(m|0)<(t|0);s=v?0-s|0:s;t=m-t|0;t=v?0-t|0:t;H=H|((s|0)>(o(t,13)|0)?48:(s|0)>t<<3?32:((s|0)>(o(t,3)|0))<<4);t=(T+(M<<1)|0)+(E<<1)|0;s=(j[f+30|0]+(j[f+29|0]+j[f+28|0]|0)<<4)-t<<4;m=(O+(L<<1)|0)+(D<<1)|0;v=(m|0)<(t|0);s=v?0-s|0:s;t=m-t|0;t=v?0-t|0:t;Y=H|((s|0)>(o(t,13)|0)?192:(s|0)>t<<3?128:((s|0)>(o(t,3)|0))<<6);t=o(l,12);m=t+(h<<2)|0;s=(j[f+42|0]+(j[f+41|0]+j[f+40|0]|0)<<4)-m<<4;v=0-s|0;H=s;s=o(C,12);T=s+(F<<2)|0;O=(T|0)<(m|0);v=O?v:H;m=T-m|0;m=O?0-m|0:m;H=Y|((v|0)>(o(m,13)|0)?12288:(v|0)>m<<3?8192:((v|0)>(o(m,3)|0))<<12);R=R+o(E,3)|0;m=(R+P|0)+M|0;v=(j[f+46|0]+(j[f+45|0]+j[f+44|0]|0)<<4)-m<<4;T=V+o(D,3)|0;O=(T+X|0)+L|0;P=(O|0)<(m|0);v=P?0-v|0:v;m=O-m|0;m=P?0-m|0:m;H=H|((v|0)>(o(m,13)|0)?49152:(v|0)>m<<3?32768:((v|0)>(o(m,3)|0))<<14);m=B<<3;v=(j[f+50|0]+(j[f+49|0]+j[f+48|0]|0)<<4)-m<<4;O=N<<3;P=(O|0)<(m|0);v=P?0-v|0:v;m=O-m|0;m=P?0-m|0:m;O=H|((v|0)>(o(m,13)|0)?196608:(v|0)>m<<3?131072:((v|0)>(o(m,3)|0))<<16);q=t+(q<<2)|0;m=(j[f+54|0]+(j[f+53|0]+j[f+52|0]|0)<<4)-q<<4;P=0-m|0;H=m;m=s+(p<<2)|0;v=(m|0)<(q|0);p=v?P:H;q=m-q|0;q=v?0-q|0:q;H=O|((p|0)>(o(q,13)|0)?786432:(p|0)>q<<3?524288:((p|0)>(o(q,3)|0))<<18);p=o(B,6)+(K+J<<1)|0;q=(j[f+66|0]+(j[f+65|0]+j[f+64|0]|0)<<4)-p<<4;B=o(N,6)+(G+I<<1)|0;m=(B|0)<(p|0);q=m?0-q|0:q;p=B-p|0;p=m?0-p|0:p;N=H|((q|0)>(o(p,13)|0)?50331648:(q|0)>p<<3?33554432:((q|0)>(o(p,3)|0))<<24);m=J;J=o(K,3);p=U+(m+J|0)|0;q=(j[f+70|0]+(j[f+69|0]+j[f+68|0]|0)<<4)-p<<4;m=I;I=o(G,3);B=W+(m+I|0)|0;m=(B|0)<(p|0);q=m?0-q|0:q;p=B-p|0;p=m?0-p|0:p;N=N|((q|0)>(o(p,13)|0)?201326592:(q|0)>p<<3?134217728:((q|0)>(o(p,3)|0))<<26);p=j[f+58|0]+(j[f+57|0]+(j[f+56|0]-l|0)|0)<<8;q=C<<4;B=l<<4;m=(q|0)<(B|0);p=m?0-p|0:p;q=q-B|0;q=m?0-q|0:q;N=N|((p|0)>(o(q,13)|0)?3145728:(p|0)>q<<3?2097152:((p|0)>(o(q,3)|0))<<20);p=t+(E<<2)|0;q=(j[f+62|0]+(j[f+61|0]+j[f+60|0]|0)<<4)-p<<4;B=s+(D<<2)|0;m=(B|0)<(p|0);q=m?0-q|0:q;p=B-p|0;p=m?0-p|0:p;m=N|((q|0)>(o(p,13)|0)?12582912:(q|0)>p<<3?8388608:((q|0)>(o(p,3)|0))<<22);p=t+(K<<2)|0;q=(j[f+74|0]+(j[f+73|0]+j[f+72|0]|0)<<4)-p<<4;t=s+(G<<2)|0;s=(t|0)<(p|0);q=s?0-q|0:q;p=t-p|0;p=s?0-p|0:p;m=m|((q|0)>(o(p,13)|0)?805306368:(q|0)>p<<3?536870912:((q|0)>(o(p,3)|0))<<28);p=(J+R|0)+u|0;q=(j[f+78|0]+(j[f+77|0]+j[f+76|0]|0)<<4)-p<<4;z=(o(((z>>>26&31)+(z>>>21&31)|0)+(z>>>16&31)|0,255)>>>0)/31|0;t=z+(I+T|0)|0;s=(t|0)<(p|0);q=s?0-q|0:q;p=t-p|0;p=s?0-p|0:p;i[w>>2]=m|((q|0)>(o(p,13)|0)?-1073741824:(q|0)>p<<3?-2147483648:((q|0)>(o(p,3)|0))<<30);Z=Z+1|0;I=G;J=K;p=C;t=F;q=l;s=h;if((c|0)==(n|0)){break m}continue}break}break a}i[f+128>>2]=L;i[f+192>>2]=M;i[f+196>>2]=E;i[f+132>>2]=D;i[f+200>>2]=u;i[f+136>>2]=z;i[f+176>>2]=M;i[f+160>>2]=s;i[f+180>>2]=E;i[f+164>>2]=q;i[f+112>>2]=L;i[f+96>>2]=t;i[f+116>>2]=D;i[f+100>>2]=p;i[f+184>>2]=u;i[f+168>>2]=J;i[f+120>>2]=z;i[f+104>>2]=I}Q=Q+1|0;if((Q|0)!=(d|0)){continue}break}}a=i[f>>2];if(a){i[f+4>>2]=a;wa(a)}}ha=f+384|0;return}Ja();x()}A(296960,19512,3319,296999);x()}A(296960,19512,3304,296976);x()}function kc(a,b){var c=0,d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0;h=ha-112|0;ha=h;o=i[b>>2];s=j[o+25056|0];u=o+ -4|0;k=22800;a:{if(u>>>0<3){break a}c=i[b+4>>2]<<4;k=c+22816|0;if(138>>>o&1){break a}k=c+23840|0}c=b;d=i[c+12>>2];i[h+96>>2]=i[c+8>>2];i[h+100>>2]=d;d=i[c+20>>2];i[h+104>>2]=i[c+16>>2];i[h+108>>2]=d;d=i[c+36>>2];i[h+88>>2]=i[c+32>>2];i[h+92>>2]=d;d=i[c+28>>2];i[h+80>>2]=i[c+24>>2];i[h+84>>2]=d;i[h+72>>2]=j[c+48|0]|j[c+49|0]<<8|(j[c+50|0]<<16|j[c+51|0]<<24);d=j[c+44|0]|j[c+45|0]<<8|(j[c+46|0]<<16|j[c+47|0]<<24);i[h+64>>2]=j[c+40|0]|j[c+41|0]<<8|(j[c+42|0]<<16|j[c+43|0]<<24);i[h+68>>2]=d;i[h+56>>2]=j[c+60|0]|j[c+61|0]<<8|(j[c+62|0]<<16|j[c+63|0]<<24);d=j[c+56|0]|j[c+57|0]<<8|(j[c+58|0]<<16|j[c+59|0]<<24);i[h+48>>2]=j[c+52|0]|j[c+53|0]<<8|(j[c+54|0]<<16|j[c+55|0]<<24);i[h+52>>2]=d;d=i[c+84>>2];i[h+32>>2]=i[c+80>>2];i[h+36>>2]=d;d=i[c+76>>2];i[h+24>>2]=i[c+72>>2];i[h+28>>2]=d;d=i[c+68>>2];i[h+16>>2]=i[c+64>>2];i[h+20>>2]=d;i[h+8>>2]=-1;i[h>>2]=-1;i[h+4>>2]=-1;v=s>>>0>1?s:1;n=o&-3;p=i[c+88>>2];d=1<>>1|0;w=o&-2;y=(w|0)!=4;z=o+25088|0;while(1){l=e<<2;m=l+h|0;if(e){f=i[b+4>>2]+24928|0;b:{if(!((e|0)!=1|n)){break b}c=i[b+4>>2];f=c+24992|0;if(!((e|0)!=2|n)){break b}f=c+24864|0}c=j[f|0]}else{c=0}i[m>>2]=c;c:{if(q&j[c+(h+96|0)|0]){if(j[k|0]==(e|0)){g[h+96|0]=d+(j[h+96|0]^-1)}if(j[k+1|0]==(e|0)){g[h+97|0]=d+(j[h+97|0]^-1)}if(j[k+2|0]==(e|0)){g[h+98|0]=d+(j[h+98|0]^-1)}if(j[k+3|0]==(e|0)){g[h+99|0]=d+(j[h+99|0]^-1)}if(j[k+4|0]==(e|0)){g[h+100|0]=d+(j[h+100|0]^-1)}if(j[k+5|0]==(e|0)){g[h+101|0]=d+(j[h+101|0]^-1)}if(j[k+6|0]==(e|0)){g[h+102|0]=d+(j[h+102|0]^-1)}if(j[k+7|0]==(e|0)){g[h+103|0]=d+(j[h+103|0]^-1)}if(j[k+8|0]==(e|0)){g[h+104|0]=d+(j[h+104|0]^-1)}if(j[k+9|0]==(e|0)){g[h+105|0]=d+(j[h+105|0]^-1)}if(j[k+10|0]==(e|0)){g[h+106|0]=d+(j[h+106|0]^-1)}if(j[k+11|0]==(e|0)){g[h+107|0]=d+(j[h+107|0]^-1)}if(j[k+12|0]==(e|0)){g[h+108|0]=d+(j[h+108|0]^-1)}if(j[k+13|0]==(e|0)){g[h+109|0]=d+(j[h+109|0]^-1)}if(j[k+14|0]==(e|0)){g[h+110|0]=d+(j[h+110|0]^-1)}if(j[k+15|0]==(e|0)){g[h+111|0]=d+(j[h+111|0]^-1)}d:{if((w|0)!=4){m=l+(h- -64|0)|0;r=j[m|0]|j[m+1|0]<<8|(j[m+2|0]<<16|j[m+3|0]<<24);f=l+(h+48|0)|0;t=j[f|0]|j[f+1|0]<<8|(j[f+2|0]<<16|j[f+3|0]<<24);g[m|0]=t;g[m+1|0]=t>>>8;g[m+2|0]=t>>>16;g[m+3|0]=t>>>24;g[f|0]=r;g[f+1|0]=r>>>8;g[f+2|0]=r>>>16;g[f+3|0]=r>>>24;break d}m=l+(h- -64|0)|0;r=j[m|0];f=l+(h+48|0)|0;g[m|0]=j[f|0];g[f|0]=r;r=j[m+1|0]|j[m+2|0]<<8;t=j[f+1|0]|j[f+2|0]<<8;g[m+1|0]=t;g[m+2|0]=t>>>8;g[f+1|0]=r;g[f+2|0]=r>>>8}if((o|0)==1){break c}m=(h+16|0)+(e<<3)|0;B=m,C=Zd(i[m>>2],i[m+4>>2],32),i[B>>2]=C;i[m+4>>2]=ia}if(y){break c}f=j[c+(h+80|0)|0];c=1<>>1)){break c}if(j[k|0]==(e|0)){g[h+80|0]=c+(j[h+80|0]^-1)}if(j[k+1|0]==(e|0)){g[h+81|0]=c+(j[h+81|0]^-1)}if(j[k+2|0]==(e|0)){g[h+82|0]=c+(j[h+82|0]^-1)}if(j[k+3|0]==(e|0)){g[h+83|0]=c+(j[h+83|0]^-1)}if(j[k+4|0]==(e|0)){g[h+84|0]=c+(j[h+84|0]^-1)}if(j[k+5|0]==(e|0)){g[h+85|0]=c+(j[h+85|0]^-1)}if(j[k+6|0]==(e|0)){g[h+86|0]=c+(j[h+86|0]^-1)}if(j[k+7|0]==(e|0)){g[h+87|0]=c+(j[h+87|0]^-1)}if(j[k+8|0]==(e|0)){g[h+88|0]=c+(j[h+88|0]^-1)}if(j[k+9|0]==(e|0)){g[h+89|0]=c+(j[h+89|0]^-1)}if(j[k+10|0]==(e|0)){g[h+90|0]=c+(j[h+90|0]^-1)}if(j[k+11|0]==(e|0)){g[h+91|0]=c+(j[h+91|0]^-1)}if(j[k+12|0]==(e|0)){g[h+92|0]=c+(j[h+92|0]^-1)}if(j[k+13|0]==(e|0)){g[h+93|0]=c+(j[h+93|0]^-1)}if(j[k+14|0]==(e|0)){g[h+94|0]=c+(j[h+94|0]^-1)}if(j[k+15|0]==(e|0)){g[h+95|0]=c+(j[h+95|0]^-1)}c=l+(h- -64|0)|0;m=j[c+3|0];f=c;c=l+(h+48|0)|0;g[f+3|0]=j[c+3|0];g[c+3|0]=m}e=e+1|0;if((v|0)!=(e|0)){continue}break}g[a|0]=0;g[a+1|0]=0;g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;g[a+8|0]=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;e:{e=o+1|0;f:{if(e>>>0>32){break f}c=1<>>0){k=0;d=0}else{k=0;d=d>>>m|0}if(d|k){break f}g:{if(!e){e=0;break g}while(1){d=(k>>>3|0)+a|0;l=d;f=j[d|0];d=k&7;g[l|0]=f|c<>>0>>0?k:e;k=l+d|0;c=c>>>d|0;e=e-d|0;if(e){continue}break}if(k>>>0>=129){break e}d=(o&-2)==4;h:{if(!d){e=k;break h}l=i[b+92>>2];if(l>>>0>=4){break f}c=2;e=k;while(1){k=(e>>>3|0)+a|0;f=k;m=j[k|0];k=e&7;g[f|0]=m|l<>>0>>0?e:c;e=f+k|0;l=l>>>k|0;c=c-k|0;if(c){continue}break}if(e>>>0>=129){break e}}if((o|0)==4){c=i[b+88>>2];if(c>>>0>=2){break f}k=(e>>>3|0)+a|0;g[k|0]=j[k|0]|c<<(e&7);if(e>>>0>=128){break e}e=e+1|0}k=d}i:{if(u>>>0>=3){l=i[b+4>>2];d=l;m=142>>>o&1;c=m?6:4;f=c&31;if(32<=(c&63)>>>0){c=0;d=0}else{c=0;d=d>>>f|0}if(d|c){break f}c=m?6:4;while(1){d=(e>>>3|0)+a|0;f=d;m=j[d|0];d=e&7;g[f|0]=m|l<>>0>>0?e:c;e=f+d|0;l=l>>>d|0;c=c-d|0;if(c){continue}break}if(e>>>0>=129){break e}}t=s>>>0>1?s:1;u=o>>>0>3?4:3;r=0;v=o+25080|0;p=o+25072|0;j:{while(1){k:{l:{if((r|0)!=3){d=j[p|0];m=d;s=0;while(1){c=d;n=s<<2;l=j[(n+(h- -64|0)|0)+r|0];q=l;f=m;w=f&31;if(32<=(f&63)>>>0){f=0;q=0}else{f=0;q=q>>>w|0}if(q|f){break f}while(1){f=(e>>>3|0)+a|0;q=f;w=j[f|0];f=e&7;g[q|0]=w|l<>>0>>0?e:c;e=q+f|0;l=l>>>f|0;c=c-f|0;if(c){continue}break}if(e>>>0>=129){break e}c=d;l=j[(n+(h+48|0)|0)+r|0];n=l;f=m;q=f&31;if(32<=(f&63)>>>0){f=0;n=0}else{f=0;n=n>>>q|0}if(n|f){break j}while(1){f=(e>>>3|0)+a|0;n=f;q=j[f|0];f=e&7;g[n|0]=q|l<>>0>>0?e:c;e=n+f|0;l=l>>>f|0;c=c-f|0;if(c){continue}break}if(e>>>0>=129){break k}s=s+1|0;if((t|0)!=(s|0)){continue}break}break l}m=g[v|0];d=m;s=0;while(1){n=s<<2;l=j[(n+(h- -64|0)|0)+3|0];q=l;c=d;w=c&31;if(32<=(c&63)>>>0){f=0;q=0}else{f=0;q=q>>>w|0}if(q|f){break f}q=o>>>0<4;m:{if(q){f=j[(n+(h+48|0)|0)+3|0];l=d&31;if(32<=(c&63)>>>0){c=0;l=0}else{c=0;l=f>>>l|0}if(l|c){break j}break m}c=m;while(1){f=(e>>>3|0)+a|0;w=f;y=j[f|0];f=e&7;g[w|0]=y|l<>>0>>0?e:c;e=w+f|0;l=l>>>f|0;c=c-f|0;if(c){continue}break}if(e>>>0>128){break e}l=j[(n+(h+48|0)|0)+3|0];f=l;c=d;n=c&31;if(32<=(c&63)>>>0){c=0;f=0}else{c=0;f=f>>>n|0}if(f|c){break j}if(q){break m}c=m;while(1){f=(e>>>3|0)+a|0;n=f;q=j[f|0];f=e&7;g[n|0]=q|l<>>0>>0?e:c;e=n+f|0;l=l>>>f|0;c=c-f|0;if(c){continue}break}if(e>>>0>=129){break k}}s=s+1|0;if((t|0)!=(s|0)){continue}break}}r=r+1|0;if((u|0)!=(r|0)){continue}break i}break}break e}break f}n:{if(52>>>o&1){break n}c=0;if((o|0)==1){while(1){d=i[(h+16|0)+(c<<3)>>2];if(d>>>0>1){break f}m=(e>>>3|0)+a|0;g[m|0]=j[m|0]|d<<(e&7);e=e+1|0;if(e>>>0>128){break e}c=c+1|0;if((t|0)!=(c|0)){continue}break n}}while(1){m=(h+16|0)+(c<<3)|0;d=i[m>>2];if(d>>>0>=2){break f}f=(e>>>3|0)+a|0;g[f|0]=j[f|0]|d<<(e&7);d=e+1|0;if(d>>>0>=129){break e}m=i[m+4>>2];if(m>>>0>=2){break f}f=(d>>>3|0)+a|0;g[f|0]=j[f|0]|m<<(d&7);e=e+2|0;if(e>>>0>=129){break e}c=c+1|0;if((t|0)!=(c|0)){continue}break}}t=0;m=i[h+8>>2];s=i[h+4>>2];r=i[h>>2];u=o+25064|0;v=o+25088|0;while(1){n=t<<2;c=i[b+88>>2];o:{if(c){l=h+80|0;d=j[v|0]-c|0;break o}l=h+96|0;d=j[u|0]}c=d-((n|0)==(r|0)|(n|0)==(s|0)|(m|0)==(n|0))|0;if(c>>>0>32){break f}l=j[l+n|0];p=l;q=c&31;if(32<=(c&63)>>>0){f=0;d=0}else{f=0;d=p>>>q|0}if(d|f){break f}if(c){while(1){d=(e>>>3|0)+a|0;f=d;p=j[d|0];d=e&7;g[f|0]=p|l<>>0>>0?e:c;e=f+d|0;l=l>>>d|0;c=c-d|0;if(c){continue}break}if(e>>>0>=129){break e}}f=n|1;c=i[b+88>>2];p:{if(c){d=h+80|0;l=j[v|0]-c|0;break p}d=h+96|0;l=j[u|0]}c=l-((f|0)==(r|0)|(f|0)==(s|0)|(f|0)==(m|0))|0;if(c>>>0>32){break f}l=j[d+f|0];p=l;q=c&31;if(32<=(c&63)>>>0){f=0;d=0}else{f=0;d=p>>>q|0}if(d|f){break f}if(c){while(1){d=(e>>>3|0)+a|0;f=d;p=j[d|0];d=e&7;g[f|0]=p|l<>>0>>0?e:c;e=f+d|0;l=l>>>d|0;c=c-d|0;if(c){continue}break}if(e>>>0>128){break e}}f=n|2;c=i[b+88>>2];q:{if(c){d=h+80|0;l=j[v|0]-c|0;break q}d=h+96|0;l=j[u|0]}c=l-((f|0)==(r|0)|(f|0)==(s|0)|(f|0)==(m|0))|0;if(c>>>0>32){break f}l=j[d+f|0];p=l;q=c&31;if(32<=(c&63)>>>0){f=0;d=0}else{f=0;d=p>>>q|0}if(d|f){break f}if(c){while(1){d=(e>>>3|0)+a|0;f=d;p=j[d|0];d=e&7;g[f|0]=p|l<>>0>>0?e:c;e=f+d|0;l=l>>>d|0;c=c-d|0;if(c){continue}break}if(e>>>0>128){break e}}f=n|3;c=i[b+88>>2];r:{if(c){d=h+80|0;l=j[v|0]-c|0;break r}d=h+96|0;l=j[u|0]}c=l-((f|0)==(r|0)|(f|0)==(s|0)|(f|0)==(m|0))|0;if(c>>>0>32){break f}l=j[d+f|0];n=l;p=c&31;if(32<=(c&63)>>>0){f=0;d=0}else{f=0;d=n>>>p|0}if(d|f){break f}if(c){while(1){d=(e>>>3|0)+a|0;p=d;n=j[d|0];d=e&7;g[p|0]=n|l<>>0>>0?e:c;e=p+d|0;l=l>>>d|0;c=c-d|0;if(c){continue}break}if(e>>>0>128){break e}}t=t+1|0;if((t|0)!=4){continue}break}s:{if(k){t=0;n=o+25088|0;u=o+25064|0;while(1){o=t<<2;c=i[b+88>>2];t:{if(!c){l=h+80|0;d=j[n|0];break t}l=h+96|0;d=c+j[u|0]|0}c=d-((o|0)==(r|0)|(o|0)==(s|0)|(m|0)==(o|0))|0;if(c>>>0>32){break s}l=j[l+o|0];d=l;v=c&31;if(32<=(c&63)>>>0){d=0}else{d=d>>>v|0}if(d|f){break s}if(c){while(1){k=(e>>>3|0)+a|0;d=k;p=j[k|0];k=e&7;g[d|0]=p|l<>>0>>0?e:c;e=d+k|0;l=l>>>k|0;c=c-k|0;if(c){continue}break}if(e>>>0>=129){break e}}k=o|1;c=i[b+88>>2];u:{if(c){d=h+96|0;l=c+j[u|0]|0;break u}d=h+80|0;l=j[n|0]}c=l-((k|0)==(r|0)|(k|0)==(s|0)|(k|0)==(m|0))|0;if(c>>>0>32){break s}l=j[d+k|0];d=l;v=c&31;if(32<=(c&63)>>>0){d=0}else{d=d>>>v|0}if(d|f){break s}if(c){while(1){k=(e>>>3|0)+a|0;d=k;p=j[k|0];k=e&7;g[d|0]=p|l<>>0>>0?e:c;e=d+k|0;l=l>>>k|0;c=c-k|0;if(c){continue}break}if(e>>>0>128){break e}}k=o|2;c=i[b+88>>2];v:{if(c){d=h+96|0;l=c+j[u|0]|0;break v}d=h+80|0;l=j[n|0]}c=l-((k|0)==(r|0)|(k|0)==(s|0)|(k|0)==(m|0))|0;if(c>>>0>32){break s}l=j[d+k|0];d=l;v=c&31;if(32<=(c&63)>>>0){d=0}else{d=d>>>v|0}if(d|f){break s}if(c){while(1){k=(e>>>3|0)+a|0;d=k;p=j[k|0];k=e&7;g[d|0]=p|l<>>0>>0?e:c;e=d+k|0;l=l>>>k|0;c=c-k|0;if(c){continue}break}if(e>>>0>128){break e}}k=o|3;c=i[b+88>>2];w:{if(c){d=h+96|0;l=c+j[u|0]|0;break w}d=h+80|0;l=j[n|0]}c=l-((k|0)==(r|0)|(k|0)==(s|0)|(k|0)==(m|0))|0;if(c>>>0>32){break s}l=j[d+k|0];d=l;o=c&31;if(32<=(c&63)>>>0){d=0}else{d=d>>>o|0}if(d|f){break s}if(c){while(1){k=(e>>>3|0)+a|0;d=k;p=j[k|0];k=e&7;g[d|0]=p|l<>>0>>0?e:c;e=d+k|0;l=l>>>k|0;c=c-k|0;if(c){continue}break}if(e>>>0>128){break e}}t=t+1|0;if((t|0)!=4){continue}break}}if((e|0)==128){ha=h+112|0;return}A(25096,19512,11716,25115);x()}}A(297318,19512,11537,297365);x()}A(297384,19512,11546,297365);x()}function sc(a,b,c,d){var e=0,f=0,g=0,h=0,l=0,m=0,n=0,p=0,q=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ia=0,ja=0,ka=0,la=0;f=ha-384|0;ha=f;a:{b:{c:{d:{e:{f:{g:{if(!c|!d){break g}if((Xd(c<<2)|0)!=1){break g}if((Xd(d<<2)|0)!=1){break g}i[f+8>>2]=0;i[f>>2]=0;i[f+4>>2]=0;g=o(c,d);if(g){if(g>>>0>=1073741824){break b}B=g<<2;w=xa(B);i[f>>2]=w;g=w+B|0;i[f+8>>2]=g;ya(w,0,B);i[f+4>>2]=g}e=d>>>0>1?d:1;C=c>>>0>1?c:1;y=f+344|0;h:{while(1){m=o(c,F);n=m;K=0;if(!Ba((m<<4)+a|0,f+232|0,0,0)){break h}i:{j:{while(1){Ea(i[f+336>>2],i[f+340>>2],y,f+232|0,f+160|0);q=255;t=0;p=255;s=255;E=255;u=0;G=0;M=0;h=0;while(1){g=(f+160|0)+(t<<2)|0;J=j[g+3|0];u=(u&255)>>>0>>0?J:u;B=j[g+2|0];G=(G&255)>>>0>>0?B:G;w=j[g+1|0];M=(M&255)>>>0>>0?w:M;g=j[g|0];h=(h&255)>>>0>>0?g:h;q=J>>>0<(q&255)>>>0?J:q;p=B>>>0<(p&255)>>>0?B:p;s=w>>>0<(s&255)>>>0?w:s;E=g>>>0<(E&255)>>>0?g:E;t=t+1|0;if((t|0)!=16){continue}break}g=q&255;k:{if((g|0)==255){w=j[(s&255)+218144|0];g=j[(E&255)+218144|0];if((w|g)>>>0>=32){break c}t=g<<10|w<<5|j[(p&255)+218400|0]<<1|32768;if(t>>>0<65536){break k}break a}J=j[(s&255)+218400|0];B=j[(E&255)+218400|0];if((J|B)>>>0>15){break d}w=j[(p&255)+219504|0];g=j[g+219248|0];if((w|g)>>>0>=8){break d}t=B<<8|g<<12|J<<4|w<<1;if(t>>>0>=65536){break a}}g=h&255;l:{J=u&255;m:{if(J+ -239>>>0<=16){B=j[(M&255)+218736|0];w=j[g+218736|0];g=j[(G&255)+218736|0];if((B|w|g)>>>0>=32){break e}h=g|(w<<10|B<<5)|32768;if(h>>>0<65536){break m}break a}if(J>>>0>238){break f}B=j[(M&255)+218992|0];w=j[g+218992|0];g=j[(G&255)+218992|0];if((B|w|g)>>>0>=16){break f}h=g|(B<<4|w<<8)|j[J+219904|0]<<12;if(h>>>0>=65536){break l}}i[i[f>>2]+(n<<2)>>2]=h<<16|t;K=K+1|0;if((C|0)==(K|0)){break i}n=m+K|0;if(!Ba((n<<4)+a|0,f+232|0,0,0)){break j}continue}break}break a}if(K>>>0>>0){break h}}F=F+1|0;if((e|0)!=(F|0)){continue}break}if((d|0)<1){break h}T=c+ -1|0;w=T?32-r(T)|0:0;W=d+ -1|0;g=W?32-r(W)|0:0;X=w>>>0>>0?w:g;Y=X<<1;ca=-1<>2];da=f+344|0;ea=(T&1)<<2;while(1){J=S+ -1|0;h=0;while(1){C=h<<2;e=(o(h+J&W,c)<<2)+aa|0;i[C+(f+84|0)>>2]=e;g=C+(f+160|0)|0;B=g;m=i[e+(T<<2)>>2];n:{if(m&32768){s=(m>>>5&31)+297152|0;E=(m>>>10&31)+297152|0;u=255;l=(m>>>1&15)+297184|0;break n}s=(m>>>4&15)+297184|0;E=(m>>>8&15)+297184|0;u=j[(m>>>12&7)+297208|0];l=(m>>>1&7)+297200|0}i[B>>2]=j[l|0]+(j[E|0]+(j[s|0]+u|0)|0);y=m>>>16|0;B=C+(f+96|0)|0;u=B;o:{if((m|0)<=-1){s=(m>>>21&31)+297152|0;E=(m>>>26&31)+297152|0;t=255;l=(y&31)+297152|0;break o}s=(m>>>20&15)+297184|0;E=(m>>>24&15)+297184|0;t=j[(m>>>28|0)+297208|0];l=(y&15)+297184|0}i[u>>2]=j[l|0]+(j[E|0]+(j[s|0]+t|0)|0);l=g;C=i[e>>2];p:{if(C&32768){s=(C>>>5&31)+297152|0;E=(C>>>10&31)+297152|0;u=255;G=(C>>>1&15)+297184|0;break p}s=(C>>>4&15)+297184|0;E=(C>>>8&15)+297184|0;u=j[(C>>>12&7)+297208|0];G=(C>>>1&7)+297200|0}i[l+16>>2]=j[G|0]+(j[E|0]+(j[s|0]+u|0)|0);y=C>>>16|0;u=B;q:{if((C|0)<=-1){s=(C>>>21&31)+297152|0;E=(C>>>26&31)+297152|0;t=255;l=(y&31)+297152|0;break q}s=(C>>>20&15)+297184|0;E=(C>>>24&15)+297184|0;t=j[(C>>>28|0)+297208|0];l=(y&15)+297184|0}i[u+16>>2]=j[l|0]+(j[E|0]+(j[s|0]+t|0)|0);y=i[e+ea>>2];r:{if(y&32768){p=(y>>>5&31)+297152|0;s=(y>>>10&31)+297152|0;E=255;e=(y>>>1&15)+297184|0;break r}p=(y>>>4&15)+297184|0;s=(y>>>8&15)+297184|0;E=j[(y>>>12&7)+297208|0];e=(y>>>1&7)+297200|0}i[g+32>>2]=j[e|0]+(j[s|0]+(j[p|0]+E|0)|0);g=y>>>16|0;s:{if((y|0)<=-1){w=(g&31)+297152|0;p=(y>>>26&31)+297152|0;t=255;g=(y>>>21&31)+297152|0;break s}w=(g&15)+297184|0;p=(y>>>24&15)+297184|0;t=j[(y>>>28|0)+297208|0];g=(y>>>20&15)+297184|0}i[B+32>>2]=j[w|0]+(j[p|0]+(j[g|0]+t|0)|0);h=h+1|0;if((h|0)!=3){continue}break}if((c|0)>=1){fa=k[((S&255)<<1)+295296>>1]|k[(S>>>7&33554430)+295296>>1]<<16;ga=S>>>X<>2];F=i[f+104>>2];M=i[f+184>>2];m=i[f+168>>2];u=i[f+116>>2];p=i[f+100>>2];t=i[f+112>>2];n=i[f+96>>2];G=i[f+180>>2];s=i[f+164>>2];K=i[f+176>>2];q=i[f+160>>2];ia=i[f+92>>2];ja=i[f+88>>2];ka=i[f+84>>2];while(1){if(Ba((Z<<4)+a|0,f+232|0,0,0)){Ea(i[f+336>>2],i[f+340>>2],da,f+232|0,f+16|0)}J=K;C=G;B=t;y=u;w=M;g=e;u=k[(E>>>7&33554430)+295296>>1]<<17|fa|k[((E&255)<<1)+295296>>1]<<1;e=u;t:{if((c|0)==(d|0)){break t}u=u&ca;e=u|E>>>X<>>0>d>>>0){break t}e=u|ga}P=(e<<3)+b|0;i[P+4>>2]=i[(Z<<2)+aa>>2];E=E+1|0;D=(T&E)<<2;h=i[D+ka>>2];u:{if(h&32768){t=(h>>>5&31)+297152|0;K=(h>>>10&31)+297152|0;M=255;u=(h>>>1&15)+297184|0;break u}t=(h>>>4&15)+297184|0;K=(h>>>8&15)+297184|0;M=j[(h>>>12&7)+297208|0];u=(h>>>1&7)+297200|0}e=h>>>16|0;v:{if((h|0)<=-1){H=(h>>>21&31)+297152|0;G=(h>>>26&31)+297152|0;U=255;e=(e&31)+297152|0;break v}H=(h>>>20&15)+297184|0;G=(h>>>24&15)+297184|0;U=j[(h>>>28|0)+297208|0];e=(e&15)+297184|0}h=j[t|0];t=j[H|0];v=i[D+ja>>2];w:{if(v&32768){V=(v>>>1&15)+297184|0;R=(v>>>5&31)+297152|0;L=255;l=(v>>>10&31)+297152|0;break w}V=(v>>>1&7)+297200|0;R=(v>>>4&15)+297184|0;L=j[(v>>>12&7)+297208|0];l=(v>>>8&15)+297184|0}N=h+M|0;K=j[K|0];I=t+U|0;t=j[G|0];G=v>>>16|0;h=j[R|0]+L|0;M=j[l|0];x:{if((v|0)<=-1){H=(v>>>21&31)+297152|0;L=(v>>>26&31)+297152|0;l=255;G=(G&31)+297152|0;break x}H=(v>>>20&15)+297184|0;L=(v>>>24&15)+297184|0;l=j[(v>>>28|0)+297208|0];G=(G&15)+297184|0}N=K+N|0;K=j[u|0];I=t+I|0;t=j[e|0];h=h+M|0;M=j[V|0];u=j[L|0]+(l+j[H|0]|0)|0;e=j[G|0];D=i[D+ia>>2];y:{if(D&32768){R=(D>>>1&15)+297184|0;H=(D>>>5&31)+297152|0;L=(D>>>10&31)+297152|0;l=255;break y}R=(D>>>1&7)+297200|0;H=(D>>>4&15)+297184|0;L=(D>>>8&15)+297184|0;l=j[(D>>>12&7)+297208|0]}K=K+N|0;t=t+I|0;G=h+M|0;u=e+u|0;e=D>>>16|0;M=j[R|0]+(j[L|0]+(l+j[H|0]|0)|0)|0;z:{if((D|0)<=-1){U=(e&31)+297152|0;V=(D>>>21&31)+297152|0;R=(D>>>26&31)+297152|0;ba=255;break z}U=(e&15)+297184|0;V=(D>>>20&15)+297184|0;R=(D>>>24&15)+297184|0;ba=j[(D>>>28|0)+297208|0]}la=P;l=o(C,6);L=l+o(J,6)|0;N=L+(s+q<<1)|0;e=(j[f+23|0]+(j[f+22|0]+(j[f+21|0]+j[f+20|0]|0)|0)<<4)-N<<4;I=0-e|0;z=e;P=o(y,6);D=P+o(B,6)|0;e=D+(p+n<<1)|0;h=(e|0)<(N|0);I=h?I:z;e=e-N|0;e=h?0-e|0:e;Q=(I|0)>(o(e,13)|0)?12:(I|0)>e<<3?8:((I|0)>(o(e,3)|0))<<2;_=s+C|0;N=q+J|0;v=_+N<<2;e=(j[f+19|0]+(j[f+18|0]+(j[f+17|0]+j[f+16|0]|0)|0)<<4)-v<<4;O=0-e|0;z=e;$=p+y|0;I=n+B|0;e=$+I<<2;h=(e|0)<(v|0);H=h?O:z;e=e-v|0;e=h?0-e|0:e;O=Q|((H|0)>(o(e,13)|0)?3:(H|0)>e<<3?2:(H|0)>(o(e,3)|0));N=(l+o(s,6)|0)+(N<<1)|0;e=(j[f+35|0]+(j[f+34|0]+(j[f+33|0]+j[f+32|0]|0)|0)<<4)-N<<4;z=0-e|0;l=e;e=(P+o(p,6)|0)+(I<<1)|0;h=(e|0)<(N|0);I=h?z:l;e=e-N|0;e=h?0-e|0:e;Q=O|((I|0)>(o(e,13)|0)?768:(I|0)>e<<3?512:((I|0)>(o(e,3)|0))<<8);I=o(J,3);l=o(C,9);P=l+o(s,3)|0;v=I+(P+q|0)|0;e=(j[f+39|0]+(j[f+38|0]+(j[f+37|0]+j[f+36|0]|0)|0)<<4)-v<<4;O=0-e|0;z=e;q=o(B,3);h=o(y,9);N=h+o(p,3)|0;e=q+(N+n|0)|0;n=(e|0)<(v|0);H=n?O:z;e=e-v|0;e=n?0-e|0:e;Q=Q|((H|0)>(o(e,13)|0)?3072:(H|0)>e<<3?2048:((H|0)>(o(e,3)|0))<<10);v=C+J<<3;e=(j[f+27|0]+(j[f+26|0]+(j[f+25|0]+j[f+24|0]|0)|0)<<4)-v<<4;O=0-e|0;z=e;e=y+B<<3;n=(e|0)<(v|0);H=n?O:z;e=e-v|0;e=n?0-e|0:e;Q=Q|((H|0)>(o(e,13)|0)?48:(H|0)>e<<3?32:((H|0)>(o(e,3)|0))<<4);L=(L+(K<<1)|0)+(G<<1)|0;e=(j[f+31|0]+(j[f+30|0]+(j[f+29|0]+j[f+28|0]|0)|0)<<4)-L<<4;O=0-e|0;z=e;e=(D+(t<<1)|0)+(u<<1)|0;n=(e|0)<(L|0);D=n?O:z;e=e-L|0;e=n?0-e|0:e;Q=Q|((D|0)>(o(e,13)|0)?192:(D|0)>e<<3?128:((D|0)>(o(e,3)|0))<<6);v=o(C,12);L=v+(J<<2)|0;e=(j[f+43|0]+(j[f+42|0]+(j[f+41|0]+j[f+40|0]|0)|0)<<4)-L<<4;O=0-e|0;z=e;H=o(y,12);e=H+(B<<2)|0;n=(e|0)<(L|0);D=n?O:z;e=e-L|0;e=n?0-e|0:e;Q=Q|((D|0)>(o(e,13)|0)?12288:(D|0)>e<<3?8192:((D|0)>(o(e,3)|0))<<12);e=I;I=l+o(G,3)|0;l=(e+I|0)+K|0;e=(j[f+47|0]+(j[f+46|0]+(j[f+45|0]+j[f+44|0]|0)|0)<<4)-l<<4;O=0-e|0;z=e;h=h+o(u,3)|0;e=(h+q|0)+t|0;n=(e|0)<(l|0);q=n?O:z;e=e-l|0;e=n?0-e|0:e;O=Q|((q|0)>(o(e,13)|0)?49152:(q|0)>e<<3?32768:((q|0)>(o(e,3)|0))<<14);l=_<<3;e=(j[f+51|0]+(j[f+50|0]+(j[f+49|0]+j[f+48|0]|0)|0)<<4)-l<<4;q=0-e|0;z=e;e=$<<3;n=(e|0)<(l|0);q=n?q:z;e=e-l|0;e=n?0-e|0:e;O=O|((q|0)>(o(e,13)|0)?196608:(q|0)>e<<3?131072:((q|0)>(o(e,3)|0))<<16);s=v+(s<<2)|0;e=(j[f+55|0]+(j[f+54|0]+(j[f+53|0]+j[f+52|0]|0)|0)<<4)-s<<4;z=0-e|0;l=e;e=H+(p<<2)|0;n=(e|0)<(s|0);q=n?z:l;e=e-s|0;e=n?0-e|0:e;s=O|((q|0)>(o(e,13)|0)?786432:(q|0)>e<<3?524288:((q|0)>(o(e,3)|0))<<18);p=o(_,6)+(m+w<<1)|0;e=(j[f+67|0]+(j[f+66|0]+(j[f+65|0]+j[f+64|0]|0)|0)<<4)-p<<4;z=0-e|0;l=e;e=o($,6)+(g+F<<1)|0;n=(e|0)<(p|0);q=n?z:l;e=e-p|0;e=n?0-e|0:e;s=s|((q|0)>(o(e,13)|0)?50331648:(q|0)>e<<3?33554432:((q|0)>(o(e,3)|0))<<24);q=o(w,3);p=P+(q+m|0)|0;e=(j[f+71|0]+(j[f+70|0]+(j[f+69|0]+j[f+68|0]|0)|0)<<4)-p<<4;z=0-e|0;l=e;n=o(g,3);e=N+(n+F|0)|0;m=(e|0)<(p|0);F=m?z:l;e=e-p|0;e=m?0-e|0:e;P=s|((F|0)>(o(e,13)|0)?201326592:(F|0)>e<<3?134217728:((F|0)>(o(e,3)|0))<<26);e=j[f+59|0]+(j[f+58|0]+(j[f+57|0]+(j[f+56|0]-C|0)|0)|0)<<8;z=0-e|0;l=e;F=y<<4;e=C<<4;m=(F|0)<(e|0);p=m?z:l;e=F-e|0;e=m?0-e|0:e;P=P|((p|0)>(o(e,13)|0)?3145728:(p|0)>e<<3?2097152:((p|0)>(o(e,3)|0))<<20);p=v+(G<<2)|0;e=(j[f+63|0]+(j[f+62|0]+(j[f+61|0]+j[f+60|0]|0)|0)<<4)-p<<4;z=0-e|0;l=e;e=H+(u<<2)|0;m=(e|0)<(p|0);F=m?z:l;e=e-p|0;e=m?0-e|0:e;P=P|((F|0)>(o(e,13)|0)?12582912:(F|0)>e<<3?8388608:((F|0)>(o(e,3)|0))<<22);p=v+(w<<2)|0;e=(j[f+75|0]+(j[f+74|0]+(j[f+73|0]+j[f+72|0]|0)|0)<<4)-p<<4;z=0-e|0;l=e;e=H+(g<<2)|0;m=(e|0)<(p|0);F=m?z:l;e=e-p|0;e=m?0-e|0:e;P=P|((F|0)>(o(e,13)|0)?805306368:(F|0)>e<<3?536870912:((F|0)>(o(e,3)|0))<<28);q=(q+I|0)+M|0;e=(j[f+79|0]+(j[f+78|0]+(j[f+77|0]+j[f+76|0]|0)|0)<<4)-q<<4;z=0-e|0;l=e;e=j[U|0]+(j[R|0]+(ba+j[V|0]|0)|0)|0;m=e+(h+n|0)|0;F=(m|0)<(q|0);n=F?z:l;m=m-q|0;m=F?0-m|0:m;i[la>>2]=P|((n|0)>(o(m,13)|0)?-1073741824:(n|0)>m<<3?-2147483648:((n|0)>(o(m,3)|0))<<30);Z=Z+1|0;F=g;m=w;p=y;n=B;s=C;q=J;if((c|0)!=(E|0)){continue}break}i[f+128>>2]=t;i[f+192>>2]=K;i[f+196>>2]=G;i[f+132>>2]=u;i[f+200>>2]=M;i[f+136>>2]=e;i[f+176>>2]=K;i[f+160>>2]=q;i[f+180>>2]=G;i[f+164>>2]=s;i[f+112>>2]=t;i[f+96>>2]=n;i[f+116>>2]=u;i[f+100>>2]=p;i[f+184>>2]=M;i[f+168>>2]=m;i[f+120>>2]=e;i[f+104>>2]=F}S=S+1|0;if((S|0)!=(d|0)){continue}break}}a=i[f>>2];if(a){i[f+4>>2]=a;wa(a)}}ha=f+384|0;return}A(219853,19512,3171,219760);x()}A(218656,19512,3154,219760);x()}A(219810,19512,3164,219760);x()}A(219777,19512,3147,219760);x()}Ja();x()}A(218689,19512,3176,219760);x()}function $a(a,b,c){var d=0,e=0,f=0,h=0,i=0,k=0,l=p(0),n=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=p(0),C=p(0),D=0,E=0,F=0,G=0,H=p(0),I=0,J=p(0),K=0,L=0,M=0,N=0,O=p(0),P=p(0),Q=p(0),R=p(0),S=0,T=p(0),U=p(0),V=p(0),W=0;i=ha-48|0;ha=i;a:{b:{c:{d:{if(c&4){e=j[a+4|0];d=j[a+5|0];h=j[a+6|0];f=j[a+7|0];g[i+47|0]=j[(f>>>6|0)+28967|0];g[i+44|0]=j[(f&3)+28967|0];g[i+43|0]=j[(h>>>6|0)+28967|0];g[i+40|0]=j[(h&3)+28967|0];g[i+39|0]=j[(d>>>6|0)+28967|0];g[i+36|0]=j[(d&3)+28967|0];g[i+35|0]=j[(e>>>6|0)+28967|0];g[i+32|0]=j[(e&3)+28967|0];g[i+46|0]=j[(f>>>4&3)+28967|0];g[i+45|0]=j[(f>>>2&3)+28967|0];g[i+42|0]=j[(h>>>4&3)+28967|0];g[i+41|0]=j[(h>>>2&3)+28967|0];g[i+38|0]=j[(d>>>4&3)+28967|0];g[i+37|0]=j[(d>>>2&3)+28967|0];g[i+34|0]=j[(e>>>4&3)+28967|0];g[i+33|0]=j[(e>>>2&3)+28967|0];G=-1;break d}d=j[b+2|0];e:{e=j[b+4|0];n=j[b|0];h=j[b+1|0];if((e|0)!=(n|0)|(h|0)!=j[b+5|0]|(j[b+6|0]!=(d|0)|j[b+8|0]!=(n|0))){break e}if(j[b+9|0]!=(h|0)|j[b+10|0]!=(d|0)|(j[b+12|0]!=(n|0)|j[b+13|0]!=(h|0))){break e}if(j[b+14|0]!=(d|0)|j[b+16|0]!=(n|0)|(j[b+17|0]!=(h|0)|j[b+18|0]!=(d|0))){break e}if(j[b+20|0]!=(n|0)|j[b+21|0]!=(h|0)|(j[b+22|0]!=(d|0)|j[b+24|0]!=(n|0))){break e}if(j[b+25|0]!=(h|0)|j[b+26|0]!=(d|0)|(j[b+28|0]!=(n|0)|j[b+29|0]!=(h|0))){break e}if(j[b+30|0]!=(d|0)|j[b+32|0]!=(n|0)|(j[b+33|0]!=(h|0)|j[b+34|0]!=(d|0))){break e}if(j[b+36|0]!=(n|0)|j[b+37|0]!=(h|0)|(j[b+38|0]!=(d|0)|j[b+40|0]!=(n|0))){break e}if(j[b+41|0]!=(h|0)|j[b+42|0]!=(d|0)|(j[b+44|0]!=(n|0)|j[b+45|0]!=(h|0))){break e}if(j[b+46|0]!=(d|0)|j[b+48|0]!=(n|0)|(j[b+49|0]!=(h|0)|j[b+50|0]!=(d|0))){break e}if(j[b+52|0]!=(n|0)|j[b+53|0]!=(h|0)|(j[b+54|0]!=(d|0)|j[b+56|0]!=(n|0))){break e}if(j[b+57|0]!=(h|0)|j[b+58|0]!=(d|0)|(j[b+60|0]!=(n|0)|j[b+61|0]!=(h|0))){break e}if(j[b+62|0]!=(d|0)){break e}e=1;k=170;b=d<<1;c=h<<1;d=n<<1;f=j[b+300769|0]|(j[c+301793|0]<<5|j[d+300769|0]<<11);b=j[b+300768|0]|(j[c+301792|0]<<5|j[d+300768|0]<<11);f:{if((f|0)==(b|0)){if(!b){k=85;b=0;break f}k=0;f=b+ -1|0}if(b>>>0>=f>>>0){e=b;b=f;break f}k=k|85;e=f}g[a+2|0]=b;g[a|0]=e;c=o(k,16843009);g[a+4|0]=c;g[a+5|0]=c>>>8;g[a+6|0]=c>>>16;g[a+7|0]=c>>>24;g[a+3|0]=b>>>8;g[a+1|0]=e>>>8;break c}r=1;G=d;u=d;k=d;M=h;w=h;y=h;f=n;v=n;z=n;while(1){e=e&255;z=(z|0)>(e|0)?e:z;v=v>>>0>>0?e:v;t=(r<<2)+b|0;N=j[t+2|0];k=(k|0)>(N|0)?N:k;t=j[t+1|0];y=(y|0)>(t|0)?t:y;u=u>>>0>>0?N:u;w=w>>>0>>0?t:w;f=e+f|0;G=G+N|0;M=t+M|0;r=r+1|0;if((r|0)!=16){e=j[(r<<2)+b|0];continue}break}N=G+8>>>4|0;M=M+8>>>4|0;G=f+8>>>4|0;f=0;e=0;t=0;r=0;while(1){d=d-N|0;h=h-M|0;e=o(d,h)+e|0;n=n-G|0;D=o(n,d)+D|0;E=o(h,n)+E|0;f=o(d,d)+f|0;t=o(h,h)+t|0;F=o(n,n)+F|0;r=r+1|0;if((r|0)!=16){n=(r<<2)+b|0;d=j[n+2|0];h=j[n+1|0];n=j[n|0];continue}break}O=p(p(F|0)*p(.003921568859368563));P=p(v-z|0);l=p(p(E|0)*p(.003921568859368563));C=p(w-y|0);B=p(p(D|0)*p(.003921568859368563));J=p(u-k|0);Q=p(p(p(O*P)+p(l*C))+p(B*J));R=p(p(t|0)*p(.003921568859368563));H=p(p(e|0)*p(.003921568859368563));T=p(p(p(l*P)+p(R*C))+p(H*J));U=p(p(B*P)+p(H*C));P=p(p(f|0)*p(.003921568859368563));C=p(U+p(P*J));J=p(p(p(Q*O)+p(T*l))+p(C*B));V=p(p(p(Q*l)+p(T*R))+p(C*H));C=p(p(p(Q*B)+p(T*H))+p(C*P));Q=p(p(p(J*O)+p(V*l))+p(C*B));U=p(Q*O);O=p(p(p(J*l)+p(V*R))+p(C*H));C=p(p(p(J*B)+p(V*H))+p(C*P));J=p(p(U+p(O*l))+p(C*B));T=p(q(J));R=p(p(p(Q*l)+p(O*R))+p(C*H));l=p(q(R));l=T>l?T:l;B=p(p(p(Q*B)+p(O*H))+p(C*P));H=p(q(B));l=l>H?l:H;g:{if(l>=p(2)^1){e=117;k=601;d=306;break g}l=p(p(1024)/l);B=p(B*l);h:{if(p(q(B))(f|0);I=f?h:s;h=(n|0)>(I|0);W=d+(d>>>8|0)>>>8|0;d=o(j[e+1|0],63)+128|0;S=(d>>>8|0)+d>>>8|0;e=o(j[e+2|0],31)+128|0;s=(e>>>8|0)+e>>>8|0;e=h?n:I;d=(u|0)>(e|0);f=d?3:h?2:f;e=d?u:e;d=(w|0)>(e|0);f=d?4:f;e=d?w:e;d=(y|0)>(e|0);f=d?5:f;e=d?y:e;d=(r|0)>(e|0);f=d?6:f;e=d?r:e;d=(v|0)>(e|0);f=d?7:f;e=d?v:e;d=(z|0)>(e|0);f=d?8:f;e=d?z:e;d=(t|0)>(e|0);f=d?9:f;e=d?t:e;d=(D|0)>(e|0);f=d?10:f;e=d?D:e;d=(E|0)>(e|0);f=d?11:f;e=d?E:e;d=(F|0)>(e|0);f=d?12:f;e=d?F:e;d=(K|0)>(e|0);f=d?13:f;e=d?K:e;d=(L|0)>(e|0);e=(((k|0)>((d?L:e)|0)?15:d?14:f)<<2)+b|0;d=o(j[e|0],31)+128|0;f=(d>>>8|0)+d>>>8|0;d=o(j[e+1|0],63)+128|0;e=o(j[e+2|0],31)+128|0;pb(b,W,S,s,f,(d>>>8|0)+d>>>8|0,(e>>>8|0)+e>>>8|0,i+32|0)}c=c&2?3:c&1?2:1;n=c>>>0>1?c:1;e=0;while(1){j:{if(!$b(b,i+32|0,i+16|0,i)){if((G|0)<=-1){N=(j[b+62|0]+(j[b+58|0]+(j[b+54|0]+(j[b+50|0]+(j[b+46|0]+(j[b+42|0]+(j[b+38|0]+(j[b+34|0]+(j[b+30|0]+(j[b+26|0]+(j[b+22|0]+(j[b+18|0]+(j[b+14|0]+(j[b+10|0]+(j[b+2|0]+j[b+6|0]|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)+8>>>4|0;M=(j[b+61|0]+(j[b+57|0]+(j[b+53|0]+(j[b+49|0]+(j[b+45|0]+(j[b+41|0]+(j[b+37|0]+(j[b+33|0]+(j[b+29|0]+(j[b+25|0]+(j[b+21|0]+(j[b+17|0]+(j[b+13|0]+(j[b+9|0]+(j[b+1|0]+j[b+5|0]|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)+8>>>4|0;G=(j[b+60|0]+(j[b+56|0]+(j[b+52|0]+(j[b+48|0]+(j[b+44|0]+(j[b+40|0]+(j[b+36|0]+(j[b+32|0]+(j[b+28|0]+(j[b+24|0]+(j[b+20|0]+(j[b+16|0]+(j[b+12|0]+(j[b+8|0]+(j[b|0]+j[b+4|0]|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)+8>>>4|0}c=N<<1;k=j[c+300769|0];d=M<<1;f=j[d+301793|0];h=G<<1;r=j[h+300769|0];w=j[d+301792|0];u=j[h+300768|0];c=j[c+300768|0];break j}l=p(p(m[i+8>>2]*p(.12156862765550613))+p(.5));k:{if(p(q(l))>2]*p(.24705882370471954))+p(.5));l:{if(p(q(l))0;u=k?c:63;w=(u|0)>0;l=p(p(m[i>>2]*p(.12156862765550613))+p(.5));m:{if(p(q(l))0;l=p(p(m[i+24>>2]*p(.12156862765550613))+p(.5));n:{if(p(q(l))0;k=f?d:0;f=w?u:0;r=y?h:0;l=p(p(m[i+20>>2]*p(.24705882370471954))+p(.5));o:{if(p(q(l))0?c:0;l=p(p(m[i+16>>2]*p(.12156862765550613))+p(.5));p:{if(p(q(l))0?c:0;c=z?v:0}pb(b,u,w,c,r,f,k,i+32|0);e=e+1|0;if((n|0)!=(e|0)){continue}break}b=(c|w<<5|u<<11)&65535;e=(f<<5|k|r<<11)&65535;if((b|0)==(e|0)){c=a;q:{if(!e){b=1;k=85;e=0;break q}if(!b){break b}k=0;e=b+ -1|0}g[c+2|0]=e;g[a|0]=b;c=o(k,16843009);g[a+4|0]=c;g[a+5|0]=c>>>8;g[a+6|0]=c>>>16;g[a+7|0]=c>>>24;g[a+3|0]=e>>>8;g[a+1|0]=b>>>8;break c}c=b>>>0>>0;d=c?e:b;b=c?b:e;if(d>>>0<=b>>>0){break a}g[a+2|0]=b;g[a|0]=d;g[a+3|0]=b>>>8;g[a+1|0]=d>>>8;e=j[i+47|0];d=j[i+46|0];h=j[i+45|0];f=j[i+44|0];k=j[i+43|0];n=j[i+42|0];G=j[i+41|0];u=j[i+40|0];w=j[i+39|0];M=j[i+38|0];y=j[i+37|0];r=j[i+36|0];v=j[j[i+32|0]+28971|0]|j[j[i+33|0]+28971|0]<<2|j[j[i+34|0]+28971|0]<<4|j[j[i+35|0]+28971|0]<<6;b=c?85:0;g[a+4|0]=v^b;c=v|j[r+28971|0]<<8|j[y+28971|0]<<10|j[M+28971|0]<<12|j[w+28971|0]<<14;g[a+5|0]=b^c>>>8;c=c|j[u+28971|0]<<16|j[G+28971|0]<<18|j[n+28971|0]<<20|j[k+28971|0]<<22;g[a+6|0]=b^c>>>16;g[a+7|0]=b^(c|j[f+28971|0]<<24|j[h+28971|0]<<26|j[d+28971|0]<<28|j[e+28971|0]<<30)>>>24}ha=i+48|0;return}A(28955,19512,15131,28944);x()}A(28955,19512,15149,28944);x()}function oc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=p(0),N=0,O=0,P=0,Q=0,R=p(0),S=0,T=0,U=0,V=0,W=p(0);H=ha-96|0;ha=H;a:{r=o(c,15)+b|0;d=j[r|0];w=o(c,14)+b|0;f=j[w|0];y=o(c,13)+b|0;v=j[y|0];S=o(c,12)+b|0;e=j[S|0];B=o(c,11)+b|0;t=j[B|0];I=o(c,10)+b|0;m=j[I|0];J=o(c,9)+b|0;u=j[J|0];K=(c<<3)+b|0;s=j[K|0];N=o(c,7)+b|0;z=j[N|0];O=o(c,6)+b|0;D=j[O|0];P=o(c,5)+b|0;E=j[P|0];Q=(c<<2)+b|0;F=j[Q|0];T=o(c,3)+b|0;C=j[T|0];U=(c<<1)+b|0;G=j[U|0];V=b+c|0;L=j[V|0];l=j[b|0];n=l>>>0>>0?L:l;n=n>>>0>>0?G:n;n=n>>>0>>0?C:n;n=n>>>0>>0?F:n;n=n>>>0>>0?E:n;n=n>>>0>>0?D:n;n=n>>>0>>0?z:n;n=n>>>0>>0?s:n;n=n>>>0>>0?u:n;n=n>>>0>>0?m:n;n=n>>>0>>0?t:n;n=n>>>0>>0?e:n;n=n>>>0>>0?v:n;n=n>>>0>>0?f:n;n=n>>>0>>0?d:n;L=l>>>0>L>>>0?L:l;G=L>>>0>G>>>0?G:L;C=G>>>0>C>>>0?C:G;F=C>>>0>F>>>0?F:C;E=F>>>0>E>>>0?E:F;D=E>>>0>D>>>0?D:E;z=D>>>0>z>>>0?z:D;s=z>>>0>s>>>0?s:z;u=s>>>0>u>>>0?u:s;m=u>>>0>m>>>0?m:u;t=m>>>0>t>>>0?t:m;e=t>>>0>e>>>0?e:t;v=e>>>0>v>>>0?v:e;f=v>>>0>f>>>0?f:v;e=f>>>0>d>>>0?d:f;b:{if((n|0)==(e|0)){h[a>>1]=e|3328;b=k[145594]|k[145595]<<16;h[a+2>>1]=b;h[a+4>>1]=b>>>16;h[a+6>>1]=k[145596];break b}f=n-e|0;if(f>>>0<=5){c=n+ -2|0;c=(c>>>0<256?c:c>>31^-1)&255;h[a>>1]=c|7424;e=j[b|0];b=3-c|0;f=e+b|0;if(f>>>0>=6){break a}d=b+j[V|0]|0;if(d>>>0>=6){break a}v=b+j[U|0]|0;if(v>>>0>5){break a}t=b+j[T|0]|0;if(t>>>0>5){break a}m=b+j[Q|0]|0;if(m>>>0>5){break a}u=b+j[P|0]|0;if(u>>>0>5){break a}s=b+j[O|0]|0;if(s>>>0>5){break a}z=b+j[N|0]|0;if(z>>>0>5){break a}D=b+j[K|0]|0;if(D>>>0>5){break a}E=b+j[J|0]|0;if(E>>>0>5){break a}F=b+j[I|0]|0;if(F>>>0>5){break a}C=b+j[B|0]|0;if(C>>>0>5){break a}G=b+j[S|0]|0;if(G>>>0>5){break a}L=b+j[y|0]|0;if(L>>>0>5){break a}l=b+j[w|0]|0;if(l>>>0>5){break a}b=b+j[r|0]|0;if(b>>>0>5){break a}n=j[b+297759|0];d=j[d+297759|0]<<1;b=j[f+297759|0]<<13;f=0;d=b|d;b=j[v+297759|0];e=b>>>11|0;b=b<<21|f;f=d|e;e=j[m+297759|0]<<10;c=b;d=j[t+297759|0];b=d>>>23|0;d=c|d<<9;f=e|(b|f);c=d;d=j[u+297759|0];b=d>>>2|0;d=c|d<<30;f=b|f;b=j[s+297759|0];e=b>>>14|0;c=b<<18|d;d=j[z+297759|0];b=d>>>26|0;d=c|d<<6;b=b|(e|f);e=j[D+297759|0]<<7;f=b|e;c=d;d=j[E+297759|0];b=d>>>5|0;d=c|d<<27;f=b|f;b=j[F+297759|0];e=b>>>17|0;b=b<<15|d;v=e|f;c=b;d=j[C+297759|0];b=d>>>29|0;f=c|d<<3;v=b|v;g[a+7|0]=f|n;e=j[G+297759|0]<<4;b=f;f=e|v;d=a;g[d+3|0]=f;g[d+2|0]=f>>>8;d=j[L+297759|0];e=d>>>8|0;d=b|d<<24;c=f|e;v=c;f=a;g[f+4|0]=(c&16777215)<<8|d>>>24;c=j[l+297759|0];b=c>>>20|0;c=d|c<<12;v=b|v;b=v;d=c;g[f+6|0]=(b&255)<<24|d>>>8;g[f+5|0]=(b&65535)<<16|d>>>16;break b}v=H;M=p(f>>>0);R=Na(p(M/p(25)));c:{if(p(q(R))1?d:1;i[v+64>>2]=G;t=H;M=Na(p(M/p(19)));d:{if(p(q(M))1?d:1;i[t+68>>2]=v;i[H+72>>2]=v;i[H+76>>2]=v;f=H;M=p(e>>>0);R=p(p(n>>>0)-M);W=Na(p(p(R*p(.5199999809265137))+M));e:{if(p(q(W))>>0<256?d:d>>31^-1)&255;i[f+80>>2]=n;e=H;M=Na(p(p(R*p(.5263158082962036))+M));f:{if(p(q(M))>>0<256?d:d>>31^-1)&255;i[e+84>>2]=z;i[H+88>>2]=z;i[H+92>>2]=z;L=0;S=(v|G)!=1;D=0;E=0;F=0;C=0;while(1){f=0;e=-1;t=-1;m=-1;u=-1;s=j[o(c,C)+b|0];g:{if((s+ -7&255)>>>0>=242){while(1){d=z+o(v,g[f+28728|0])|0;l=((d>>>0<256?d:d>>31^-1)&255)-s|0;d=l>>31;d=(d^d+l)<<3|f;u=d>>>0>>0?d:u;d=z+o(v,g[f+28712|0])|0;l=((d>>>0<256?d:d>>31^-1)&255)-s|0;d=l>>31;d=(d^d+l)<<3|f;m=d>>>0>>0?d:m;d=z+o(v,g[f+28688|0])|0;l=((d>>>0<256?d:d>>31^-1)&255)-s|0;d=l>>31;d=(d^d+l)<<3|f;t=d>>>0>>0?d:t;d=n+o(G,g[f+28640|0])|0;l=((d>>>0<256?d:d>>31^-1)&255)-s|0;d=l>>31;d=(d^d+l)<<3|f;e=d>>>0>>0?d:e;f=f+1|0;if((f|0)!=8){continue}break g}}d=z-s|0;s=n-s|0;if(S){while(1){r=d+o(v,g[f+28728|0])|0;l=r>>31;l=(l^l+r)<<3|f;u=l>>>0>>0?l:u;r=d+o(v,g[f+28712|0])|0;l=r>>31;l=(l^l+r)<<3|f;m=l>>>0>>0?l:m;r=d+o(v,g[f+28688|0])|0;l=r>>31;l=(l^l+r)<<3|f;t=l>>>0>>0?l:t;r=s+o(G,g[f+28640|0])|0;l=r>>31;l=(l^l+r)<<3|f;e=l>>>0>>0?l:e;f=f+1|0;if((f|0)!=8){continue}break}break g}r=d+9|0;f=r>>31;w=d+2|0;e=w>>31;y=d+1|0;t=y>>31;B=d+ -10|0;m=B>>31;I=d+ -3|0;u=I>>31;J=d+ -2|0;l=J>>31;f=(f^f+r)<<3|7;r=(e^e+w)<<3|6;y=(t^t+y)<<3;w=y|5;e=d>>31;K=(e+d^e)<<3|4;e=(m^m+B)<<3|3;m=(u^u+I)<<3|2;t=(l^l+J)<<3;u=t|1;l=((d|0)<1?1-d|0:d+ -1|0)<<3;u=u>>>0>>0?u:l;m=m>>>0>>0?m:u;m=e>>>0>>0?e:m;m=K>>>0>>0?K:m;m=w>>>0>>0?w:m;m=r>>>0>>0?r:m;u=f>>>0>>0?f:m;B=d+6|0;m=B>>31;I=d+4|0;l=I>>31;J=d+ -7|0;r=J>>31;K=d+ -5|0;w=K>>31;m=(m^m+B)<<3|6;B=(l^l+I)<<3|5;l=y|4;r=(r^r+J)<<3|2;w=(w^w+K)<<3|1;w=w>>>0>>0?w:t;r=r>>>0>>0?r:w;r=e>>>0>>0?e:r;r=l>>>0>>0?l:r;r=B>>>0>>0?B:r;m=m>>>0>>0?m:r;m=f>>>0>>0?f:m;B=d+7|0;r=B>>31;I=d+5|0;w=I>>31;J=d+ -8|0;y=J>>31;K=d+ -6|0;d=K>>31;r=(r^r+B)<<3|6;w=(w^w+I)<<3|5;y=(y^y+J)<<3|2;d=(d^d+K)<<3|1;d=d>>>0>>0?d:t;d=y>>>0>>0?y:d;d=e>>>0>>0?e:d;d=l>>>0>>0?l:d;d=w>>>0>>0?w:d;d=r>>>0>>0?r:d;t=f>>>0>>0?f:d;B=s+12|0;d=B>>31;I=s+7|0;f=I>>31;J=s+4|0;e=J>>31;K=s+1|0;l=K>>31;N=s+ -13|0;r=N>>31;O=s+ -8|0;w=O>>31;P=s+ -5|0;y=P>>31;Q=s+ -2|0;s=Q>>31;d=(d^d+B)<<3|7;f=(f^f+I)<<3|6;e=(e^e+J)<<3|5;l=(l^l+K)<<3|4;r=(r^r+N)<<3|3;w=(w^w+O)<<3|2;y=(y^y+P)<<3|1;s=(s^s+Q)<<3;s=y>>>0>>0?y:s;s=w>>>0>>0?w:s;s=r>>>0>>0?r:s;s=l>>>0>>0?l:s;e=e>>>0>>0?e:s;f=f>>>0>>0?f:e;e=d>>>0>>0?d:f}d=H+C|0;g[d|0]=e&7;g[d+16|0]=t&7;g[d+32|0]=m&7;g[d+48|0]=u&7;d=u>>>3|0;L=o(d,d)+L|0;d=m>>>3|0;D=o(d,d)+D|0;d=t>>>3|0;E=o(d,d)+E|0;d=e>>>3|0;F=o(d,d)+F|0;C=C+1|0;if((C|0)!=16){continue}break}c=E>>>0>>0;d=c?E:F;b=D>>>0>>0;b=L>>>0<(b?D:d)>>>0?3:b?2:c;c=b<<2;h[a>>1]=k[(c|H- -64)>>1]<<12|j[c|H+80]|(j[b+297774|0]&15)<<8;t=(b<<4)+H|0;b=t;v=j[b+14|0];f=j[b+13|0];c=j[b+12|0];m=j[b+15|0];s=j[b+1|0]<<1|j[b|0]<<13;e=j[b+2|0];b=e>>>11|0;e=e<<21;u=b|s;d=e;e=j[t+3|0];b=e>>>23|0;e=d|e<<9;u=b|u|j[t+4|0]<<10;d=e;e=j[t+5|0];b=e>>>2|0;e=d|e<<30;u=b|u;d=e;e=j[t+6|0];b=e>>>14|0;e=d|e<<18;u=b|u;d=e;e=j[t+7|0];b=e>>>26|0;e=d|e<<6;u=b|u|j[t+8|0]<<7;d=e;e=j[t+9|0];b=e>>>5|0;e=d|e<<27;u=b|u;d=e;e=j[t+10|0];b=e>>>17|0;e=d|e<<15;u=b|u;d=e;e=j[t+11|0];b=e>>>29|0;t=d|e<<3;g[a+7|0]=t|m;e=c<<4;c=t;e=b|u|e;d=e;b=a;g[b+3|0]=d;g[b+2|0]=d>>>8;d=d|f>>>8;t=d;e=b;c=c|f<<24;g[b+4|0]=(d&16777215)<<8|c>>>24;d=v;b=d>>>20|0;c=c|d<<12;v=b|t;b=v;f=e;d=c;g[f+6|0]=(b&255)<<24|d>>>8;g[f+5|0]=(b&65535)<<16|d>>>16}ha=H+96|0;return}A(297716,19512,15806,297765);x()}function Cc(){var a=0,b=0,c=0,d=0,e=0,f=0,h=0,l=0,m=0,n=0,p=0,q=0;m=ha-112|0;ha=m;if(!j[300752]){Bc();while(1){l=0;while(1){e=o(h,48)+o(l,6)|0;d=o((l<<5)+h|0,240);a=k[d+29306>>1];b=k[d+29310>>1];c=a>>>0>b>>>0;f=c;a=c?b:a;b=k[d+29314>>1];c=a>>>0>b>>>0;f=c?2:f;a=c?b:a;b=k[d+29318>>1];c=a>>>0>b>>>0;f=c?3:f;a=c?b:a;b=k[d+29322>>1];c=a>>>0>b>>>0;f=c?4:f;a=c?b:a;b=k[d+29326>>1];c=a>>>0>b>>>0;f=c?5:f;a=c?b:a;b=k[d+29330>>1];c=a>>>0>b>>>0;f=c?6:f;a=c?b:a;b=k[d+29334>>1];c=(a&65535)>>>0>b>>>0;f=c?7:f;a=c?b:a;b=k[d+29338>>1];c=(a&65535)>>>0>b>>>0;g[e+321957|0]=((c?b:a)&65535)>>>0>k[d+29342>>1]?9:c?8:f;a=k[d+29266>>1];b=k[d+29270>>1];c=a>>>0>b>>>0;f=c;a=c?b:a;b=k[d+29274>>1];c=a>>>0>b>>>0;f=c?2:f;a=c?b:a;b=k[d+29278>>1];c=a>>>0>b>>>0;f=c?3:f;a=c?b:a;b=k[d+29282>>1];c=a>>>0>b>>>0;f=c?4:f;a=c?b:a;b=k[d+29286>>1];c=a>>>0>b>>>0;f=c?5:f;a=c?b:a;b=k[d+29290>>1];c=a>>>0>b>>>0;f=c?6:f;a=c?b:a;b=k[d+29294>>1];c=(a&65535)>>>0>b>>>0;f=c?7:f;a=c?b:a;b=k[d+29298>>1];c=(a&65535)>>>0>b>>>0;g[e+321956|0]=((c?b:a)&65535)>>>0>k[d+29302>>1]?9:c?8:f;a=k[d+29226>>1];b=k[d+29230>>1];c=a>>>0>b>>>0;f=c;a=c?b:a;b=k[d+29234>>1];c=a>>>0>b>>>0;f=c?2:f;a=c?b:a;b=k[d+29238>>1];c=a>>>0>b>>>0;f=c?3:f;a=c?b:a;b=k[d+29242>>1];c=a>>>0>b>>>0;f=c?4:f;a=c?b:a;b=k[d+29246>>1];c=a>>>0>b>>>0;f=c?5:f;a=c?b:a;b=k[d+29250>>1];c=a>>>0>b>>>0;f=c?6:f;a=c?b:a;b=k[d+29254>>1];c=(a&65535)>>>0>b>>>0;f=c?7:f;a=c?b:a;b=k[d+29258>>1];c=(a&65535)>>>0>b>>>0;g[e+321955|0]=((c?b:a)&65535)>>>0>k[d+29262>>1]?9:c?8:f;a=k[d+29186>>1];b=k[d+29190>>1];c=a>>>0>b>>>0;f=c;a=c?b:a;b=k[d+29194>>1];c=a>>>0>b>>>0;f=c?2:f;a=c?b:a;b=k[d+29198>>1];c=a>>>0>b>>>0;f=c?3:f;a=c?b:a;b=k[d+29202>>1];c=a>>>0>b>>>0;f=c?4:f;a=c?b:a;b=k[d+29206>>1];c=a>>>0>b>>>0;f=c?5:f;a=c?b:a;b=k[d+29210>>1];c=a>>>0>b>>>0;f=c?6:f;a=c?b:a;b=k[d+29214>>1];c=(a&65535)>>>0>b>>>0;f=c?7:f;a=c?b:a;b=k[d+29218>>1];c=(a&65535)>>>0>b>>>0;g[e+321954|0]=((c?b:a)&65535)>>>0>k[d+29222>>1]?9:c?8:f;a=k[d+29146>>1];b=k[d+29150>>1];c=a>>>0>b>>>0;f=c;a=c?b:a;b=k[d+29154>>1];c=a>>>0>b>>>0;f=c?2:f;a=c?b:a;b=k[d+29158>>1];c=a>>>0>b>>>0;f=c?3:f;a=c?b:a;b=k[d+29162>>1];c=a>>>0>b>>>0;f=c?4:f;a=c?b:a;b=k[d+29166>>1];c=a>>>0>b>>>0;f=c?5:f;a=c?b:a;b=k[d+29170>>1];c=a>>>0>b>>>0;f=c?6:f;a=c?b:a;b=k[d+29174>>1];c=(a&65535)>>>0>b>>>0;f=c?7:f;a=c?b:a;b=k[d+29178>>1];c=(a&65535)>>>0>b>>>0;g[e+321953|0]=((c?b:a)&65535)>>>0>k[d+29182>>1]?9:c?8:f;f=e+321952|0;e=k[d+29106>>1];a=k[d+29110>>1];b=e>>>0>a>>>0;c=b;e=b?a:e;a=k[d+29114>>1];b=e>>>0>a>>>0;c=b?2:c;e=b?a:e;a=k[d+29118>>1];b=e>>>0>a>>>0;c=b?3:c;e=b?a:e;a=k[d+29122>>1];b=e>>>0>a>>>0;c=b?4:c;e=b?a:e;a=k[d+29126>>1];b=e>>>0>a>>>0;c=b?5:c;e=b?a:e;a=k[d+29130>>1];b=e>>>0>a>>>0;c=b?6:c;e=b?a:e;a=k[d+29134>>1];b=(e&65535)>>>0>a>>>0;c=b?7:c;e=b?a:e;a=k[d+29138>>1];b=(e&65535)>>>0>a>>>0;g[f|0]=((b?a:e)&65535)>>>0>k[d+29142>>1]?9:b?8:c;l=l+1|0;if((l|0)!=8){continue}break}h=h+1|0;if((h|0)!=32){continue}break}h=0;i[80883]=4;i[80878]=3;i[80879]=1;i[80873]=5;i[80874]=2;i[80934]=124;i[80935]=131;i[80932]=108;i[80933]=147;i[80930]=92;i[80931]=163;i[80928]=76;i[80929]=179;i[80926]=59;i[80927]=196;i[80924]=43;i[80925]=212;i[80922]=27;i[80923]=228;i[80920]=11;i[80921]=244;i[80918]=119;i[80919]=136;i[80916]=103;i[80917]=152;i[80914]=86;i[80915]=169;i[80912]=70;i[80913]=185;i[80910]=54;i[80911]=201;i[80908]=38;i[80909]=217;i[80906]=21;i[80907]=234;i[80904]=5;i[80905]=250;i[80902]=113;i[80903]=142;i[80900]=97;i[80901]=158;i[80898]=81;i[80899]=174;i[80896]=65;i[80897]=190;i[80894]=48;i[80895]=207;i[80892]=32;i[80893]=223;i[80890]=16;i[80891]=239;i[80888]=0;i[80889]=255;i[80875]=0;while(1){l=h<<1;b=l+323744|0;c=l+323745|0;l=2147483647;a=0;while(1){d=i[(a<<2)+323552>>2];p=o(d<<8|d,43)+32|0;e=0;while(1){d=i[(e<<2)+323552>>2];f=((p+o(d<<8|d,21)|0)/64>>8)-h|0;d=f>>31;d=d^d+f;if((d|0)<(l|0)){g[c|0]=e;g[b|0]=a;l=d}e=e+1|0;if((e|0)!=48){continue}break}a=a+1|0;if((a|0)!=48){continue}break}h=h+1|0;if((h|0)!=256){continue}break}l=0;while(1){h=2147483647;e=0;while(1){a=i[(e<<2)+323552>>2]-l|0;d=a>>31;d=d^a+d;if((d|0)<(h|0)){g[l+324256|0]=e;h=d}e=e+1|0;if((e|0)!=48){continue}break}l=l+1|0;if((l|0)!=256){continue}break}i[m+104>>2]=-556347706;i[m+108>>2]=-528409;i[m+96>>2]=-1667986300;i[m+100>>2]=-1112167003;i[m+88>>2]=1515342402;i[m+92>>2]=2071161699;i[m+80>>2]=403703808;i[m+84>>2]=959523105;a=0;while(1){h=a<<1;p=h+300769|0;f=h+300768|0;d=0;h=256;while(1){b=j[(m+80|0)+d|0];e=0;while(1){c=j[(m+80|0)+e|0];q=((b+(c<<1)>>>0)/3|0)-a|0;l=q>>31;n=c-b|0;c=n>>31;l=(((o(c^c+n,3)&65535)>>>0)/100|0)+(l^l+q)|0;if((l|0)<(h|0)){g[f|0]=e;g[p|0]=d;h=l}e=e+1|0;if((e|0)!=32){continue}break}d=d+1|0;if((d|0)!=32){continue}break}a=a+1|0;if((a|0)!=256){continue}break}h=0;while(1){l=h<<1;a=l+301281|0;b=l+301280|0;e=0;l=256;while(1){c=j[(m+80|0)+e|0]-h|0;d=c>>31;d=d^d+c;if((d|0)<(l|0)){g[b|0]=e;g[a|0]=0;l=d}e=e+1|0;if((e|0)!=32){continue}break}h=h+1|0;if((h|0)!=256){continue}break}a=0;e=0;while(1){g[(m+16|0)+e|0]=e<<2|e>>>4;e=e+1|0;if((e|0)!=64){continue}break}while(1){h=a<<1;p=h+301793|0;f=h+301792|0;d=0;h=256;while(1){b=j[(m+16|0)+d|0];e=0;while(1){c=j[(m+16|0)+e|0];q=((b+(c<<1)>>>0)/3|0)-a|0;l=q>>31;n=c-b|0;c=n>>31;l=(((o(c^c+n,3)&65535)>>>0)/100|0)+(l^l+q)|0;if((l|0)<(h|0)){g[f|0]=e;g[p|0]=d;h=l}e=e+1|0;if((e|0)!=64){continue}break}d=d+1|0;if((d|0)!=64){continue}break}a=a+1|0;if((a|0)!=256){continue}break}h=0;while(1){l=h<<1;a=l+302305|0;b=l+302304|0;e=0;l=256;while(1){c=j[(m+16|0)+e|0]-h|0;d=c>>31;d=d^d+c;if((d|0)<(l|0)){g[b|0]=e;g[a|0]=0;l=d}e=e+1|0;if((e|0)!=64){continue}break}h=h+1|0;if((h|0)!=256){continue}break}l=0;i[75715]=4;i[75710]=3;i[75711]=1;i[75705]=5;i[75706]=2;i[75707]=0;while(1){h=l<<2;d=j[j[h+290864|0]+28971|0];g[m+12|0]=d;g[m+8|0]=j[d+19508|0];d=j[j[h+290865|0]+28971|0];g[m+13|0]=d;g[m+9|0]=j[d+19508|0];d=j[j[h+290866|0]+28971|0];g[m+14|0]=d;g[m+10|0]=j[d+19508|0];h=j[j[h+290867|0]+28971|0];g[m+15|0]=h;g[m+11|0]=j[h+19508|0];e=0;while(1){h=e>>>6&3;d=j[h+(m+8|0)|0];a=e>>>4&3;b=j[a+(m+8|0)|0];c=e&3;p=j[c+(m+8|0)|0];f=e>>>2&3;q=j[f+(m+8|0)|0];n=(l<<8)+e|0;g[n+302880|0]=j[c+(m+12|0)|0]|j[f+(m+12|0)|0]<<2|j[a+(m+12|0)|0]<<4|j[h+(m+12|0)|0]<<6;g[n+305440|0]=p|q<<2|b<<4|d<<6;e=e+1|0;if((e|0)!=256){continue}break}l=l+1|0;if((l|0)!=10){continue}break}i[80467]=4;i[80462]=3;i[80463]=1;i[80457]=5;i[80458]=2;i[80483]=4;i[80478]=3;i[80479]=1;i[80473]=5;i[80474]=2;g[300752]=1;i[80459]=0;i[80475]=0}ha=m+112|0}function qc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=p(0),Q=0,R=0,S=0,T=0,U=0,V=0,W=p(0),X=p(0),Y=p(0),Z=p(0);n=ha-448|0;ha=n;a:{Q=o(c,15)+b|0;d=j[Q|0];R=o(c,14)+b|0;f=j[R|0];S=o(c,13)+b|0;r=j[S|0];T=o(c,12)+b|0;e=j[T|0];U=o(c,11)+b|0;s=j[U|0];G=o(c,10)+b|0;B=j[G|0];H=o(c,9)+b|0;t=j[H|0];I=(c<<3)+b|0;D=j[I|0];J=o(c,7)+b|0;u=j[J|0];K=o(c,6)+b|0;v=j[K|0];L=o(c,5)+b|0;w=j[L|0];M=(c<<2)+b|0;y=j[M|0];N=o(c,3)+b|0;z=j[N|0];O=(c<<1)+b|0;C=j[O|0];V=b+c|0;E=j[V|0];F=j[b|0];m=F>>>0>>0?E:F;m=m>>>0>>0?C:m;m=m>>>0>>0?z:m;m=m>>>0>>0?y:m;m=m>>>0>>0?w:m;m=m>>>0>>0?v:m;m=m>>>0>>0?u:m;m=m>>>0>>0?D:m;m=m>>>0>>0?t:m;m=m>>>0>>0?B:m;m=m>>>0>>0?s:m;m=m>>>0>>0?e:m;m=m>>>0>>0?r:m;m=m>>>0>>0?f:m;m=m>>>0>>0?d:m;E=F>>>0>E>>>0?E:F;C=E>>>0>C>>>0?C:E;z=C>>>0>z>>>0?z:C;y=z>>>0>y>>>0?y:z;w=y>>>0>w>>>0?w:y;v=w>>>0>v>>>0?v:w;u=v>>>0>u>>>0?u:v;D=u>>>0>D>>>0?D:u;t=D>>>0>t>>>0?t:D;B=t>>>0>B>>>0?B:t;s=B>>>0>s>>>0?s:B;e=s>>>0>e>>>0?e:s;r=e>>>0>r>>>0?r:e;f=r>>>0>f>>>0?f:r;d=f>>>0>d>>>0?d:f;b:{if((m|0)==(d|0)){h[a>>1]=d|3328;b=k[145594]|k[145595]<<16;h[a+2>>1]=b;h[a+4>>1]=b>>>16;h[a+6>>1]=k[145596];break b}f=m-d|0;if(f>>>0<=5){c=m+ -2|0;c=(c>>>0<256?c:c>>31^-1)&255;h[a>>1]=c|7424;e=j[b|0];b=3-c|0;f=e+b|0;if(f>>>0>=6){break a}d=b+j[V|0]|0;if(d>>>0>=6){break a}r=b+j[O|0]|0;if(r>>>0>5){break a}s=b+j[N|0]|0;if(s>>>0>5){break a}B=b+j[M|0]|0;if(B>>>0>5){break a}t=b+j[L|0]|0;if(t>>>0>5){break a}D=b+j[K|0]|0;if(D>>>0>5){break a}u=b+j[J|0]|0;if(u>>>0>5){break a}v=b+j[I|0]|0;if(v>>>0>5){break a}w=b+j[H|0]|0;if(w>>>0>5){break a}y=b+j[G|0]|0;if(y>>>0>5){break a}z=b+j[U|0]|0;if(z>>>0>5){break a}C=b+j[T|0]|0;if(C>>>0>5){break a}E=b+j[S|0]|0;if(E>>>0>5){break a}F=b+j[R|0]|0;if(F>>>0>5){break a}b=b+j[Q|0]|0;if(b>>>0>5){break a}m=j[b+297759|0];d=j[d+297759|0]<<1;b=j[f+297759|0]<<13;f=0;d=b|d;b=j[r+297759|0];e=b>>>11|0;b=b<<21|f;f=d|e;e=j[B+297759|0]<<10;c=b;d=j[s+297759|0];b=d>>>23|0;d=c|d<<9;f=e|(b|f);c=d;d=j[t+297759|0];b=d>>>2|0;d=c|d<<30;f=b|f;b=j[D+297759|0];e=b>>>14|0;c=b<<18|d;d=j[u+297759|0];b=d>>>26|0;d=c|d<<6;b=b|(f|e);e=j[v+297759|0]<<7;f=b|e;c=d;d=j[w+297759|0];b=d>>>5|0;d=c|d<<27;f=b|f;b=j[y+297759|0];e=b>>>17|0;b=b<<15|d;r=f|e;c=b;d=j[z+297759|0];b=d>>>29|0;f=c|d<<3;r=b|r;g[a+7|0]=f|m;e=j[C+297759|0]<<4;b=f;f=e|r;d=a;g[d+3|0]=f;g[d+2|0]=f>>>8;d=j[E+297759|0];e=d>>>8|0;d=b|d<<24;c=f|e;r=c;f=a;g[f+4|0]=(c&16777215)<<8|d>>>24;c=j[F+297759|0];b=c>>>20|0;c=d|c<<12;r=b|r;b=r;d=c;g[f+6|0]=(b&255)<<24|d>>>8;g[f+5|0]=(b&65535)<<16|d>>>16;break b}W=p(d>>>0);Y=p(p(m>>>0)-W);Z=p(f>>>0);d=0;while(1){e=d<<2;s=e+(n+320|0)|0;f=d<<3;r=g[f+28627|0];P=p(g[f+28631|0]-r|0);X=Na(p(Z/P));c:{if(p(q(X))>2]=(f|0)>1?f:1;e=e+(n+384|0)|0;P=Na(p(p(Y*p(p(0-r|0)/P))+W));d:{if(p(q(P))>2]=(f>>>0<256?f:f>>31^-1)&255;d=d+1|0;if((d|0)!=16){continue}break}i[n+312>>2]=0;i[n+316>>2]=0;i[n+304>>2]=0;i[n+308>>2]=0;i[n+296>>2]=0;i[n+300>>2]=0;i[n+288>>2]=0;i[n+292>>2]=0;i[n+280>>2]=0;i[n+284>>2]=0;i[n+272>>2]=0;i[n+276>>2]=0;i[n+264>>2]=0;i[n+268>>2]=0;i[n+256>>2]=0;i[n+260>>2]=0;t=0;while(1){d=t<<3;E=d+28631|0;F=d+28630|0;m=d+28629|0;Q=d+28628|0;R=d+28627|0;S=d+28626|0;T=d+28625|0;U=d+28624|0;f=t<<2;G=f+(n+256|0)|0;d=i[G>>2];s=i[f+(n+384|0)>>2];B=i[f+(n+320|0)>>2];D=0;r=-1;u=0;while(1){f=j[o(c,D)+b|0];e:{if((f|0)==(r|0)){g[((t<<4)+n|0)+D|0]=u&7;f=u>>>3|0;e=o(f,f);break e}r=s+o(B,g[E|0])|0;H=((r>>>0<256?r:r>>31^-1)&255)-f|0;r=H>>31;e=s+o(B,g[F|0])|0;I=((e>>>0<256?e:e>>31^-1)&255)-f|0;e=I>>31;u=s+o(B,g[m|0])|0;J=((u>>>0<256?u:u>>31^-1)&255)-f|0;u=J>>31;v=s+o(B,g[Q|0])|0;K=((v>>>0<256?v:v>>31^-1)&255)-f|0;v=K>>31;w=s+o(B,g[R|0])|0;L=((w>>>0<256?w:w>>31^-1)&255)-f|0;w=L>>31;y=s+o(B,g[S|0])|0;M=((y>>>0<256?y:y>>31^-1)&255)-f|0;y=M>>31;z=s+o(B,g[T|0])|0;N=((z>>>0<256?z:z>>31^-1)&255)-f|0;z=N>>31;C=s+o(B,g[U|0])|0;O=((C>>>0<256?C:C>>31^-1)&255)-f|0;C=O>>31;r=(r^r+H)<<3|7;e=(e^e+I)<<3|6;u=(u^u+J)<<3|5;v=(v^v+K)<<3|4;w=(w^w+L)<<3|3;y=(y^y+M)<<3|2;z=(z^z+N)<<3|1;C=(C^C+O)<<3;z=z>>>0>>0?z:C;y=y>>>0>>0?y:z;w=w>>>0>>0?w:y;v=v>>>0>>0?v:w;u=u>>>0>>0?u:v;e=e>>>0>>0?e:u;u=r>>>0>>0?r:e;g[((t<<4)+n|0)+D|0]=u&7;e=d;d=u>>>3|0;d=o(d,d);r=f}d=d+e|0;D=D+1|0;if((D|0)!=16){continue}break}i[G>>2]=d;t=t+1|0;if((t|0)!=16){continue}break}b=i[n+260>>2];c=i[n+256>>2];d=b>>>0>>0;f=i[n+264>>2];b=d?b:c;c=f>>>0>>0;e=c?2:d;d=i[n+268>>2];b=c?f:b;c=d>>>0>>0;e=c?3:e;f=i[n+272>>2];b=c?d:b;c=f>>>0>>0;e=c?4:e;d=i[n+276>>2];b=c?f:b;c=d>>>0>>0;e=c?5:e;f=i[n+280>>2];b=c?d:b;c=f>>>0>>0;e=c?6:e;d=i[n+284>>2];b=c?f:b;c=d>>>0>>0;e=c?7:e;f=i[n+288>>2];b=c?d:b;c=f>>>0>>0;e=c?8:e;d=i[n+292>>2];b=c?f:b;c=d>>>0>>0;e=c?9:e;f=i[n+296>>2];b=c?d:b;c=f>>>0>>0;e=c?10:e;d=i[n+300>>2];b=c?f:b;c=d>>>0>>0;e=c?11:e;f=i[n+304>>2];b=c?d:b;c=f>>>0>>0;e=c?12:e;d=i[n+308>>2];b=c?f:b;c=d>>>0>>0;e=c?13:e;f=i[n+312>>2];b=c?d:b;c=f>>>0>>0;b=l[n+316>>2]<(c?f:b)>>>0?15:c?14:e;c=b<<2;h[a>>1]=j[c+(n+384|0)|0]|b<<8&3840|k[c+(n+320|0)>>1]<<12;s=(b<<4)+n|0;b=s;r=j[b+14|0];f=j[b+13|0];c=j[b+12|0];B=j[b+15|0];D=j[b+1|0]<<1|j[b|0]<<13;e=j[b+2|0];b=e>>>11|0;e=e<<21;t=b|D;d=e;e=j[s+3|0];b=e>>>23|0;e=d|e<<9;t=b|t|j[s+4|0]<<10;d=e;e=j[s+5|0];b=e>>>2|0;e=d|e<<30;t=b|t;d=e;e=j[s+6|0];b=e>>>14|0;e=d|e<<18;t=b|t;d=e;e=j[s+7|0];b=e>>>26|0;e=d|e<<6;t=b|t|j[s+8|0]<<7;d=e;e=j[s+9|0];b=e>>>5|0;e=d|e<<27;t=b|t;d=e;e=j[s+10|0];b=e>>>17|0;e=d|e<<15;t=b|t;d=e;e=j[s+11|0];b=e>>>29|0;s=d|e<<3;g[a+7|0]=s|B;e=c<<4;c=s;e=b|t|e;d=e;b=a;g[b+3|0]=d;g[b+2|0]=d>>>8;d=d|f>>>8;s=d;e=b;c=c|f<<24;g[b+4|0]=(d&16777215)<<8|c>>>24;d=r;b=d>>>20|0;c=c|d<<12;r=b|s;b=r;f=e;d=c;g[f+6|0]=(b&255)<<24|d>>>8;g[f+5|0]=(b&65535)<<16|d>>>16}ha=n+448|0;return}A(297716,19512,15963,297737);x()}function tb(a,b,c){var d=0,e=0,f=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;k=ha-32|0;ha=k;a:{if(i[a+104>>2]==8){b=i[a+120>>2];g[c+3|0]=b<<5|j[a+119|0]<<1|b<<2;d=i[a+140>>2];b=c;b:{if(j[a+119|0]){g[c|0]=d<<3;g[c+1|0]=j[a+144|0]<<3;d=j[a+148|0]<<3;break b}g[c|0]=d|d<<4;d=i[a+144>>2];g[c+1|0]=d<<4|d;d=i[a+148>>2];d=d<<4|d}g[b+2|0]=d;a=i[(i[a+136>>2]<<2)+26080>>2];g[c+4|0]=a;g[c+5|0]=a>>>8;g[c+6|0]=a>>>16;g[c+7|0]=a>>>24;break a}d=j[a+118|0];q=j[a+119|0];g[c+3|0]=d|q<<1|i[a+120>>2]<<5|i[a+124>>2]<<2;d=d<<5;l=((j[d+26111|0]<<4)+b|0)+(j[d+26110|0]<<2)|0;t=j[l|0];m=((j[d+26109|0]<<4)+b|0)+(j[d+26108|0]<<2)|0;u=j[m|0];f=((j[d+26107|0]<<4)+b|0)+(j[d+26106|0]<<2)|0;C=j[f|0];p=((j[d+26105|0]<<4)+b|0)+(j[d+26104|0]<<2)|0;v=j[p|0];e=((j[d+26103|0]<<4)+b|0)+(j[d+26102|0]<<2)|0;w=j[e|0];r=((j[d+26101|0]<<4)+b|0)+(j[d+26100|0]<<2)|0;x=j[r|0];n=((j[d+26099|0]<<4)+b|0)+(j[d+26098|0]<<2)|0;y=j[n|0];s=((j[d+26097|0]<<4)+b|0)+(j[d+26096|0]<<2)|0;z=j[s|0];A=j[l+1|0];B=j[m+1|0];D=j[f+1|0];E=j[p+1|0];F=j[e+1|0];G=j[r+1|0];H=j[n+1|0];I=j[s+1|0];l=j[l+2|0];m=j[m+2|0];f=j[f+2|0];p=j[p+2|0];e=j[e+2|0];r=j[r+2|0];n=j[n+2|0];s=j[s+2|0];g[k+11|0]=0;e=(m+(f+(p+(e+(r+(n+s|0)|0)|0)|0)|0)|0)+l|0;l=q?31:15;g[k+10|0]=((o(e,l)+1020&65535)>>>0)/2040;g[k+9|0]=((o(l,A+(B+(D+(E+(F+(G+(H+I|0)|0)|0)|0)|0)|0)|0)+1020&65535)>>>0)/2040;g[k+8|0]=((o(l,t+(u+(C+(v+(w+(x+(y+z|0)|0)|0)|0)|0)|0)|0)+1020&65535)>>>0)/2040;if(!(7424>>>i[a+104>>2]&1)){qb(k+16|0,k+8|0,i[a+128>>2],l,0);i[k+8>>2]=i[k+16>>2]}m=((j[d+26127|0]<<4)+b|0)+(j[d+26126|0]<<2)|0;t=j[m|0];f=((j[d+26125|0]<<4)+b|0)+(j[d+26124|0]<<2)|0;u=j[f|0];p=((j[d+26123|0]<<4)+b|0)+(j[d+26122|0]<<2)|0;C=j[p|0];e=((j[d+26121|0]<<4)+b|0)+(j[d+26120|0]<<2)|0;v=j[e|0];r=((j[d+26119|0]<<4)+b|0)+(j[d+26118|0]<<2)|0;w=j[r|0];n=((j[d+26117|0]<<4)+b|0)+(j[d+26116|0]<<2)|0;x=j[n|0];s=((j[d+26115|0]<<4)+b|0)+(j[d+26114|0]<<2)|0;y=j[s|0];d=((j[d+26113|0]<<4)+b|0)+(j[d+26112|0]<<2)|0;z=j[d|0];A=j[m+1|0];B=j[f+1|0];D=j[p+1|0];E=j[e+1|0];F=j[r+1|0];G=j[n+1|0];H=j[s+1|0];I=j[d+1|0];m=j[m+2|0];f=j[f+2|0];p=j[p+2|0];e=j[e+2|0];r=j[r+2|0];n=j[n+2|0];s=j[s+2|0];d=j[d+2|0];g[k+15|0]=0;f=((o(l,m+(f+(p+(e+(r+(n+(d+s|0)|0)|0)|0)|0)|0)|0)+1020&65535)>>>0)/2040|0;g[k+14|0]=f;p=((o(l,A+(B+(D+(E+(F+(G+(H+I|0)|0)|0)|0)|0)|0)|0)+1020&65535)>>>0)/2040|0;g[k+13|0]=p;d=((o(l,t+(u+(C+(v+(w+(x+(y+z|0)|0)|0)|0)|0)|0)|0)+1020&65535)>>>0)/2040|0;g[k+12|0]=d;if(!(7424>>>i[a+104>>2]&1)){qb(k+16|0,k+8|4,i[a+128>>2],l,1);d=i[k+16>>2];i[k+12>>2]=d;p=d>>>8|0;f=d>>>16|0}c:{if(!q){g[c|0]=j[k+8|0]<<4|d;d=j[k+10|0]<<4|f;a=j[k+9|0]<<4|p;break c}a=j[k+9|0];l=j[k+10|0];q=j[k+8|0];d=(d&255)-q|0;d=(d|0)<3?d:3;d=(d|0)>-4?d:-4;g[c|0]=((d|0)<0?d+8|0:d)|q<<3;d=(f&255)-l|0;d=(d|0)<3?d:3;d=(d|0)>-4?d:-4;d=l<<3|((d|0)<0?d+8|0:d);u=a<<3;a=(p&255)-a|0;a=(a|0)<3?a:3;a=(a|0)>-4?a:-4;a=u|((a|0)<0?a+8|0:a)}g[c+2|0]=d;g[c+1|0]=a;r=0;n=0;p=0;while(1){ac(c,k+16|0,p);a=(o(j[k+25|0],183)+o(j[k+24|0],54)|0)+o(j[k+26|0],19)|0;d=(o(j[k+21|0],183)+o(j[k+20|0],54)|0)+o(j[k+22|0],19)|0;l=a+d|0;q=d+((o(j[k+17|0],183)+o(j[k+16|0],54)|0)+o(j[k+18|0],19)|0)|0;m=((a+o(j[k+28|0],54)|0)+o(j[k+29|0],183)|0)+o(j[k+30|0],19)|0;d=p<<3;a=p<<1;d:{if(g[c+3|0]&1){f=d<<2;e=f+b|0;e=(o(j[e+1|0],366)+o(j[e|0],108)|0)+o(j[e+2|0],38)|0;v=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;e=(f|24)+b|0;e=(o(j[e+1|0],366)+o(j[e|0],108)|0)+o(j[e+2|0],38)|0;w=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;e=(f|20)+b|0;e=(o(j[e+1|0],366)+o(j[e|0],108)|0)+o(j[e+2|0],38)|0;x=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;e=(f|16)+b|0;e=(o(j[e+1|0],366)+o(j[e|0],108)|0)+o(j[e+2|0],38)|0;y=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;e=(f|12)+b|0;e=(o(j[e+1|0],366)+o(j[e|0],108)|0)+o(j[e+2|0],38)|0;z=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;e=(f|8)+b|0;e=(o(j[e+1|0],366)+o(j[e|0],108)|0)+o(j[e+2|0],38)|0;A=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;f=(f|4)+b|0;f=(o(j[f+1|0],366)+o(j[f|0],108)|0)+o(j[f+2|0],38)|0;B=((f>>>0>>0)+(f>>>0>>0)|0)+(f>>>0>>0)|0;D=d|7;f=a+12|0;d=a+4|0;e=a|1;s=e+12|0;t=e+8|0;C=a+8|0;u=e+4|0;break d}f=(a<<2)+b|0;e=(o(j[f+1|0],366)+o(j[f|0],108)|0)+o(j[f+2|0],38)|0;v=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;t=a|1;a=(t<<2)+b|0;e=(o(j[a+1|0],366)+o(j[a|0],108)|0)+o(j[a+2|0],38)|0;y=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;e=(o(j[f+49|0],366)+o(j[f+48|0],108)|0)+o(j[f+50|0],38)|0;z=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;e=(o(j[f+33|0],366)+o(j[f+32|0],108)|0)+o(j[f+34|0],38)|0;A=((e>>>0>>0)+(e>>>0>>0)|0)+(e>>>0>>0)|0;f=(o(j[f+17|0],366)+o(j[f+16|0],108)|0)+o(j[f+18|0],38)|0;B=((f>>>0>>0)+(f>>>0>>0)|0)+(f>>>0>>0)|0;f=(o(j[a+33|0],366)+o(j[a+32|0],108)|0)+o(j[a+34|0],38)|0;w=((f>>>0>>0)+(f>>>0>>0)|0)+(f>>>0>>0)|0;a=(o(j[a+17|0],366)+o(j[a+16|0],108)|0)+o(j[a+18|0],38)|0;x=((a>>>0>>0)+(a>>>0>>0)|0)+(a>>>0>>0)|0;s=d|7;D=t+12|0;f=d|3;t=f+3|0;e=f+1|0;a=d;d=d|1;C=d+1|0;u=f+2|0}v=j[v+297662|0];B=j[B+297662|0];A=j[A+297662|0];z=j[z+297662|0];y=j[y+297662|0];x=j[x+297662|0];w=j[w+297662|0];E=v>>>1<>>1<>>1<>>1<>>1<>>1<>>1<>>0>>0)+(n>>>0>>0)|0)+(n>>>0>>0)|0)+297662|0];n=E|l>>>1<>>8;h[c+6>>1]=(r<<8&16711680|r<<24)>>>16}ha=k+32|0}function ec(a,b,c,d,e,f,j,l){var m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0;u=ha-16|0;ha=u;p=i[f+28>>2];s=i[f+32>>2];B=o(p,s);a:{b:{c:{d:{e:{f:{g:{if(b+ -13>>>0<=3){r=i[f+20>>2];t=i[f+24>>2];if(o(r,t)>>>0<=d>>>0){break g}break d}if(b>>>0>21){break a}n=1<>2]+7>>>3|0,i[f+24>>2]+3>>>2|0)<<4>>>0>d>>>0){break d}break f}m=16}n=0;if(o(m,B)>>>0>d>>>0){break d}}d=8;if((b&-2)==8){if((Xd(p<<2)|0)!=1){break d}if((Xd(s<<2)|0)!=1){break d}}i:{switch(b|0){case 14:case 15:case 16:d=2;break e;case 13:break i;case 0:case 2:case 4:case 8:case 9:case 11:case 18:case 19:case 20:break e;case 1:case 3:case 5:case 6:case 7:case 10:case 12:case 17:case 21:break f;default:break a}}d=4;break e}d=16}q=j&4;m=i[f+16>>2];w=q>>>2&(m|0)!=0;j=i[f+4>>2];v=i[f+12>>2];C=!m;y=C|!q;z=y?j:v;q=i[f+8>>2];y=y?q:m;j:{switch(b|0){case 2:n=za(a,c,p,s,e+z|0,y,2,d,1,l,w,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 4:n=za(a,c,p,s,e+z|0,y,4,d,1,l,w,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 8:n=za(a,c,p,s,e+z|0,y,6,d,1,l,w,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 9:if(!m){break c}i[u+8>>2]=0;i[u>>2]=0;i[u+4>>2]=0;k:{if(!B){b=0;j=0;break k}if(B>>>0>=1073741824){break b}j=B<<2;b=xa(j);i[u>>2]=b;q=b+j|0;i[u+8>>2]=q;j=ya(b,0,j);i[u+4>>2]=q}if(za(a,j,p,s,e+v|0,m,20,4,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){n=za(a,c,i[f+28>>2],i[f+32>>2],i[f+4>>2]+e|0,i[f+8>>2],7,d,1,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,1,j,t)}if(!b){break d}i[u+4>>2]=b;wa(b);break d;case 6:n=za(a,c,p,s,e+j|0,q,9,d,1,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);if(n^1|C){break d}n=za(a,c,i[f+28>>2],i[f+32>>2],i[f+12>>2]+e|0,i[f+16>>2],10,d,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 1:l:{if(!m){if(!s|!p){break l}w=o(d,p);q=k[145594]|k[145595]<<16;v=k[145596];while(1){b=o(n,w);j=0;while(1){m=b+c|0;g[m|0]=7679;g[m+1|0]=29;g[m+2|0]=q;g[m+3|0]=q>>>8;g[m+4|0]=q>>>16;g[m+5|0]=q>>>24;g[m+6|0]=v;g[m+7|0]=v>>>8;b=b+d|0;j=j+1|0;if((p|0)!=(j|0)){continue}break}n=n+1|0;if((s|0)!=(n|0)){continue}break}break l}if(!za(a,c,p,s,e+v|0,m,11,d,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){break d}}n=za(a,c+8|0,i[f+28>>2],i[f+32>>2],i[f+4>>2]+e|0,i[f+8>>2],0,d,1,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 3:m:{if(!m){h[u+4>>1]=0;i[u>>2]=0;if(!s|!p){break m}v=o(d,p);while(1){b=o(n,v);j=0;while(1){m=b+c|0;g[m|0]=65535;g[m+1|0]=255;q=i[u>>2];g[m+2|0]=q;g[m+3|0]=q>>>8;g[m+4|0]=q>>>16;g[m+5|0]=q>>>24;q=k[u+4>>1];g[m+6|0]=q;g[m+7|0]=q>>>8;b=b+d|0;j=j+1|0;if((p|0)!=(j|0)){continue}break}n=n+1|0;if((s|0)!=(n|0)){continue}break}break m}if(!za(a,c,p,s,e+v|0,m,4,d,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){break d}}n=za(a,c+8|0,i[f+28>>2],i[f+32>>2],i[f+4>>2]+e|0,i[f+8>>2],2,d,0,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 5:if(!za(a,c,p,s,e+j|0,q,4,d,0,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){break d}if(m){n=za(a,c+8|0,i[f+28>>2],i[f+32>>2],i[f+12>>2]+e|0,i[f+16>>2],4,d,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d}e=i[f+32>>2];b=i[f+28>>2];r=0;h[u+4>>1]=0;i[u>>2]=0;if(!(!e|!b)){f=c+8|0;j=o(b,d);while(1){p=o(j,r);n=0;while(1){a=f+p|0;g[a|0]=65535;g[a+1|0]=255;c=i[u>>2];g[a+2|0]=c;g[a+3|0]=c>>>8;g[a+4|0]=c>>>16;g[a+5|0]=c>>>24;c=k[u+4>>1];g[a+6|0]=c;g[a+7|0]=c>>>8;p=d+p|0;n=n+1|0;if((b|0)!=(n|0)){continue}break}r=r+1|0;if((e|0)!=(r|0)){continue}break}}n=1;break d;case 10:if(m){if(!za(a,c,p,s,e+v|0,m,20,d,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){break d}q=i[f+8>>2];s=i[f+32>>2];p=i[f+28>>2];j=i[f+4>>2]}n=za(a,c,p,s,e+j|0,q,12,d,1,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,(m|0)!=0,0,t);break d;case 14:case 15:n=za(a,c,p,s,e+z|0,y,(b|0)==14?24:25,2,1,l,w,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 16:if(m){if(!za(a,c,p,s,e+v|0,m,27,2,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){break d}q=i[f+8>>2];j=i[f+4>>2];s=i[f+32>>2];p=i[f+28>>2];b=26}else{b=28}n=za(a,c,p,s,e+j|0,q,b,2,1,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 13:if(m){if(!za(a,c,p,s,e+v|0,m,23,4,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){break d}q=i[f+8>>2];j=i[f+4>>2];s=i[f+32>>2];p=i[f+28>>2];b=21}else{b=22}n=za(a,c,p,s,e+j|0,q,b,4,1,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 20:n=za(a,c,p,s,e+z|0,y,18,d,1,l,w,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;case 21:n:{if(!m){if(!s|!p){break n}w=c+8|0;z=o(d,p);q=k[145594]|k[145595]<<16;v=k[145596];while(1){b=o(n,z);j=0;while(1){m=b+w|0;g[m|0]=7679;g[m+1|0]=29;g[m+2|0]=q;g[m+3|0]=q>>>8;g[m+4|0]=q>>>16;g[m+5|0]=q>>>24;g[m+6|0]=v;g[m+7|0]=v>>>8;b=b+d|0;j=j+1|0;if((p|0)!=(j|0)){continue}break}n=n+1|0;if((s|0)!=(n|0)){continue}break}break n}if(!za(a,c+8|0,p,s,e+v|0,m,18,d,1,l,1,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)){break d}}n=za(a,c,i[f+28>>2],i[f+32>>2],i[f+4>>2]+e|0,i[f+8>>2],18,d,1,l,0,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t);break d;default:A(19820,19512,9741,19947);x();case 0:break j;case 11:case 12:case 17:case 18:case 19:break d}}n=za(a,c,p,s,e+z|0,y,0,d,1,l,w,i[f+36>>2],i[f+20>>2],i[f+24>>2],r,0,0,t)}ha=u+16|0;return n}A(19938,19512,9162,19947);x()}Ja();x()}A(19820,19512,10859,19963);x()}function Ea(a,b,c,d,e){var f=0,h=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0;f=ha-416|0;ha=f;a:{b:{if((a|0)==8){i[e>>2]=i[c>>2];i[e+4>>2]=i[c>>2];i[e+8>>2]=i[c>>2];i[e+12>>2]=i[c>>2];i[e+16>>2]=i[c>>2];i[e+20>>2]=i[c>>2];i[e+24>>2]=i[c>>2];i[e+28>>2]=i[c>>2];i[e+32>>2]=i[c>>2];i[e+36>>2]=i[c>>2];i[e+40>>2]=i[c>>2];i[e+44>>2]=i[c>>2];i[e+48>>2]=i[c>>2];i[e+52>>2]=i[c>>2];i[e+56>>2]=i[c>>2];i[e+60>>2]=i[c>>2];break b}l=j[a+21824|0];p=j[a+21856|0];k=j[a+21920|0];c=a+ -8|0;n=c>>>0>6?k:4;c:{if((n|0)!=2){m=p>>>0>1?p:1;u=n>>>0>3?n:3;q=c>>>0<7;w=(l<<9)+308e3|0;y=d+21|0;while(1){if(n){t=o(n,s);r=(f+384|0)+(s<<3)|0;v=r|4;c=0;while(1){if((c|0)==4){break a}l=c+t<<1;g[c+r|0]=j[w+(j[l+y|0]<<1)|0];g[c+v|0]=j[w+(j[y+(l|1)|0]<<1)|0];c=c+1|0;if((n|0)!=(c|0)){continue}break}}if(!q){r=(f+384|0)+(s<<3)|0;v=r|4;c=k;while(1){g[c+r|0]=255;g[c+v|0]=255;l=(c|0)!=(u|0);c=c+1|0;if(l){continue}break}}s=s+1|0;if((m|0)!=(s|0)){continue}break}break c}k=p>>>0>1?p:1;q=d+21|0;t=(l<<9)+308e3|0;while(1){r=u<<2;v=j[t+(j[r+q|0]<<1)|0];c=j[t+(j[q+(r|2)|0]<<1)|0];l=j[t+(j[q+(r|1)|0]<<1)|0];m=(f+384|0)+(u<<3)|0;g[m+7|0]=j[t+(j[q+(r|3)|0]<<1)|0];g[m+6|0]=l;g[m+5|0]=l;g[m+4|0]=l;g[m+3|0]=c;g[m+2|0]=v;g[m+1|0]=v;g[m|0]=v;u=u+1|0;if((k|0)!=(u|0)){continue}break}}r=p>>>0>1?p:1;c=j[a+21760|0];h=1<>>0>1?h:1;u=i[(c<<2)+25792>>2];s=0;while(1){w=(f+384|0)+(s<<3)|0;y=w|4;m=0;while(1){k=m<<2;p=k+((s<<7)+f|0)|0;c=0;d:{e:{f:{g:{switch(n|0){default:l=k+u|0;while(1){if((c|0)==4){break a}k=j[c+y|0];q=k<<8|k;k=i[l>>2];q=o(q,k);t=64-k|0;k=j[c+w|0];g[c+p|0]=(q+o(t,k<<8|k)|0)+32>>>14;c=c+1|0;if((n|0)!=(c|0)){continue}break}break f;case 0:break e;case 2:break g}}q=j[w|0];t=j[y|0];l=i[k+u>>2];k=64-l|0;c=j[y+3|0];z=o(l,c<<8|c);c=j[w+3|0];g[p+3|0]=(z+o(k,c|c<<8)|0)+32>>>14;c=(o(l,t|t<<8)+o(k,q|q<<8)|0)+32>>>14|0;g[p+2|0]=c;g[p+1|0]=c;g[p|0]=c;break d}c=n;if(c>>>0>3){break d}}ya(c+p|0,255,4-c|0)}m=m+1|0;if((v|0)!=(m|0)){continue}break}s=s+1|0;if((r|0)!=(s|0)){continue}break}c=25552;h:{if(!(66204>>>a&1)){break h}i:{switch(a+ -3|0){case 0:c=(b<<4)+20912|0;break h;case 4:c=(b<<4)+21088|0;break h;default:break i}}c=(b<<4)+20432|0}b=457827>>>a&1;j:{k:{l:{m:{n:{if(382655>>>a&1){a=j[d+39|0];if(b){if(h>>>0<=a>>>0){break n}i[e>>2]=i[(a<<2)+f>>2];a=j[d+40|0];if(h>>>0<=a>>>0){break n}i[e+4>>2]=i[(a<<2)+f>>2];a=j[d+41|0];if(h>>>0<=a>>>0){break n}i[e+8>>2]=i[(a<<2)+f>>2];a=j[d+42|0];if(h>>>0<=a>>>0){break n}i[e+12>>2]=i[(a<<2)+f>>2];a=j[d+43|0];if(h>>>0<=a>>>0){break n}i[e+16>>2]=i[(a<<2)+f>>2];a=j[d+44|0];if(h>>>0<=a>>>0){break n}i[e+20>>2]=i[(a<<2)+f>>2];a=j[d+45|0];if(h>>>0<=a>>>0){break n}i[e+24>>2]=i[(a<<2)+f>>2];a=j[d+46|0];if(h>>>0<=a>>>0){break n}i[e+28>>2]=i[(a<<2)+f>>2];a=j[d+47|0];if(h>>>0<=a>>>0){break n}i[e+32>>2]=i[(a<<2)+f>>2];a=j[d+48|0];if(h>>>0<=a>>>0){break n}i[e+36>>2]=i[(a<<2)+f>>2];a=j[d+49|0];if(h>>>0<=a>>>0){break n}i[e+40>>2]=i[(a<<2)+f>>2];a=j[d+50|0];if(h>>>0<=a>>>0){break n}i[e+44>>2]=i[(a<<2)+f>>2];a=j[d+51|0];if(h>>>0<=a>>>0){break n}i[e+48>>2]=i[(a<<2)+f>>2];a=j[d+52|0];if(h>>>0<=a>>>0){break n}i[e+52>>2]=i[(a<<2)+f>>2];a=j[d+53|0];if(h>>>0<=a>>>0){break n}i[e+56>>2]=i[(a<<2)+f>>2];a=j[d+54|0];if(h>>>0<=a>>>0){break n}c=(a<<2)+f|0;break j}if(h>>>0<=a>>>0){break m}i[e>>2]=i[((j[c|0]<<7)+f|0)+(a<<2)>>2];a=j[d+40|0];if(h>>>0<=a>>>0){break m}i[e+4>>2]=i[((j[c+1|0]<<7)+f|0)+(a<<2)>>2];a=j[d+41|0];if(h>>>0<=a>>>0){break m}i[e+8>>2]=i[((j[c+2|0]<<7)+f|0)+(a<<2)>>2];a=j[d+42|0];if(h>>>0<=a>>>0){break m}i[e+12>>2]=i[((j[c+3|0]<<7)+f|0)+(a<<2)>>2];a=j[d+43|0];if(h>>>0<=a>>>0){break m}i[e+16>>2]=i[((j[c+4|0]<<7)+f|0)+(a<<2)>>2];a=j[d+44|0];if(h>>>0<=a>>>0){break m}i[e+20>>2]=i[((j[c+5|0]<<7)+f|0)+(a<<2)>>2];a=j[d+45|0];if(h>>>0<=a>>>0){break m}i[e+24>>2]=i[((j[c+6|0]<<7)+f|0)+(a<<2)>>2];a=j[d+46|0];if(h>>>0<=a>>>0){break m}i[e+28>>2]=i[((j[c+7|0]<<7)+f|0)+(a<<2)>>2];a=j[d+47|0];if(h>>>0<=a>>>0){break m}i[e+32>>2]=i[((j[c+8|0]<<7)+f|0)+(a<<2)>>2];a=j[d+48|0];if(h>>>0<=a>>>0){break m}i[e+36>>2]=i[((j[c+9|0]<<7)+f|0)+(a<<2)>>2];a=j[d+49|0];if(h>>>0<=a>>>0){break m}i[e+40>>2]=i[((j[c+10|0]<<7)+f|0)+(a<<2)>>2];a=j[d+50|0];if(h>>>0<=a>>>0){break m}i[e+44>>2]=i[((j[c+11|0]<<7)+f|0)+(a<<2)>>2];a=j[d+51|0];if(h>>>0<=a>>>0){break m}i[e+48>>2]=i[((j[c+12|0]<<7)+f|0)+(a<<2)>>2];a=j[d+52|0];if(h>>>0<=a>>>0){break m}i[e+52>>2]=i[((j[c+13|0]<<7)+f|0)+(a<<2)>>2];a=j[d+53|0];if(h>>>0<=a>>>0){break m}i[e+56>>2]=i[((j[c+14|0]<<7)+f|0)+(a<<2)>>2];a=j[d+54|0];if(h>>>0<=a>>>0){break m}c=((j[c+15|0]<<7)+f|0)+(a<<2)|0;break j}if(!b){break l}c=0;k=d+39|0;while(1){a=c<<1;b=j[a+k|0];if(h>>>0<=b>>>0){break k}a=j[k+(a|1)|0];if(h>>>0<=a>>>0){break k}n=(c<<2)+e|0;b=(b<<2)+f|0;a=(a<<2)+f|0;g[n|0]=j[(i[d+16>>2]?b:a)|0];g[n+1|0]=j[(i[d+16>>2]==1?a:b)+1|0];g[n+2|0]=j[(i[d+16>>2]==2?a:b)+2|0];g[n+3|0]=j[(i[d+16>>2]==3?a:b)+3|0];c=c+1|0;if((c|0)!=16){continue}break}break b}A(25816,19512,12730,25773);x()}A(25816,19512,12738,25773);x()}A(25850,19512,12745,25773);x()}A(25869,19512,12754,25773);x()}i[e+60>>2]=i[c>>2]}ha=f+416|0;return}A(90824,90648,685,90832);x()}function yb(a,b,c){var d=0,e=0,f=0;e=ha-16|0;ha=e;d=j[b+4|0]|j[b+5|0]<<8|(j[b+6|0]<<16|j[b+7|0]<<24);f=j[b|0]|j[b+1|0]<<8|(j[b+2|0]<<16|j[b+3|0]<<24);g[a|0]=f;g[a+1|0]=f>>>8;g[a+2|0]=f>>>16;g[a+3|0]=f>>>24;g[a+4|0]=d;g[a+5|0]=d>>>8;g[a+6|0]=d>>>16;g[a+7|0]=d>>>24;d=j[b+12|0]|j[b+13|0]<<8|(j[b+14|0]<<16|j[b+15|0]<<24);b=j[b+8|0]|j[b+9|0]<<8|(j[b+10|0]<<16|j[b+11|0]<<24);g[a+8|0]=b;g[a+9|0]=b>>>8;g[a+10|0]=b>>>16;g[a+11|0]=b>>>24;g[a+12|0]=d;g[a+13|0]=d>>>8;g[a+14|0]=d>>>16;g[a+15|0]=d>>>24;if(j[c+8|0]){g[a+15|0]=j[a+14|0];b=j[a+12|0]|j[a+13|0]<<8;g[a+13|0]=b;g[a+14|0]=b>>>8;g[a+11|0]=j[a+10|0];b=j[a+8|0]|j[a+9|0]<<8;g[a+9|0]=b;g[a+10|0]=b>>>8;g[a+7|0]=j[a+6|0];b=j[a+4|0]|j[a+5|0]<<8;g[a+5|0]=b;g[a+6|0]=b>>>8;g[a+3|0]=j[a+2|0];b=j[a|0]|j[a+1|0]<<8;g[a+1|0]=b;g[a+2|0]=b>>>8}if(j[c+9|0]){b=j[a+12|0]|j[a+13|0]<<8|(j[a+14|0]<<16|j[a+15|0]<<24);d=j[a+8|0]|j[a+9|0]<<8|(j[a+10|0]<<16|j[a+11|0]<<24);g[a+12|0]=d;g[a+13|0]=d>>>8;g[a+14|0]=d>>>16;g[a+15|0]=d>>>24;d=j[a+4|0]|j[a+5|0]<<8|(j[a+6|0]<<16|j[a+7|0]<<24);f=j[a|0]|j[a+1|0]<<8|(j[a+2|0]<<16|j[a+3|0]<<24);g[a+4|0]=f;g[a+5|0]=f>>>8;g[a+6|0]=f>>>16;g[a+7|0]=f>>>24;g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a|0]=b;g[a+1|0]=b>>>8;g[a+2|0]=b>>>16;g[a+3|0]=b>>>24}_b(e,a,j[c+6|0],j[c+12|0]);b=i[e+12>>2];d=i[e+8>>2];g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];d=i[e>>2];g[a|0]=d;g[a+1|0]=d>>>8;g[a+2|0]=d>>>16;g[a+3|0]=d>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24;if(j[c+7|0]){Yb(e,a);b=i[e+12>>2];d=i[e+8>>2];g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];d=i[e>>2];g[a|0]=d;g[a+1|0]=d>>>8;g[a+2|0]=d>>>16;g[a+3|0]=d>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24}if(j[c+10|0]){Xb(e,a);b=i[e+12>>2];d=i[e+8>>2];g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];d=i[e>>2];g[a|0]=d;g[a+1|0]=d>>>8;g[a+2|0]=d>>>16;g[a+3|0]=d>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24}if(j[c+11|0]){Wb(e,a);b=i[e+12>>2];d=i[e+8>>2];g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];d=i[e>>2];g[a|0]=d;g[a+1|0]=d>>>8;g[a+2|0]=d>>>16;g[a+3|0]=d>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24}if(j[c+1|0]){Vb(e,a);b=i[e+12>>2];d=i[e+8>>2];g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];d=i[e>>2];g[a|0]=d;g[a+1|0]=d>>>8;g[a+2|0]=d>>>16;g[a+3|0]=d>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24}if(j[c+3|0]){g[a+13|0]=j[j[a+13|0]+90897|0];g[a+12|0]=j[j[a+12|0]+90897|0];g[a+11|0]=j[j[a+11|0]+90897|0];g[a+10|0]=j[j[a+10|0]+90897|0];g[a+9|0]=j[j[a+9|0]+90897|0];g[a+8|0]=j[j[a+8|0]+90897|0];g[a+7|0]=j[j[a+7|0]+90897|0];g[a+6|0]=j[j[a+6|0]+90897|0];g[a+5|0]=j[j[a+5|0]+90897|0];g[a+4|0]=j[j[a+4|0]+90897|0];g[a+3|0]=j[j[a+3|0]+90897|0];g[a+2|0]=j[j[a+2|0]+90897|0];g[a+1|0]=j[j[a+1|0]+90897|0];g[a|0]=j[j[a|0]+90897|0];b=j[j[a+14|0]+90897|0]|j[j[a+15|0]+90897|0]<<8;g[a+14|0]=b;g[a+15|0]=b>>>8}if(j[c+4|0]){Ub(e,a);b=i[e+12>>2];d=i[e+8>>2];g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];d=i[e>>2];g[a|0]=d;g[a+1|0]=d>>>8;g[a+2|0]=d>>>16;g[a+3|0]=d>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24}b=j[c|0];if(b){Tb(e,a,b);b=i[e+12>>2];d=i[e+8>>2];g[a+8|0]=d;g[a+9|0]=d>>>8;g[a+10|0]=d>>>16;g[a+11|0]=d>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];d=i[e>>2];g[a|0]=d;g[a+1|0]=d>>>8;g[a+2|0]=d>>>16;g[a+3|0]=d>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24}if(j[c+5|0]){g[a+15|0]=3-j[a+15|0];g[a+14|0]=3-j[a+14|0];g[a+13|0]=3-j[a+13|0];g[a+12|0]=3-j[a+12|0];g[a+11|0]=3-j[a+11|0];g[a+10|0]=3-j[a+10|0];g[a+9|0]=3-j[a+9|0];g[a+8|0]=3-j[a+8|0];g[a+7|0]=3-j[a+7|0];g[a+6|0]=3-j[a+6|0];g[a+5|0]=3-j[a+5|0];g[a+4|0]=3-j[a+4|0];g[a+3|0]=3-j[a+3|0];g[a+2|0]=3-j[a+2|0];g[a+1|0]=3-j[a+1|0];g[a|0]=3-j[a|0]}if(j[c+2|0]){Sb(e,a);b=i[e+12>>2];c=i[e+8>>2];g[a+8|0]=c;g[a+9|0]=c>>>8;g[a+10|0]=c>>>16;g[a+11|0]=c>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;b=i[e+4>>2];c=i[e>>2];g[a|0]=c;g[a+1|0]=c>>>8;g[a+2|0]=c>>>16;g[a+3|0]=c>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24}ha=e+16|0}function tc(a,b,c,d,e,f,l,m,n,p,q,r,s,t,u){var v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;v=ha-256|0;ha=v;w=f+ -21|0;a:{if(q){break a}if(w>>>0<9){q=n;break a}q=b;if((f|0)!=15){break a}q=n+7>>>3|0;w=-6}n=0;b:{c:{d:{e:{if(o(b,c)<<4>>>0>e>>>0){break e}N=u>>>2&m;f:{if((f&-2)!=6){if(c){break f}n=1;break e}if((f|0)==7){sc(d,a,b,c);n=1;break e}rc(d,a,b,c,N);n=1;break e}E=u&32;Q=E?37:38;R=q<<2;O=q<<1;S=o(l,q);z=v+216|0;T=(f|0)!=24;F=w>>>0>8?r:r?r:p;G=F;while(1){g:{if(!b){break g}L=(G|0)<4?G:4;I=H<<2;M=o(I,q);m=o(H,S)+a|0;p=0;P=1;J=q;while(1){K=(J|0)<4?J:4;h:{i:{j:{k:{l:{m:{switch(f|0){case 0:if(N){if(nc(d,m)){break h}n=0;break e}if(!Ba(d,v+104|0,0,1)){break j}e=i[v+208>>2];if((e|0)!=8){Ea(e,i[v+212>>2],z,v+104|0,v)}tb(v+104|0,v,m);break h;case 1:if(Ba(d,v+104|0,0,1)){e=i[v+208>>2];if((e|0)!=8){Ea(e,i[v+212>>2],z,v+104|0,v)}Ua(v+104|0,v,m);tb(v+104|0,v,m+8|0);break h}n=0;break e;case 3:n=0;if(mc(d,m,(E|0)!=0)){break h}break e;case 4:if(Ba(d,v+104|0,0,1)){s=(s|0)>0?s:0;e=i[v+208>>2];if((e|0)==8){e=j[s+z|0];g[m+2|0]=0;g[m+3|0]=0;g[m+4|0]=0;g[m+5|0]=0;g[m+1|0]=e;g[m|0]=e;g[m+6|0]=0;g[m+7|0]=0;break h}Ea(e,i[v+212>>2],z,v+104|0,v);Ta(m,s+v|0);break h}n=0;break e;case 5:if(Ba(d,v+104|0,0,1)){t=(t|0)<0?3:t;s=(s|0)>0?s:0;e=i[v+208>>2];if((e|0)==8){e=j[s+z|0];g[m+2|0]=0;g[m+3|0]=0;g[m+4|0]=0;g[m+5|0]=0;g[m+1|0]=e;g[m|0]=e;g[m+6|0]=0;g[m+7|0]=0;e=j[t+z|0];g[m+10|0]=0;g[m+11|0]=0;g[m+12|0]=0;g[m+13|0]=0;g[m+9|0]=e;g[m+8|0]=e;g[m+14|0]=0;g[m+15|0]=0;break h}Ea(e,i[v+212>>2],z,v+104|0,v);Ta(m,s+v|0);Ta(m+8|0,t+v|0);break h}n=0;break e;case 8:case 9:n:{if(Ba(d,v+104|0,0,0)){if(lc(v+104|0,v)){break n}}n=0;break e}kc(m,v);break h;case 12:if(Ba(d,v+104|0,1,0)){e=i[v+208>>2];if((e|0)==8){ic(m,z);break h}hc(m,v+104|0,e);break h}n=0;break e;case 18:if(Ba(d,v+104|0,0,1)){s=(s|0)>0?s:0;e=i[v+208>>2];if((e|0)==8){h[m>>1]=j[s+z|0]|3328;e=k[145594]|k[145595]<<16;h[m+2>>1]=e;h[m+4>>1]=e>>>16;h[m+6>>1]=k[145596];break h}Ea(e,i[v+212>>2],z,v+104|0,v);if((s|0)==3){Ua(v+104|0,v,m);break h}ja[Q|0](m,s+v|0,4);break h}n=0;break e;case 19:n=0;s=(s|0)>0?s:0;t=(t|0)>3?t:3;if(gc(d,m,(E|0)!=0,s,t)){break h}break e;case 22:B=Ba(d,v+104|0,0,0);if(B){Ea(i[v+208>>2],i[v+212>>2],z,v+104|0,v)}if((l|0)!=4){break d}o:{if((F|0)==(I|0)){break o}e=p<<2;if((e|0)==(q|0)){break o}e=(e+M<<2)+a|0;r=0;while(1){w=0;while(1){n=w<<2;u=n+((r<<4)+v|0)|0;g[e+n|0]=j[u|0];g[(n|1)+e|0]=j[u+1|0];g[(n|2)+e|0]=j[u+2|0];g[(n|3)+e|0]=j[u+3|0];w=w+1|0;if((K|0)!=(w|0)){continue}break}e=e+R|0;r=r+1|0;if((L|0)!=(r|0)){continue}break}}if(!B){break l}break h;case 24:case 25:u=Ba(d,v+104|0,0,0);if(u){Ea(i[v+208>>2],i[v+212>>2],z,v+104|0,v)}if((l|0)!=2){break c}if((F|0)!=(I|0)){B=p<<2;e=(B+M<<1)+a|0;w=0;while(1){p:{if((q|0)==(B|0)){break p}n=0;if(!T){while(1){D=n<<1;r=((w<<4)+v|0)+(n<<2)|0;y=o(j[r+1|0],63)+128|0;C=(y>>>8|0)+y>>>3&8160;y=o(j[r|0],31)+128|0;r=o(j[r+2|0],31)+128|0;r=C|(y>>>8|0)+y<<3&260096|(r>>>8|0)+r>>>8;g[D+e|0]=r;g[(D|1)+e|0]=r>>>8;n=n+1|0;if((K|0)!=(n|0)){continue}break p}}while(1){D=n<<1;r=((w<<4)+v|0)+(n<<2)|0;y=o(j[r+1|0],63)+128|0;C=(y>>>8|0)+y>>>3&8160;y=o(j[r+2|0],31)+128|0;r=o(j[r|0],31)+128|0;r=C|(y>>>8|0)+y<<3&260096|(r>>>8|0)+r>>>8;g[D+e|0]=r;g[(D|1)+e|0]=r>>>8;n=n+1|0;if((K|0)!=(n|0)){continue}break}}e=e+O|0;w=w+1|0;if((L|0)!=(w|0)){continue}break}}if(!u){break l}break h;case 2:break i;case 29:break m;default:break k}}w=Ba(d,v+104|0,0,0);if(w){Ea(i[v+208>>2],i[v+212>>2],z,v+104|0,v)}if((l|0)!=2){break b}q:{if((F|0)==(I|0)){break q}e=p<<2;if((e|0)==(q|0)){break q}u=(e+M<<1)+a|0;e=0;while(1){n=0;while(1){r=((e<<4)+v|0)+(n<<2)|0;B=j[r|0];D=j[r+1|0];y=n<<1;C=o(j[r+3|0],15)+128|0;r=o(j[r+2|0],15)+128|0;r=(r>>>8|0)+r>>>4&1008;g[y+u|0]=(C>>>8|0)+C>>>8|r;B=o(B,15)+128|0;C=(B>>>8|0)+B<<4&61440;B=o(D,15)+128|0;g[(y|1)+u|0]=(r|(C|(B>>>8|0)+B&16128))>>>8;n=n+1|0;if((K|0)!=(n|0)){continue}break}u=u+O|0;e=e+1|0;if((L|0)!=(e|0)){continue}break}}if(w){break h}}if(!P){break g}n=0;break e}A(19820,19512,8903,19588);x()}n=0;break e}n=0;if(!fc(d,m,(E|0)!=0)){break e}}J=J+ -4|0;m=l+m|0;d=d+16|0;p=p+1|0;P=p>>>0>>0;if((b|0)!=(p|0)){continue}break}}G=G+ -4|0;n=1;H=H+1|0;if((H|0)!=(c|0)){continue}break}}ha=v+256|0;return n}A(19822,19512,8822,19588);x()}A(19880,19512,8851,19588);x()}A(19880,19512,8880,19588);x()}function Ta(a,b){var c=0,d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;c=j[b+48|0];d=j[b+32|0];e=j[b+16|0];l=j[b|0];h=e>>>0>>0?e:l;h=h>>>0>d>>>0?d:h;k=h>>>0>c>>>0?c:h;h=j[b+52|0];m=j[b+36|0];n=j[b+20|0];p=j[b+4|0];f=n>>>0

    >>0?n:p;f=f>>>0>m>>>0?m:f;f=f>>>0>h>>>0?h:f;s=k>>>0>>0?k:f;k=j[b+56|0];f=j[b+40|0];q=j[b+24|0];w=j[b+8|0];r=q>>>0>>0?q:w;r=r>>>0>f>>>0?f:r;r=r>>>0>k>>>0?k:r;t=s>>>0>>0?s:r;s=j[b+60|0];r=j[b+44|0];v=j[b+28|0];x=j[b+12|0];u=v>>>0>>0?v:x;u=u>>>0>r>>>0?r:u;u=u>>>0>s>>>0?s:u;t=t>>>0>>0?t:u;g[a+1|0]=t;e=l>>>0>>0?e:l;d=e>>>0>>0?d:e;c=d>>>0>>0?c:d;d=p>>>0>>0?n:p;d=d>>>0>>0?m:d;d=d>>>0>>0?h:d;c=c>>>0>d>>>0?c:d;d=w>>>0>>0?q:w;d=d>>>0>>0?f:d;d=d>>>0>>0?k:d;c=c>>>0>d>>>0?c:d;d=x>>>0>>0?v:x;d=d>>>0>>0?r:d;d=d>>>0>>0?s:d;d=c>>>0>d>>>0?c:d;g[a|0]=d;if((d|0)==(t|0)){g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;return}w=j[b+60|0];s=j[b+56|0];r=j[b+52|0];v=j[b+48|0];x=j[b+44|0];u=j[b+40|0];y=j[b+36|0];q=j[b+32|0];l=o(t,-14)+4|0;c=l+o(j[b+20|0],14)|0;e=d-t|0;h=o(e,13);m=o(e,11);n=o(e,9);p=o(e,7);k=o(e,5);f=o(e,3);d=i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28848>>2]<<12;c=l+o(j[b+4|0],14)|0;t=d|i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28848>>2];c=l+o(j[b|0],14)|0;d=i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28816>>2];c=l+o(j[b+16|0],14)|0;t=t|(d|i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28816>>2]<<12);c=l+o(j[b+8|0],14)|0;d=i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28880>>2];c=l+o(j[b+24|0],14)|0;d=t|(d|i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28880>>2]<<12);c=l+o(j[b+12|0],14)|0;b=l+o(j[b+28|0],14)|0;b=d|(i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28912>>2]|i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28912>>2]<<12);g[a+2|0]=b;g[a+4|0]=b>>>16;g[a+3|0]=b>>>8;c=l+o(q,14)|0;q=i[((((((((c|0)>=(h|0))+((c|0)>=(m|0))|0)+((c|0)>=(n|0))|0)+((c|0)>=(p|0))|0)+((c|0)>=(k|0))|0)+((c|0)>=(f|0))|0)+((c|0)>=(e|0))<<2)+28816>>2];c=q>>>8|0;d=b|q<<24;b=l+o(y,14)|0;b=i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28848>>2];q=b>>>8|0;b=d|b<<24;q=c|q;d=b;b=l+o(u,14)|0;b=i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28880>>2];c=b>>>8|0;b=d|b<<24;c=c|q;d=b;b=l+o(x,14)|0;b=i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28912>>2];q=b>>>8|0;b=d|b<<24;q=c|q;c=q;g[a+5|0]=(c&16777215)<<8|b>>>24;b=l+o(v,14)|0;v=i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28816>>2]<<4|c;b=l+o(r,14)|0;c=i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28848>>2]<<4;b=l+o(s,14)|0;s=c|v|i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28880>>2]<<4;b=l+o(w,14)|0;c=i[((((((((b|0)>=(h|0))+((b|0)>=(m|0))|0)+((b|0)>=(n|0))|0)+((b|0)>=(p|0))|0)+((b|0)>=(k|0))|0)+((b|0)>=(f|0))|0)+((b|0)>=(e|0))<<2)+28912>>2]<<4;e=c|s;c=e;d=a;g[d+7|0]=c>>>8;g[d+6|0]=c}function hc(a,b,c){var d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0;h=ha-48|0;ha=h;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{if(c>>>0<19){l=j[b+20|0];g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;g[a+8|0]=0;g[a+9|0]=0;g[a+8|0]=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;e=i[(c<<2)+25184>>2];g[a|0]=e;d=e>>>8|0;g[a+1|0]=d;e=i[b>>2];if(!(1497965>>>e&1)|!(1797559>>>e&1)){break j}d=d|(j[b+4|0]<<3)+ -8;g[a+1|0]=d;m=o(e,12)+21952|0;k:{if(i[b+4>>2]==1){e=i[b+12>>2];g[a+2|0]=e>>>3;g[a+1|0]=d|e<<5;e=17;break k}k=i[b+8>>2];d=10;e=13;while(1){f=(e>>3)+a|0;n=f;p=j[f|0];f=e&7;g[n|0]=p|k<>>f|0;e=e+f|0;d=d-f|0;if(d){continue}break}d=(e>>3)+a|0;f=e&7;k=(i[b+12>>2]<<2&60)<>>0>=3){g[d+1|0]=j[d+1|0]|k>>>8}e=e+6|0}r=l?32:16;u=i[m>>2];if(j[b+20|0]){d=o(r,u);if(d+ -24>>>0>=73){break i}d=(126-d>>3)+a|0;g[d|0]=j[d|0]|j[b+16|0]<<6}d=o(i[b+4>>2],(i[b+12>>2]>>2)+1|0);if((d|0)>=10){break h}i[h+44>>2]=e;i[h+32>>2]=0;i[h+24>>2]=0;i[h+28>>2]=0;i[h+16>>2]=0;i[h+20>>2]=0;p=d<<1;c=j[c+21824|0];l=i[o(c,12)+21952>>2];f=1497965>>>c&1;if(!f){m=5;d=4;break g}if(!(1797559>>>c&1)){m=3;d=2;break g}if((d|0)<1){break e}if((c&253)==1){break f}d=0;while(1){c=e>>3;f=c+(h+16|0)|0;n=f;m=j[f|0];f=e&7;k=j[(b+d|0)+21|0]<>>0>>0){c=c+h|0;g[c+17|0]=j[c+17|0]|k>>>8}e=e+l|0;d=d+1|0;if((p|0)!=(d|0)){continue}break}break f}A(25132,19512,11923,25163);x()}A(25260,19512,11938,25163);x()}A(25367,19512,11961,25163);x()}A(25422,19512,11968,25163);x()}s=(d+p|0)/(m|0)|0;if((s|0)<1){break e}if(!f){e=0;while(1){g[h+12|0]=0;i[h+8>>2]=0;c=o(e,m);if((p|0)>(c|0)){f=(b+c|0)+21|0;c=p-c|0;c=(m|0)<(c|0)?m:c;Ga(h+8|0,f,(c|0)>1?c:1)}ab(h+16|0,h+8|0,h+44|0,l);e=e+1|0;if((s|0)!=(e|0)){continue}break}break e}c=o(l,3);f=c+7|0;if(!f){while(1){d=0;g[h+12|0]=0;i[h+8>>2]=0;k=0;c=0;f=o(m,q);if((p|0)>(f|0)){c=p-f|0;c=(m|0)<(c|0)?m:c;Ga(h+8|0,(b+f|0)+21|0,(c|0)>1?c:1);d=j[h+10|0];k=j[h+9|0];c=j[h+8|0]}if(((o((d&255)>>>l|0,25)+(c>>>l|0)|0)+o((k&255)>>>l|0,5)|0)>124){break d}q=q+1|0;if((s|0)!=(q|0)){continue}break f}}v=l+3|0;w=c+5|0;c=l<<1;y=c+5|0;z=c+3|0;t=-1<>2]=0;k=0;c=0;n=o(m,q);if((p|0)>(n|0)){c=p-n|0;c=(m|0)<(c|0)?m:c;Ga(h+8|0,(b+n|0)+21|0,(c|0)>1?c:1);d=j[h+10|0];k=j[h+9|0];c=j[h+8|0]}d=d&255;k=k&255;n=(o(d>>>l|0,25)+(c>>>l|0)|0)+o(k>>>l|0,5)|0;if((n|0)>=125){break d}d=c&t|(d&t)<>>3&3)<>>5&3)<>3)|0;n=c;B=j[c|0];c=e&7;g[n|0]=B|k<>>c|0;e=c+e|0;d=d-c|0;if(d){continue}break}q=q+1|0;if((s|0)!=(q|0)){continue}break}}i[h+44>>2]=e}i[a>>2]=i[a>>2]|i[h+16>>2];i[a+4>>2]=i[a+4>>2]|i[h+20>>2];i[a+8>>2]=i[a+8>>2]|i[h+24>>2];i[a+12>>2]=i[a+12>>2]|i[h+28>>2];e=0;l:{m:{switch(u+ -1|0){case 1:while(1){c=126-(e<<1)|0;d=(c>>>3|0)+a|0;g[d|0]=j[d|0]|j[j[(b+e|0)+39|0]+290904|0]<<(c&6);e=e+1|0;if((r|0)!=(e|0)){continue}break}break l;case 2:while(1){if((e|0)==42){break c}d=o(e,-3)+125|0;c=(d>>>3|0)+a|0;f=j[j[(b+e|0)+39|0]+25441|0]<<(d&7);g[c|0]=f|j[c|0];if(d>>>0<=119){g[c+1|0]=j[c+1|0]|f>>>8}e=e+1|0;if((r|0)!=(e|0)){continue}break}break l;case 3:while(1){if((e|0)==32){break b}c=124-(e<<2)|0;d=(c>>>3|0)+a|0;g[d|0]=j[d|0]|j[j[(b+e|0)+39|0]+25472|0]<<(c&4);e=e+1|0;if((r|0)!=(e|0)){continue}break}break l;case 4:while(1){if((e|0)==25){break a}d=o(e,-5)+123|0;c=(d>>>3|0)+a|0;f=j[j[(b+e|0)+39|0]+25520|0]<<(d&7);g[c|0]=f|j[c|0];if(d>>>0<=119){g[c+1|0]=j[c+1|0]|f>>>8}e=e+1|0;if((r|0)!=(e|0)){continue}break}break l;default:A(19820,19512,12048,25163);x();case 0:break m}}while(1){c=127-e|0;d=(c>>>3|0)+a|0;g[d|0]=j[d|0]|j[(b+e|0)+39|0]<<(c&7);e=e+1|0;if((r|0)!=(e|0)){continue}break}}ha=h+48|0;return}A(297415,19512,11863,297428);x()}A(25449,19512,12009,25163);x()}A(25488,19512,12023,25163);x()}A(25449,19512,12039,25163);x()}function xb(a,b,c){var d=0,e=0,f=0,g=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;d=ha-256|0;ha=d;a:{if(!b){b=i[a>>2];if((b|0)!=i[a+4>>2]){i[a+4>>2]=b}b=i[a+12>>2];if((b|0)!=i[a+16>>2]){i[a+16>>2]=b}o=1;b=i[a+24>>2];if((b|0)==i[a+28>>2]){break a}i[a+28>>2]=b;break a}g=i[a>>2];e=i[a+4>>2]-g|0;b:{if(e>>>0>>0){Oa(a,b-e|0);g=i[a>>2];break b}if(e>>>0<=b>>>0){break b}i[a+4>>2]=b+g}Ga(g,c,b);J=a+12|0;e=i[a+16>>2];g=i[a+12>>2];if((e|0)!=(g|0)){i[a+16>>2]=g;e=g}e=e-g>>2;c:{if(1024>e>>>0){bb(J,1024-e|0);break c}if(1024>=e>>>0){break c}i[a+16>>2]=g+4096}G=a+24|0;l=b<<1;n=l;e=i[a+28>>2];g=i[a+24>>2];if((e|0)!=(g|0)){i[a+28>>2]=g;e=g}e=e-g>>1;d:{if(n>>>0>e>>>0){Ya(G,l-e|0);break d}if(l>>>0>=e>>>0){break d}i[a+28>>2]=g+(l<<1)}ya(d+128|0,0,128);e=b>>>0>1?b:1;g=0;while(1){l=j[c+g|0];if(l>>>0>31){break a}l=(d+128|0)+(l<<2)|0;i[l>>2]=i[l>>2]+1;g=g+1|0;if((e|0)!=(g|0)){continue}break}e=i[d+184>>2];g=i[d+180>>2];l=i[d+176>>2];n=i[d+172>>2];m=i[d+168>>2];q=i[d+164>>2];p=i[d+160>>2];H=i[d+156>>2];K=i[d+152>>2];L=i[d+148>>2];M=i[d+144>>2];N=i[d+140>>2];O=i[d+136>>2];P=i[d+132>>2];i[d>>2]=0;i[d+4>>2]=0;f=P<<1;i[d+8>>2]=f;f=f+O<<1;i[d+12>>2]=f;f=f+N<<1;i[d+16>>2]=f;f=f+M<<1;i[d+20>>2]=f;f=f+L<<1;i[d+24>>2]=f;f=f+K<<1;i[d+28>>2]=f;f=f+H<<1;i[d+32>>2]=f;f=f+p<<1;i[d+36>>2]=f;f=f+q<<1;i[d+40>>2]=f;f=f+m<<1;i[d+44>>2]=f;f=f+n<<1;i[d+48>>2]=f;f=f+l<<1;i[d+52>>2]=f;f=g+f<<1;i[d+56>>2]=f;f=e+f<<1;i[d+60>>2]=f;r=f;f=i[d+188>>2];r=r+f<<1;i[d+64>>2]=r;s=r;r=i[d+192>>2];s=s+r<<1;i[d+68>>2]=s;t=s;s=i[d+196>>2];t=t+s<<1;i[d+72>>2]=t;u=t;t=i[d+200>>2];u=u+t<<1;i[d+76>>2]=u;v=u;u=i[d+204>>2];v=v+u<<1;i[d+80>>2]=v;w=v;v=i[d+208>>2];w=w+v<<1;i[d+84>>2]=w;x=w;w=i[d+212>>2];x=x+w<<1;i[d+88>>2]=x;y=x;x=i[d+216>>2];y=y+x<<1;i[d+92>>2]=y;z=y;y=i[d+220>>2];z=z+y<<1;i[d+96>>2]=z;A=z;z=i[d+224>>2];A=A+z<<1;i[d+100>>2]=A;B=A;A=i[d+228>>2];B=B+A<<1;i[d+104>>2]=B;C=B;B=i[d+232>>2];C=C+B<<1;i[d+108>>2]=C;D=C;C=i[d+236>>2];D=D+C<<1;i[d+112>>2]=D;E=D;D=i[d+240>>2];E=E+D<<1;i[d+116>>2]=E;F=E;E=i[d+244>>2];F=F+E<<1;i[d+120>>2]=F;I=F;F=i[d+248>>2];I=I+F<<1;i[d+124>>2]=I;if(F+(E+(D+(C+(B+(A+(z+(y+(x+(w+(v+(u+(t+(s+(r+(f+(e+(g+(l+(n+(m+(q+(p+(H+(((((O+P|0)+N|0)+M|0)+L|0)+K|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)|0)>>>0>1?(I|0)!=-2147483648:0){break a}o=1;if((b|0)<1){break a}q=0;e=-1;while(1){l=j[c+q|0];e:{if(!l){break e}n=(l<<2)+d|0;g=i[n>>2];i[n>>2]=g+1;m=0;n=l;while(1){m=g&1|m<<1;g=g>>>1|0;n=n+ -1|0;if(n){continue}break}if(l>>>0<=10){if(m>>>0>=1024){break e}g=l<<16|q;l=1<>2];while(1){o=n+(m<<2)|0;if(i[o>>2]){o=0;break a}i[o>>2]=g;m=l+m|0;if(m>>>0<1024){continue}break}break e}g=i[J>>2]+((m&1023)<<2)|0;n=i[g>>2];f:{if(n){g=e;e=n;break f}i[g>>2]=e;g=e+ -2|0}if((e|0)>-1){o=0;break a}n=m>>>9|0;if(11<(l|0)){while(1){o=0;n=n>>>1|0;p=e-(n&1)|0;if((p|0)>-1){break a}m=i[a+24>>2];e=i[a+28>>2]-m>>1;H=p^-1;g:{if((e|0)>(H|0)){break g}p=0-p|0;if(e>>>0

    >>0){Ya(G,p-e|0);m=i[G>>2];break g}if(e>>>0<=p>>>0){break g}i[a+28>>2]=(p<<1)+m}m=(H<<1)+m|0;e=h[m>>1];h:{if(!e){h[m>>1]=g;e=g;g=e+ -2|0;break h}if((e|0)>-1){break a}}l=l+ -1|0;if((l|0)>11){continue}break}}e=(n>>>1&1)-e|0;if((e|0)<1){o=0;break a}n=e+ -1|0;m=i[a+24>>2];l=i[a+28>>2]-m>>1;i:{if((e|0)<=(l|0)){break i}if(e>>>0>l>>>0){Ya(G,e-l|0);m=i[G>>2];break i}if(e>>>0>=l>>>0){break i}i[a+28>>2]=(e<<1)+m}o=0;e=(n<<1)+m|0;if(k[e>>1]){break a}h[e>>1]=q;e=g}o=1;q=q+1|0;if((q|0)!=(b|0)){continue}break}}ha=d+256|0;return o} + + + +function Ha(a,b){var c=0,d=0,e=0,f=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=ha-80|0;ha=k;c=i[b>>2];if((c|0)!=i[b+4>>2]){i[b+4>>2]=c}c=i[b+12>>2];if((c|0)!=i[b+16>>2]){i[b+16>>2]=c}c=i[b+24>>2];if((c|0)!=i[b+28>>2]){i[b+28>>2]=c}c=i[a+20>>2];a:{if(c>>>0>=14){m=i[a+16>>2];break a}f=i[a+4>>2];n=i[a+12>>2];d=c;while(1){e=0;if(f>>>0>>0){c=f+1|0;i[a+4>>2]=c;e=j[f|0];f=c}c=d+8|0;i[a+20>>2]=c;m=i[a+16>>2]|e<>2]=m;e=d>>>0<6;d=c;if(e){continue}break}}d=c+ -14|0;i[a+20>>2]=d;e=m>>>14|0;i[a+16>>2]=e;o=m&16383;b:{if(!o){f=1;break b}g[k+61|0]=0;g[k+62|0]=0;g[k+63|0]=0;g[k+64|0]=0;g[k+65|0]=0;g[k+66|0]=0;g[k+67|0]=0;g[k+68|0]=0;i[k+56>>2]=0;i[k+60>>2]=0;i[k+48>>2]=0;i[k+52>>2]=0;c:{if(d>>>0>4){f=d;break c}m=0;f=i[a+4>>2];if(f>>>0>2]){i[a+4>>2]=f+1;m=j[f|0]}f=c+ -6|0;i[a+20>>2]=f;e=m<>2]=e}d=f+ -5|0;i[a+20>>2]=d;c=e>>>5|0;i[a+16>>2]=c;f=0;n=e&31;if(n+ -1>>>0>20){break b}while(1){d:{if(d>>>0>2){e=c;m=d;break d}e=0;m=i[a+4>>2];if(m>>>0>2]){i[a+4>>2]=m+1;e=j[m|0]}m=d+8|0;i[a+20>>2]=m;e=e<>2]=e}d=m+ -3|0;i[a+20>>2]=d;c=e>>>3|0;i[a+16>>2]=c;g[j[f+90544|0]+(k+48|0)|0]=e&7;f=f+1|0;if((n|0)!=(f|0)){continue}break}f=0;i[k+40>>2]=0;i[k+32>>2]=0;i[k+36>>2]=0;i[k+24>>2]=0;i[k+28>>2]=0;i[k+16>>2]=0;i[k+20>>2]=0;i[k+8>>2]=0;i[k+12>>2]=0;if(!(!xb(k+8|0,21,k+48|0)|i[k+12>>2]==i[k+8>>2])){p=ya(xa(o),0,o);c=i[a+20>>2];q=i[k+32>>2];r=i[k+20>>2];n=0;e:{while(1){f:{if(c>>>0>=16){m=i[a+16>>2];break f}f=i[a+4>>2];s=i[a+12>>2];d=c;while(1){e=0;if(f>>>0>>0){c=f+1|0;i[a+4>>2]=c;e=j[f|0];f=c}c=d+8|0;i[a+20>>2]=c;m=i[a+16>>2]|e<>2]=m;e=d>>>0<8;d=c;if(e){continue}break}}f=i[((m&1023)<<2)+r>>2];g:{if((f|0)<0){d=10;while(1){e=m>>>d|0;d=d+1|0;f=h[((e&1)+(f^-1)<<1)+q>>1];if((f|0)<0){continue}break}break g}d=f>>>16|0;f=f&65535}c=c-d|0;i[a+20>>2]=c;d=m>>>d|0;i[a+16>>2]=d;e=f;h:{if((e|0)<=16){g[n+p|0]=e;n=n+1|0;break h}i:{j:{k:{l:{switch(e+ -17|0){case 1:if(c>>>0<=6){break k}f=c;break j;case 0:break l;default:break i}}m:{if(c>>>0>2){f=c;break m}e=0;f=i[a+4>>2];if(f>>>0>2]){i[a+4>>2]=f+1;e=j[f|0]}f=c+8|0;i[a+20>>2]=f;d=e<>2]=d}c=f+ -3|0;i[a+20>>2]=c;i[a+16>>2]=d>>>3;n=((d&7)+n|0)+3|0;break h}e=0;f=i[a+4>>2];if(f>>>0>2]){i[a+4>>2]=f+1;e=j[f|0]}f=c+8|0;i[a+20>>2]=f;d=e<>2]=d}c=f+ -7|0;i[a+20>>2]=c;i[a+16>>2]=d>>>7;n=((d&127)+n|0)+11|0;break h}f=0;if(!n){break e}n:{o:{p:{if((e|0)!=19){if(c>>>0<=6){break p}e=c;break o}q:{if(c>>>0>1){e=c;break q}m=0;e=i[a+4>>2];if(e>>>0>2]){i[a+4>>2]=e+1;m=j[e|0]}e=c+8|0;i[a+20>>2]=e;d=m<>2]=d}c=e+ -2|0;i[a+20>>2]=c;i[a+16>>2]=d>>>2;d=(d&3)+3|0;break n}m=0;e=i[a+4>>2];if(e>>>0>2]){i[a+4>>2]=e+1;m=j[e|0]}e=c+8|0;i[a+20>>2]=e;d=m<>2]=d}c=e+ -7|0;i[a+20>>2]=c;i[a+16>>2]=d>>>7;d=(d&127)+7|0}e=j[(n+p|0)+ -1|0];if(!e){break e}m=n>>>0>o>>>0?n:o;while(1){if((m|0)==(n|0)){break e}g[n+p|0]=e;n=n+1|0;d=d+ -1|0;if(d){continue}break}}if(n>>>0>>0){continue}break}f=0;if((n|0)!=(o|0)){break e}f=xb(b,o,p)}wa(p)}a=i[k+32>>2];if(a){i[k+36>>2]=a;wa(a)}a=i[k+20>>2];if(a){i[k+24>>2]=a;wa(a)}a=i[k+8>>2];if(!a){break b}i[k+12>>2]=a;wa(a)}ha=k+80|0;return f}function Ua(a,b,c){var d=0,e=0,f=0,l=0,m=0,n=0,r=0,s=0,t=0,u=0,v=0,w=0,y=0,z=0,B=0,C=0,D=0,E=0,F=0,G=p(0),H=0,I=0;a:{b:{e=i[a+104>>2];m=(e|0)==8;if(!(m|e+ -8>>>0>9)){e=j[b+63|0];m=j[b+59|0];f=j[b+55|0];n=j[b+51|0];r=j[b+47|0];v=j[b+43|0];w=j[b+39|0];y=j[b+35|0];z=j[b+31|0];B=j[b+27|0];C=j[b+23|0];D=j[b+19|0];l=j[b+15|0];t=j[b+11|0];u=j[b+7|0];s=j[b+3|0];d=s>>>0>u>>>0?u:s;d=d>>>0>t>>>0?t:d;d=d>>>0>l>>>0?l:d;d=d>>>0>D>>>0?D:d;d=d>>>0>C>>>0?C:d;d=d>>>0>B>>>0?B:d;d=d>>>0>z>>>0?z:d;d=d>>>0>y>>>0?y:d;d=d>>>0>w>>>0?w:d;d=d>>>0>v>>>0?v:d;d=d>>>0>r>>>0?r:d;d=d>>>0>n>>>0?n:d;d=d>>>0>f>>>0?f:d;d=d>>>0>m>>>0?m:d;d=d>>>0>e>>>0?e:d;u=s>>>0>>0?u:s;t=u>>>0>>0?t:u;l=t>>>0>>0?l:t;D=l>>>0>>0?D:l;C=D>>>0>>0?C:D;B=C>>>0>>0?B:C;z=B>>>0>>0?z:B;y=z>>>0>>0?y:z;w=y>>>0>>0?w:y;v=w>>>0>>0?v:w;r=v>>>0>>0?r:v;n=r>>>0>>0?n:r;f=n>>>0>>0?f:n;m=f>>>0>>0?m:f;e=m>>>0>>0?e:m;if((d|0)==(e|0)){h[c>>1]=d|7424;break a}f=i[a+132>>2];a=f>>>4|0;if(!a){break b}s=c;G=p(d>>>0);m=f<<3&120;n=g[m+28627|0];r=g[m+28631|0];G=Na(p(p(p(p(e>>>0)-G)*p(p(0-n|0)/p(r-n|0)))+G));c:{if(p(q(G))>1]=e&255|(f<<8&3840|a<<12);f=e+o(a,r)|0;r=(f>>>0<256?f:f>>31^-1)&255;f=e+o(a,g[m+28630|0])|0;v=(f>>>0<256?f:f>>31^-1)&255;f=e+o(a,g[m+28629|0])|0;w=(f>>>0<256?f:f>>31^-1)&255;f=e+o(a,g[m+28628|0])|0;y=(f>>>0<256?f:f>>31^-1)&255;f=e+o(a,n)|0;z=(f>>>0<256?f:f>>31^-1)&255;f=e+o(a,g[m+28626|0])|0;B=(f>>>0<256?f:f>>31^-1)&255;f=e+o(a,g[m+28625|0])|0;C=(f>>>0<256?f:f>>31^-1)&255;a=e+o(a,g[m+28624|0])|0;D=(a>>>0<256?a:a>>31^-1)&255;while(1){a=j[((((E&3)<<4)+b|0)+(E&-4)|0)+3|0];l=D-a|0;e=l>>31;t=w-a|0;m=t>>31;u=v-a|0;f=u>>31;s=r-a|0;n=s>>31;e=(e^e+l)<<3;l=C-a|0;d=l>>31;l=(d+l^d)<<3|1;e=e>>>0>>0?e:l;l=B-a|0;d=l>>31;l=(d+l^d)<<3|2;e=e>>>0>>0?e:l;l=z-a|0;d=l>>31;l=(d+l^d)<<3|3;e=e>>>0>>0?e:l;a=y-a|0;l=a>>31;a=(l+a^l)<<3|4;a=e>>>0>>0?e:a;e=(m^m+t)<<3|5;a=a>>>0>>0?a:e;e=(f^f+u)<<3|6;a=a>>>0>>0?a:e;e=(n^n+s)<<3|7;m=(a>>>0>>0?a:e)&7;a=Vd(E,I)+45|0;e=a&31;if(32<=(a&63)>>>0){a=m<>>32-e;s=m<>>0<1){I=I+1|0}if((E|0)!=16|I){continue}break}g[c+7|0]=H;g[c+6|0]=(F&255)<<24|H>>>8;g[c+5|0]=(F&65535)<<16|H>>>16;g[c+4|0]=(F&16777215)<<8|H>>>24;g[c+3|0]=F;g[c+2|0]=F>>>8;return}h[c>>1]=m?j[a+115|0]|7424:7679;break a}A(28564,19512,14553,28580);x()}a=k[145594]|k[145595]<<16;h[c+2>>1]=a;h[c+4>>1]=a>>>16;h[c+6>>1]=k[145596]}function qb(a,b,c,d,e){var f=0,h=0,i=0,k=0,l=0,m=0,n=0;n=e?-1:1;k=e?-1:0;i=-2;l=(e|0)!=0;m=!e;h=e?0:-1;f=h;a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{switch(c+ -2|0){case 0:m:{n:{c=j[b|0];if(c){if((c|0)==(d|0)){break n}e=c-h|0;c=c+h|0;c=(c|0)>(d|0)?e:c;break m}c=(e|0)!=0;break m}c=d+h|0;if((c|0)<1){break e}c=c+ -1|0}if((c|0)>(d|0)){break a}g[a|0]=c;e=j[b+1|0];if(e){break h}e=1;break d;case 3:case 4:f=0;break k;case 5:f=m;break k;case 9:case 13:f=0;break k;case 16:f=k;break k;case 17:case 18:f=0;break k;case 19:f=l;break k;case 6:case 22:f=0;break k;case 26:f=n;break k;case 27:f=l;break k;case 28:f=k;break k;case 29:f=m;break k;case 8:break j;case 25:break k;default:break l}}f=((c>>>0)%3|0)+ -1|0}e=j[b|0];if(!e){break i}i=f;break g}e=j[b|0];if(e){break g}e=3;break f}e=f+1|0;break f}if((d|0)!=(e|0)){break d}e=d+ -1|0;break c}if((d|0)!=(e|0)){f=e-i|0;e=e+i|0;e=(e|0)<0?f:(e|0)>(d|0)?f:e;break f}e=(d+i|0)+ -1|0;if((e|0)<=-1){break e}}if((e|0)>(d|0)){break a}g[a|0]=e;e=h;o:{p:{q:{r:{s:{t:{switch(c+ -5|0){case 25:e=k;break s;case 24:e=l;break s;case 23:e=n;break s;case 5:e=-2;f=j[b+1|0];if(f){break r}e=3;break o;case 3:e=0;break s;case 19:e=l;break s;case 15:case 16:e=0;break s;case 14:e=k;break s;case 10:case 13:e=0;break s;case 6:e=m;break s;case 1:case 2:e=0;break s;case 26:e=m;break s;case 0:case 22:break s;default:break t}}e=(((c>>>0)/3>>>0)%3|0)+ -1|0}f=j[b+1|0];if(!f){break q}}if((d|0)==(f|0)){break p}i=f-e|0;e=e+f|0;e=(e|0)<0?i:(e|0)>(d|0)?i:e;break o}e=e+1|0;break o}e=(d+e|0)+ -1|0;if((e|0)<0){break e}}if((e|0)>(d|0)){break a}g[a+1|0]=e;u:{v:{w:{x:{y:{z:{switch(c+ -5|0){case 25:h=k;break y;case 24:h=l;break y;case 23:h=n;break y;case 5:h=-2;e=j[b+2|0];if(e){break x}e=3;break u;case 3:h=l;break y;case 16:case 19:h=0;break y;case 15:h=k;break y;case 13:case 14:h=0;break y;case 10:h=m;break y;case 0:case 2:case 6:h=0;break y;case 26:h=m;break y;case 1:case 22:break y;default:break z}}h=(((c>>>0)/9>>>0)%3|0)+ -1|0}e=j[b+2|0];if(!e){break w}}if((d|0)==(e|0)){break v}b=e-h|0;c=b;b=e+h|0;e=(b|0)<0?c:(b|0)>(d|0)?c:b;break u}e=h+1|0;break u}e=(d+h|0)+ -1|0;if((e|0)<0){break e}}if((e|0)<=(d|0)){break b}break a}A(26038,19512,13493,26045);x()}if((e|0)>(d|0)){break a}}g[a+1|0]=e;A:{e=j[b+2|0];if(!e){e=1;break A}if((d|0)!=(e|0)){break A}e=d+ -1|0;break b}if((e|0)>(d|0)){break a}}g[a+2|0]=e;return}A(26061,19512,13494,26045);x()}function Ma(a,b,c,d,e,f,h){var k=0,l=0,n=0,o=p(0),r=p(0),s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=p(0),C=0,D=0,E=0,F=p(0),G=p(0),H=0,I=p(0),J=0,K=0;s=ha-32|0;A=7-b|0;y=b+1|0;b=-1<>2]*B)-r)*p(.5))+p(.5));a:{if(p(q(o))(z|0)?x:l|u;g[k+24|0]=C;n=s;v=u;x=w;o=p(p(p(p(m[d>>2]*B)-r)*p(.5))+p(.5));b:{if(p(q(o))(z|0)?x:l|u;g[n+16|0]=D;n=s;v=u;x=w;o=p(p(p(p(m[c+4>>2]*B)-r)*p(.5))+p(.5));c:{if(p(q(o))(z|0)?x:l|u;g[n+25|0]=t;n=s;v=u;x=w;o=p(p(p(p(m[d+4>>2]*B)-r)*p(.5))+p(.5));d:{if(p(q(o))(z|0)?x:l|u;g[n+17|0]=J;n=s;v=u;x=w;o=p(p(p(p(m[c+8>>2]*B)-r)*p(.5))+p(.5));e:{if(p(q(o))(z|0)?x:l|u;g[n+26|0]=K;n=s;v=u;x=w;o=p(p(p(p(m[d+8>>2]*B)-r)*p(.5))+p(.5));f:{if(p(q(o))(z|0)?x:l|u;g[n+18|0]=E;n=s;v=u;x=w;o=p(p(p(p(m[c+12>>2]*B)-r)*p(.5))+p(.5));g:{if(p(q(o))(z|0)?x:l|u;g[n+27|0]=k;v=s;x=u;l=w;r=p(p(p(p(m[d+12>>2]*B)-r)*p(.5))+p(.5));h:{if(p(q(r))(z|0)?l:w|u;g[v+19|0]=w;l=(C&255)<>>y|l;g[s+8|0]=l;t=(t&255)<>>y|t;t=(K&255)<>>y|t;t=(k&255)<>>y|t;t=(D&255)<>>y|t;g[s|0]=t;n=(J&255)<>>y|n;n=(E&255)<>>y|n;n=(w&255)<>>y|n;o=p(0);r=p(0);F=p(0);if(a){while(1){r=p((t&255)>>>0);t=b<<2;r=p(r-p(m[t+d>>2]*p(255)));F=p(F+p(r*r));r=p(p((l&255)>>>0)-p(m[c+t>>2]*p(255)));o=p(o+p(r*r));b=b+1|0;if((a|0)!=(b|0)){t=j[b+s|0];l=j[(s+8|0)+b|0];continue}break}r=F}if(o>2]=u;g[e|0]=(C&254)>>>1;g[e+1|0]=j[s+25|0]>>>1;b=j[s+26|0];g[e+3|0]=(k&254)>>>1;g[e+2|0]=b>>>1;I=o}if(!(r>2]=u;g[f|0]=(D&254)>>>1;b=j[s+17|0];g[f+3|0]=(w&254)>>>1;g[f+2|0]=(E&254)>>>1;g[f+1|0]=b>>>1;G=r}u=1;b=H;H=0;if(b){continue}break}}function Ud(){var a=0,b=0;U(1948,1024,4,1);C(1948,1040,0);C(1948,1049,2);C(1948,1057,4);C(1948,1063,5);C(1948,1070,3);C(1948,1079,8);C(1948,1092,9);C(1948,1106,6);C(1948,1115,6);C(1948,1126,6);C(1948,1138,1);C(1948,1148,10);C(1948,1162,13);C(1948,1169,14);C(1948,1176,15);C(1948,1183,16);C(1948,1192,18);C(1948,1205,19);C(1948,1219,20);C(1948,1227,21);U(1984,1236,4,1);C(1984,1250,0);C(1984,1256,1);U(2020,1265,4,0);C(2020,1283,4);C(2020,1322,32);Z(1335,1,2028,2032,1,2);Z(1351,3,2036,2048,3,4);M(2084,2124,2172,0,2188,5,2191,0,2191,0,1369,2032,6);R(2084,5,2208,2228,7,8);a=xa(4);i[a>>2]=0;b=xa(4);i[b>>2]=0;H(2084,1379,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=4;b=xa(4);i[b>>2]=4;H(2084,1385,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=8;b=xa(4);i[b>>2]=8;H(2084,1399,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=12;b=xa(4);i[b>>2]=12;H(2084,1413,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=16;b=xa(4);i[b>>2]=16;H(2084,1429,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=20;b=xa(4);i[b>>2]=20;H(2084,1445,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=24;b=xa(4);i[b>>2]=24;H(2084,1451,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=28;b=xa(4);i[b>>2]=28;H(2084,1458,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=32;b=xa(4);i[b>>2]=32;H(2084,1469,300308,2235,9,a|0,300308,2239,10,b|0);a=xa(4);i[a>>2]=36;b=xa(4);i[b>>2]=36;H(2084,1480,300308,2235,9,a|0,300308,2239,10,b|0);M(2388,2440,2496,0,2188,11,2191,0,2191,0,1486,2032,12);R(2388,1,2512,2188,13,14);V(2388,1514,2,2516,2235,15,16);a=xa(8);i[a>>2]=17;i[a+4>>2]=0;L(2388,1531,6,2528,2552,18,a|0,0);a=xa(8);i[a>>2]=19;i[a+4>>2]=0;L(2388,1546,3,2560,2048,20,a|0,0);a=xa(8);i[a>>2]=21;i[a+4>>2]=0;L(2388,1559,7,2576,2604,22,a|0,0);M(2748,2792,2840,0,2188,23,2191,0,2191,0,1574,2032,24);R(2748,1,2856,2188,25,26);V(2748,1514,2,2516,2235,15,16);a=xa(8);i[a>>2]=27;i[a+4>>2]=0;L(2748,1559,8,2864,2896,28,a|0,0);M(2944,2988,3044,0,2188,29,2191,0,2191,0,1595,2032,30);R(2944,1,3060,2188,31,32);M(1832,1840,3092,0,2188,33,2191,0,2191,0,1616,2032,34);a=xa(8);i[a>>2]=35;i[a+4>>2]=0;L(1832,1632,2,3108,2235,36,a|0,0)}function _b(a,b,c,d){var e=0;e=ha-16|0;ha=e;i[e+8>>2]=0;i[e+12>>2]=0;i[e>>2]=0;i[e+4>>2]=0;a:{if(!c){c=j[b+12|0]|j[b+13|0]<<8|(j[b+14|0]<<16|j[b+15|0]<<24);i[e+8>>2]=j[b+8|0]|j[b+9|0]<<8|(j[b+10|0]<<16|j[b+11|0]<<24);i[e+12>>2]=c;c=j[b+4|0]|j[b+5|0]<<8|(j[b+6|0]<<16|j[b+7|0]<<24);i[e>>2]=j[b|0]|j[b+1|0]<<8|(j[b+2|0]<<16|j[b+3|0]<<24);i[e+4>>2]=c;break a}g[e|0]=j[b+12|0];g[e+1|0]=j[b+13|0];g[e+2|0]=j[b+14|0];g[e+3|0]=j[b+15|0];g[e+4|0]=j[b+8|0];g[e+5|0]=j[b+9|0];g[e+6|0]=j[b+10|0];g[e+7|0]=j[b+11|0];g[e+8|0]=j[b+4|0];g[e+9|0]=j[b+5|0];g[e+10|0]=j[b+6|0];g[e+11|0]=j[b+7|0];g[e+12|0]=j[b|0];g[e+13|0]=j[b+1|0];g[e+14|0]=j[b+2|0];g[e+15|0]=j[b+3|0]}g[a|0]=0;g[a+1|0]=0;g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;g[a+8|0]=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;b:{c:{switch(d|0){default:A(19820,29004,487,90873);x();case 0:b=i[e+4>>2];c=i[e>>2];g[a|0]=c;g[a+1|0]=c>>>8;g[a+2|0]=c>>>16;g[a+3|0]=c>>>24;g[a+4|0]=b;g[a+5|0]=b>>>8;g[a+6|0]=b>>>16;g[a+7|0]=b>>>24;b=i[e+12>>2];c=i[e+8>>2];g[a+8|0]=c;g[a+9|0]=c>>>8;g[a+10|0]=c>>>16;g[a+11|0]=c>>>24;g[a+12|0]=b;g[a+13|0]=b>>>8;g[a+14|0]=b>>>16;g[a+15|0]=b>>>24;break b;case 1:g[a|0]=j[e+12|0];g[a+1|0]=j[e+8|0];g[a+2|0]=j[e+4|0];g[a+3|0]=j[e|0];g[a+4|0]=j[e+13|0];g[a+5|0]=j[e+9|0];g[a+6|0]=j[e+5|0];g[a+7|0]=j[e+1|0];g[a+8|0]=j[e+14|0];g[a+9|0]=j[e+10|0];g[a+10|0]=j[e+6|0];g[a+11|0]=j[e+2|0];g[a+12|0]=j[e+15|0];g[a+13|0]=j[e+11|0];g[a+14|0]=j[e+7|0];g[a+15|0]=j[e+3|0];break b;case 2:g[a|0]=j[e+15|0];g[a+1|0]=j[e+14|0];g[a+2|0]=j[e+13|0];g[a+3|0]=j[e+12|0];g[a+4|0]=j[e+11|0];g[a+5|0]=j[e+10|0];g[a+6|0]=j[e+9|0];g[a+7|0]=j[e+8|0];g[a+8|0]=j[e+7|0];g[a+9|0]=j[e+6|0];g[a+10|0]=j[e+5|0];g[a+11|0]=j[e+4|0];g[a+12|0]=j[e+3|0];g[a+13|0]=j[e+2|0];g[a+14|0]=j[e+1|0];g[a+15|0]=j[e|0];break b;case 3:break c}}g[a|0]=j[e+3|0];g[a+1|0]=j[e+7|0];g[a+2|0]=j[e+11|0];g[a+3|0]=j[e+15|0];g[a+4|0]=j[e+2|0];g[a+5|0]=j[e+6|0];g[a+6|0]=j[e+10|0];g[a+7|0]=j[e+14|0];g[a+8|0]=j[e+1|0];g[a+9|0]=j[e+5|0];g[a+10|0]=j[e+9|0];g[a+11|0]=j[e+13|0];g[a+12|0]=j[e|0];g[a+13|0]=j[e+4|0];g[a+14|0]=j[e+8|0];g[a+15|0]=j[e+12|0]}ha=e+16|0}function sb(a,b){var c=0,d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0;m=i[a+104>>2];c=j[m+21824|0]<<9;f=j[(c|j[a+21|0]<<1)+308e3|0];l=b;a:{if(m+ -15>>>0<=2){c=j[(c|j[a+22|0]<<1)+308e3|0];d=(o(f,63)+127>>>0)/255|0;e=(d>>>0<63?d:63)<<5;d=(o(f,31)+127>>>0)/255|0;f=d>>>0<31?d:31;d=e|f;g[b|0]=d;f=(e|f<<11)>>>8|0;g[b+1|0]=f;e=(o(c,63)+127>>>0)/255|0;e=(e>>>0<63?e:63)<<5;c=(o(c,31)+127>>>0)/255|0;c=c>>>0<31?c:31;k=e|c;c=(e|c<<11)>>>8|0;break a}c=c+308e3|0;d=(o(j[c+(j[a+25|0]<<1)|0],31)+127>>>0)/255|0;k=d>>>0<31?d:31;d=o(j[c+(j[a+23|0]<<1)|0],63);e=d>>>0<15938?(d+127>>>0)/255<<5:2016;d=k|e;g[b|0]=d;f=o(f,31);f=((e|(f>>>0<7778?(f+127>>>0)/255<<11:-2048))&65280)>>>8|0;g[b+1|0]=f;e=(o(j[c+(j[a+26|0]<<1)|0],31)+127>>>0)/255|0;k=e>>>0<31?e:31;e=o(j[c+(j[a+24|0]<<1)|0],63);e=e>>>0<15938?(e+127>>>0)/255<<5:2016;k=k|e;c=o(j[c+(j[a+22|0]<<1)|0],31);c=((e|(c>>>0<7778?(c+127>>>0)/255<<11:-2048))&65280)>>>8|0}g[l+3|0]=c;g[b+2|0]=k;b:{l=k&255|(c&255)<<8;e=d&255|(f&255)<<8;if((l|0)==(e|0)){c=b;c:{if(!e){f=0;d=1;a=0;h=85;l=0;break c}if(!e){break b}a=e+ -1|0;l=(a&65280)>>>8|0}g[c+3|0]=l;g[b+2|0]=a;g[b+1|0]=f;g[b|0]=d;a=o(h,16843009);g[b+4|0]=a;g[b+5|0]=a>>>8;g[b+6|0]=a>>>16;g[b+7|0]=a>>>24;return}if(e>>>0>>0){g[b+2|0]=d;g[b|0]=k;g[b+3|0]=f;g[b+1|0]=c}c=i[(j[m+21760|0]<<2)+300704>>2];d=a+39|0;h=j[m+21888|0]+ -1|0;f=j[c+j[d+(1<>>0>>0;c=a^j[c+j[d+(9<>>6;c=(c<<4|(a^s)<<2|a^r)<<4|(a^q)<<2|a^p;g[b+6|0]=c>>>6;c=(c<<4|(a^n)<<2|a^m)<<4|(a^k)<<2|a^f;g[b+5|0]=c>>>6;g[b+4|0]=a^t|c<<2;return}A(28955,19512,15547,28975);x()}function Vb(a,b){var c=0,d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0,t=0,u=0;d=j[b+15|0];c=j[b+14|0];f=j[b+13|0];k=j[b+12|0];e=j[b+11|0];h=j[b+10|0];i=j[b+9|0];l=j[b+8|0];m=j[b+7|0];n=j[b+6|0];p=j[b+5|0];q=j[b+4|0];r=j[b+3|0];s=j[b|0];t=j[b+1|0];u=j[b+2|0];g[a+8|0]=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;g[a|0]=0;g[a+1|0]=0;g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;c=t<<2|s|u<<4|r<<6|q<<8|p<<10|n<<12|m<<14|l<<16|i<<18|h<<20|e<<22|k<<24|f<<26|c<<28|d<<30;k=0;while(1){f=k<<2;h=j[f+b|0];d=-2;a:{b:{c:{c=c?c:1;c=o(c&65535,36969)+(c>>>16|0)|0;e=c?c:1;e=o(e&65535,36969)+(e>>>16|0)|0;c=(o(e&65535^e>>>16,6)>>>16)+(o(c&65535^c>>>16,6)>>>16)|0;switch(c|0){case 0:break a;case 10:break c;default:break b}}d=2;break a}d=-1;if(c>>>0<3){break a}d=c>>>0>7}d=d+h|0;d=(d|0)<3?d:3;g[a+f|0]=(d|0)>0?d:0;i=f|1;l=j[i+b|0];d=2;c=2;d:{e:{f:{e=e?e:1;e=o(e&65535,36969)+(e>>>16|0)|0;h=e?e:1;h=o(h&65535,36969)+(h>>>16|0)|0;e=(o(h&65535^h>>>16,6)>>>16)+(o(e&65535^e>>>16,6)>>>16)|0;switch(e|0){case 10:break d;case 0:break f;default:break e}}c=-2;break d}c=-1;if(e>>>0<3){break d}c=e>>>0>7}c=c+l|0;c=(c|0)<3?c:3;g[a+i|0]=(c|0)>0?c:0;i=f|2;l=j[i+b|0];g:{h:{i:{c=h?h:1;c=o(c&65535,36969)+(c>>>16|0)|0;e=c?c:1;e=o(e&65535,36969)+(e>>>16|0)|0;c=(o(e&65535^e>>>16,6)>>>16)+(o(c&65535^c>>>16,6)>>>16)|0;switch(c|0){case 0:break i;case 10:break g;default:break h}}d=-2;break g}d=-1;if(c>>>0<3){break g}d=c>>>0>7}d=d+l|0;d=(d|0)<3?d:3;g[a+i|0]=(d|0)>0?d:0;h=f|3;i=j[h+b|0];d=2;j:{k:{l:{c=e?e:1;f=o(c&65535,36969)+(c>>>16|0)|0;c=f?f:1;c=o(c&65535,36969)+(c>>>16|0)|0;f=(o(c&65535^c>>>16,6)>>>16)+(o(f&65535^f>>>16,6)>>>16)|0;switch(f|0){case 10:break j;case 0:break l;default:break k}}d=-2;break j}d=-1;if(f>>>0<3){break j}d=f>>>0>7}d=d+i|0;d=(d|0)<3?d:3;g[a+h|0]=(d|0)>0?d:0;k=k+1|0;if((k|0)!=4){continue}break}}function $b(a,b,c,d){var e=0,f=0,g=p(0),h=p(0),k=0,l=0,n=0,r=0,s=0,t=0,u=0,v=0,w=p(0),x=0,y=0,z=p(0),A=0,B=0,C=0,D=0,E=p(0),F=0,G=0,H=p(0),I=0,J=0,K=p(0),L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;while(1){x=j[b+e|0];f=(e<<2)+a|0;k=j[f+2|0];l=o(x,k)+l|0;n=j[f+1|0];r=o(n,x)+r|0;f=j[f|0];s=o(f,x)+s|0;t=t+k|0;u=u+n|0;v=f+v|0;y=i[(x<<2)+297696>>2]+y|0;e=e+1|0;if((e|0)!=16){continue}break}E=p((y&255)>>>0);H=p((y>>>16&255)>>>0);g=p((y>>>8&255)>>>0);h=p(p(E*H)-p(g*g));I=p(q(h))>>0);w=p(p(p(v>>>0)*p(3))-z);h=p(p(3)/h);E=p(h*E);g=p(h*p(-g));m[c>>2]=p(E*z)+p(g*w);K=p(g*z);z=p(h*H);m[d>>2]=K+p(z*w);w=p(r>>>0);h=p(p(p(u>>>0)*p(3))-w);m[c+4>>2]=p(E*w)+p(h*g);m[d+4>>2]=p(g*w)+p(h*z);w=p(l>>>0);h=p(p(p(t>>>0)*p(3))-w);m[c+8>>2]=p(E*w)+p(h*g);m[d+8>>2]=p(g*w)+p(h*z);L=a+60|0;M=a+56|0;N=a+52|0;O=a+48|0;P=a+44|0;Q=a+40|0;R=a+36|0;S=a+32|0;T=a+28|0;U=a+24|0;V=a+20|0;W=a+16|0;X=a+12|0;Y=a+8|0;Z=a+4|0;e=0;while(1){G=e<<2;J=G+c|0;a:{if(m[d+G>>2]>p(255)^1?!(m[J>>2]>>0>>0?b:y;x=j[e+Y|0];f=l>>>0>>0?l:x;l=j[e+X|0];r=f>>>0>>0?f:l;f=j[e+W|0];s=r>>>0>>0?r:f;r=j[e+V|0];t=s>>>0>>0?s:r;s=j[e+U|0];u=t>>>0>>0?t:s;t=j[e+T|0];v=u>>>0>>0?u:t;u=j[e+S|0];k=v>>>0>>0?v:u;v=j[e+R|0];n=k>>>0>>0?k:v;k=j[e+Q|0];A=n>>>0>>0?n:k;n=j[e+P|0];B=A>>>0>>0?A:n;A=j[e+O|0];C=B>>>0>>0?B:A;B=j[e+N|0];D=C>>>0>>0?C:B;C=j[e+M|0];F=D>>>0>>0?D:C;D=j[e+L|0];F=F>>>0>>0?F:D;b=b>>>0>y>>>0?b:y;b=b>>>0>x>>>0?b:x;b=b>>>0>l>>>0?b:l;b=b>>>0>f>>>0?b:f;b=b>>>0>r>>>0?b:r;b=b>>>0>s>>>0?b:s;b=b>>>0>t>>>0?b:t;b=b>>>0>u>>>0?b:u;b=b>>>0>v>>>0?b:v;b=b>>>0>k>>>0?b:k;b=b>>>0>n>>>0?b:n;b=b>>>0>A>>>0?b:A;b=b>>>0>B>>>0?b:B;b=b>>>0>C>>>0?b:C;if((F|0)!=((b>>>0>D>>>0?b:D)|0)){break a}g=p(F>>>0);m[J>>2]=g;m[d+G>>2]=g}e=e+1|0;if((e|0)!=3){continue}break}}return I^1}function ac(a,b,c){var d=0,e=0,f=0,h=0,k=0,l=0,m=0,n=0;f=j[a|0];a:{b:{k=j[a+3|0];c:{if(k&2){if(!c){break b}h=j[a+2|0];a=j[a+1|0];d=h&7|a<<3&56;a=((d>>>0>31?-8:0)|d>>>3)+(a>>>3|0)|0;d=d&7;d=((d>>>0>3?-8:0)|d)+(h>>>3|0)|0;h=f&7;e=((h>>>0>3?-8:0)|h)+((f&248)>>>3|0)|0;if((d|(e|a))>>>0>=32){d=(d|0)<31?d:31;d=(d|0)>0?d:0;f=(e|0)<31?e:31;e=(f|0)>0?f:0;a=(a|0)<31?a:31;a=(a|0)>0?a:0}h=d<<3|d>>>2;f=e<<3|e>>>2;d=a<<3|a>>>2;break c}d:{if(c){d=f&15;e=j[a+2|0]&15;a=j[a+1|0]&15;break d}e=j[a+2|0]>>>4|0;d=(f&240)>>>4|0;a=j[a+1|0]>>>4|0}f=d<<4|d;h=e<<4|e;d=a|a<<4}if(c>>>0<2){break a}A(91037,19512,584,297666);x()}f=f&-8|(f&224)>>>5;d=j[a+2|0];h=(d<<16&16252928|d<<11)>>>16|0;a=j[a+1|0];d=(a<<3&1792|a<<8&63488)>>>8|0}a=255;l=f&255;k=k>>>(c?2:5)&7;e=i[(k<<4)+28352>>2];c=l+e|0;e:{if(c>>>0<256){a=c;break e}if((c|0)>-1){break e}a=0}f=255;m=d&255;c=e+m|0;f:{if(c>>>0<256){f=c;break f}if((c|0)>-1){break f}f=0}d=255;n=h&255;c=e+n|0;g:{if(c>>>0<256){d=c;break g}if((c|0)>-1){break g}d=0}h=255;g[b+3|0]=255;g[b+2|0]=d;g[b+1|0]=f;g[b|0]=a;c=i[(k<<4)+28356>>2];a=c+l|0;h:{if(a>>>0<256){h=a;break h}if((a|0)>-1){break h}h=0}e=c+m|0;i:{if(e>>>0<256){break i}a=(e|0)>-1;e=255;if(a){break i}e=0}a=c+n|0;j:{if(a>>>0<256){break j}c=(a|0)>-1;a=255;if(c){break j}a=0}f=255;g[b+7|0]=255;g[b+6|0]=a;g[b+5|0]=e;g[b+4|0]=h;c=i[(k<<4)+28360>>2];a=c+l|0;k:{if(a>>>0<256){f=a;break k}if((a|0)>-1){break k}f=0}e=c+m|0;l:{if(e>>>0<256){break l}a=(e|0)>-1;e=255;if(a){break l}e=0}a=c+n|0;m:{if(a>>>0<256){break m}c=(a|0)>-1;a=255;if(c){break m}a=0}d=255;g[b+11|0]=255;g[b+10|0]=a;g[b+9|0]=e;g[b+8|0]=f;c=i[(k<<4)+28364>>2];a=c+l|0;n:{if(a>>>0<256){d=a;break n}if((a|0)>-1){break n}d=0}a=c+m|0;o:{if(a>>>0<256){break o}f=(a|0)>-1;a=255;if(f){break o}a=0}c=c+n|0;p:{if(c>>>0<256){break p}f=(c|0)>-1;c=255;if(f){break p}c=0}g[b+15|0]=255;g[b+14|0]=c;g[b+13|0]=a;g[b+12|0]=d}function rd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=ha+ -64|0;ha=f;i[f+32>>2]=0;i[f+24>>2]=0;i[f+28>>2]=0;i[f+16>>2]=0;i[f+8>>2]=0;i[f+12>>2]=0;j=Q(1654)|0;k=D(1660)|0;o=E(j|0,k|0)|0;B(k|0);B(j|0);h=i[c>>2];j=D(1667)|0;k=E(h|0,j|0)|0;B(j|0);l=+K(k|0,300332,f+40|0);J(i[f+40>>2]);if(l<4294967296&l>=0){j=~~l>>>0}else{j=0}if(j){Oa(f+24|0,j)}B(k|0);h=i[c>>2];j=D(1678)|0;k=E(h|0,j|0)|0;B(j|0);n=i[f+24>>2];h=i[c>>2];j=D(1690)|0;h=E(h|0,j|0)|0;B(j|0);l=+K(h|0,300308,f+40|0);J(i[f+40>>2]);F(o|0);j=f;if(l<4294967296&l>=0){m=~~l>>>0}else{m=0}i[j+56>>2]=m;i[f+48>>2]=n;i[f+40>>2]=o;j=P(k|0,3,1704,f+40|0)|0;B(h|0);B(k|0);a:{if(g[300748]&1){break a}if(!Sa()){break a}p=300744,q=O(2,1744)|0,i[p>>2]=q;Ra()}k=i[75186];F(i[c>>2]);i[f+40>>2]=i[c>>2];N(k|0,j|0,1697,f+40|0);h=i[e>>2];c=D(1667)|0;k=E(h|0,c|0)|0;B(c|0);l=+K(k|0,300332,f+40|0);J(i[f+40>>2]);n=i[f+8>>2];h=i[f+12>>2]-n|0;m=h;if(l<4294967296&l>=0){c=~~l>>>0}else{c=0}b:{if(m>>>0>>0){Oa(f+8|0,c-h|0);break b}if(h>>>0<=c>>>0){break b}i[f+12>>2]=c+n}B(k|0);h=i[e>>2];c=D(1678)|0;k=E(h|0,c|0)|0;B(c|0);n=i[f+8>>2];h=i[e>>2];c=D(1690)|0;h=E(h|0,c|0)|0;B(c|0);l=+K(h|0,300308,f+40|0);J(i[f+40>>2]);F(o|0);c=f;if(l<4294967296&l>=0){m=~~l>>>0}else{m=0}i[c+56>>2]=m;i[f+48>>2]=n;i[f+40>>2]=o;c=P(k|0,3,1704,f+40|0)|0;B(h|0);B(k|0);c:{if(g[300748]&1){break c}if(!Sa()){break c}p=300744,q=O(2,1744)|0,i[p>>2]=q;Ra()}k=i[75186];F(i[e>>2]);i[f+40>>2]=i[e>>2];N(k|0,c|0,1697,f+40|0);e=a;a=i[f+24>>2];h=a;m=i[f+28>>2]-a|0;a=i[f+8>>2];b=xc(e,b,h,m,d,a,i[f+12>>2]-a|0);B(c|0);B(j|0);B(o|0);a=i[f+8>>2];if(a){i[f+12>>2]=a;wa(a)}a=i[f+24>>2];if(a){i[f+28>>2]=a;wa(a)}ha=f- -64|0;return b|0}function Xb(a,b){var c=0,d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g[a|0]=0;g[a+1|0]=0;g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;g[a+8|0]=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;a:{while(1){f=99;l=d+ -1|0;o=l>>>0>3;if(!o){e=l<<2;c=j[e+b|0];f=c>>>0<99?c:99;c=j[(e|1)+b|0];f=f>>>0>>0?f:c}k=d>>>0>3;if(k){break a}m=d<<2;i=m+b|0;c=j[i|0];f=f>>>0>>0?f:c;n=m|1;q=n+b|0;c=j[q|0];c=f>>>0>>0?f:c;f=d+1|0;h=a+m|0;p=(d|0)==3;if(!p){e=f<<2;d=j[e+b|0];d=c>>>0>>0?c:d;c=j[(e|1)+b|0];c=d>>>0>>0?d:c}g[h|0]=c;d=99;if(!o){e=l<<2;c=j[e+b|0];d=c>>>0<99?c:99;c=j[(e|1)+b|0];d=d>>>0>>0?d:c;c=j[(e|2)+b|0];d=d>>>0>>0?d:c}if(k){break a}c=j[i|0];d=d>>>0>>0?d:c;c=j[q|0];d=d>>>0>>0?d:c;i=m|2;k=i+b|0;c=j[k|0];c=d>>>0>>0?d:c;e=a+n|0;if(!p){h=f<<2;d=j[h+b|0];d=c>>>0>>0?c:d;c=j[(h|1)+b|0];d=d>>>0>>0?d:c;c=j[(h|2)+b|0];c=d>>>0>>0?d:c}g[e|0]=c;d=99;if(!o){e=l<<2;c=j[(e|1)+b|0];d=c>>>0<99?c:99;c=j[(e|2)+b|0];d=d>>>0>>0?d:c;c=j[(e|3)+b|0];d=d>>>0>>0?d:c}c=j[q|0];d=d>>>0>>0?d:c;c=j[k|0];d=d>>>0>>0?d:c;n=m|3;h=n+b|0;c=j[h|0];c=d>>>0>>0?d:c;e=a+i|0;if(!p){i=f<<2;d=j[(i|1)+b|0];d=c>>>0>>0?c:d;c=j[(i|2)+b|0];d=d>>>0>>0?d:c;c=j[(i|3)+b|0];c=d>>>0>>0?d:c}g[e|0]=c;d=99;if(!o){e=l<<2;c=j[(e|2)+b|0];d=c>>>0<99?c:99;c=j[(e|3)+b|0];d=d>>>0>>0?d:c}c=j[k|0];d=d>>>0>>0?d:c;c=j[h|0];c=d>>>0>>0?d:c;h=a+n|0;if(!p){e=f<<2;d=j[(e|2)+b|0];d=c>>>0>>0?c:d;c=j[(e|3)+b|0];c=d>>>0>>0?d:c}g[h|0]=c;d=f;if((d|0)!=4){continue}break}return}A(90843,29004,151,90862);x()}function Yb(a,b){var c=0,d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g[a|0]=0;g[a+1|0]=0;g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;g[a+8|0]=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;a:{while(1){f=0;l=d+ -1|0;o=l>>>0>3;if(!o){c=l<<2;f=j[c+b|0];c=j[(c|1)+b|0];f=f>>>0>c>>>0?f:c}k=d>>>0>3;if(k){break a}m=d<<2;i=m+b|0;c=j[i|0];f=f>>>0>c>>>0?f:c;n=m|1;q=n+b|0;c=j[q|0];c=f>>>0>c>>>0?f:c;f=d+1|0;h=a+m|0;p=(d|0)==3;if(!p){e=f<<2;d=j[e+b|0];d=c>>>0>d>>>0?c:d;c=j[(e|1)+b|0];c=d>>>0>c>>>0?d:c}g[h|0]=c;d=0;if(!o){e=l<<2;d=j[e+b|0];c=j[(e|1)+b|0];d=d>>>0>c>>>0?d:c;c=j[(e|2)+b|0];d=d>>>0>c>>>0?d:c}if(k){break a}c=j[i|0];d=d>>>0>c>>>0?d:c;c=j[q|0];d=d>>>0>c>>>0?d:c;i=m|2;k=i+b|0;c=j[k|0];c=d>>>0>c>>>0?d:c;e=a+n|0;if(!p){h=f<<2;d=j[h+b|0];d=c>>>0>d>>>0?c:d;c=j[(h|1)+b|0];d=d>>>0>c>>>0?d:c;c=j[(h|2)+b|0];c=d>>>0>c>>>0?d:c}g[e|0]=c;d=0;if(!o){e=l<<2;d=j[(e|1)+b|0];c=j[(e|2)+b|0];d=d>>>0>c>>>0?d:c;c=j[(e|3)+b|0];d=d>>>0>c>>>0?d:c}c=j[q|0];d=d>>>0>c>>>0?d:c;c=j[k|0];d=d>>>0>c>>>0?d:c;n=m|3;h=n+b|0;c=j[h|0];c=d>>>0>c>>>0?d:c;e=a+i|0;if(!p){i=f<<2;d=j[(i|1)+b|0];d=c>>>0>d>>>0?c:d;c=j[(i|2)+b|0];d=d>>>0>c>>>0?d:c;c=j[(i|3)+b|0];c=d>>>0>c>>>0?d:c}g[e|0]=c;d=0;if(!o){c=l<<2;d=j[(c|2)+b|0];c=j[(c|3)+b|0];d=d>>>0>c>>>0?d:c}c=j[k|0];d=d>>>0>c>>>0?d:c;c=j[h|0];c=d>>>0>c>>>0?d:c;h=a+n|0;if(!p){e=f<<2;d=j[(e|2)+b|0];d=c>>>0>d>>>0?c:d;c=j[(e|3)+b|0];c=d>>>0>c>>>0?d:c}g[h|0]=c;d=f;if((d|0)!=4){continue}break}return}A(90843,29004,151,90862);x()}function Bc(){var a=0,b=0,c=0,d=0,e=0,f=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;l=ha-1040|0;ha=l;while(1){if(!(898768>>>b&1?0:!(1797559>>>b&1?1497965>>>b&1:0))){a=o(b,12);c=(i[a+21956>>2]<<1|1)+(i[a+21960>>2]<<2)<>2];d=c>>>0>1?c:1;a=0;while(1){q=(a<<2)+l|0,r=Ac(a,b)<<8|a,i[q>>2]=r;a=a+1|0;if((d|0)!=(a|0)){continue}break}jb(l,(c<<2)+l|0,l+1032|0);a=0;while(1){c=i[(a<<2)+l>>2];e=b<<9|(c&255)<<1;g[e+308001|0]=a;g[e+308e3|0]=c>>>8;a=a+1|0;if((d|0)!=(a|0)){continue}break}}b=b+1|0;if((b|0)!=21){continue}break}while(1){c=0;e=65535;while(1){k=o(c,86)+32|0;a=0;while(1){n=b;b=(k+o(a,42)>>>6|0)-f|0;m=o(b,b);j=m>>>0<(e&65535)>>>0;b=j?a:n;d=j?c:d;e=j?m:e;a=a+1|0;if((a|0)!=128){continue}break}c=c+1|0;if((c|0)!=128){continue}break}j=f<<3;g[j+318755|0]=b;g[j+318754|0]=d;h[j+318752>>1]=e;e=65535;c=0;while(1){m=o(c<<1|1,43)+32|0;a=0;while(1){n=b;b=(m+o(a<<1|1,21)>>>6|0)-f|0;p=o(b,b);k=p>>>0<(e&65535)>>>0;b=k?a:n;d=k?c:d;e=k?p:e;a=a+1|0;if((a|0)!=128){continue}break}c=c+1|0;if((c|0)!=128){continue}break}g[j+318759|0]=b;g[j+318758|0]=d;h[j+318756>>1]=e;f=f+1|0;if((f|0)!=256){continue}break}c=0;while(1){f=0;b=65535;while(1){j=o(f<<1|f>>>6,43)+32|0;a=0;while(1){d=(j+o(a<<1|a>>>6,21)>>>6|0)-c|0;m=o(d,d);d=m>>>0<(b&65535)>>>0;b=d?m:b;e=d?f:e;k=d?a:k;a=a+1|0;if((a|0)!=128){continue}break}f=f+1|0;if((f|0)!=128){continue}break}a=c<<2;g[a+320803|0]=k;g[a+320802|0]=e;h[a+320800>>1]=b;c=c+1|0;if((c|0)!=256){continue}break}ha=l+1040|0}function jb(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;a:while(1){i=b+ -4|0;b:while(1){d=a;c:while(1){d:{e:{f:{g:{h:{i:{j:{k:{a=b-d|0;e=a>>2;switch(e|0){case 4:break j;case 2:break k;case 0:case 1:break d;case 3:break g;case 5:break i;default:break h}}a=b+ -4|0;if(l[a>>2]>=l[d>>2]){break d}Ca(d,a);return}ib(d,d+4|0,d+8|0,b+ -4|0);return}hb(d,d+4|0,d+8|0,d+12|0,b+ -4|0);return}if((a|0)<=123){yd(d,b);return}g=((e|0)/2<<2)+d|0;l:{if((a|0)>=3997){a=(e|0)/4<<2;h=hb(d,a+d|0,g,a+g|0,i);break l}h=Pa(d,g,i)}a=i;if(l[d>>2]>=l[g>>2]){while(1){a=a+ -4|0;if((d|0)==(a|0)){f=d+4|0;if(l[d>>2]>2]){break e}while(1){if((f|0)==(i|0)){break d}if(l[d>>2]>2]){Ca(f,i);f=f+4|0;break e}else{f=f+4|0;continue}}}if(l[a>>2]>=l[g>>2]){continue}break}Ca(d,a);h=h+1|0}e=d+4|0;if(e>>>0>=a>>>0){break f}while(1){f=e;e=e+4|0;if(l[f>>2]>2]){continue}while(1){a=a+ -4|0;if(l[a>>2]>=l[g>>2]){continue}break}if(f>>>0>a>>>0){e=f;break f}else{Ca(f,a);g=(f|0)==(g|0)?a:g;h=h+1|0;continue}}}Pa(d,d+4|0,b+ -4|0);break d}if(!((e|0)==(g|0)|l[g>>2]>=l[e>>2])){Ca(e,g);h=h+1|0}if(!h){f=Hb(d,e);a=e+4|0;if(Hb(a,b)){b=e;a=d;if(!f){continue a}break d}if(f){continue b}}if((e-d|0)<(b-e|0)){jb(d,e,c);a=e+4|0;continue b}jb(e+4|0,b,c);b=e;a=d;continue a}a=i;if((f|0)==(a|0)){break d}while(1){e=f;f=e+4|0;if(l[d>>2]>=l[e>>2]){continue}while(1){a=a+ -4|0;if(l[d>>2]>2]){continue}break}if(e>>>0>=a>>>0){d=e;continue c}else{Ca(e,a);continue}}}break}break}break}}function mb(a,b,c){var d=0,e=0,f=0,g=0,h=0,i=0;a:while(1){i=b+ -1|0;b:while(1){d=a;c:while(1){d:{e:{f:{g:{h:{i:{j:{k:{a=b-d|0;switch(a|0){case 4:break j;case 2:break k;case 0:case 1:break d;case 3:break g;case 5:break i;default:break h}}a=b+ -1|0;if(j[a|0]>=j[d|0]){break d}Da(d,a);return}lb(d,d+1|0,d+2|0,b+ -1|0);return}kb(d,d+1|0,d+2|0,d+3|0,b+ -1|0);return}if((a|0)<=30){zd(d,b);return}g=(a>>>1|0)+d|0;l:{if((a|0)>=1e3){a=a>>>2|0;h=kb(d,a+d|0,g,a+g|0,i);break l}h=Qa(d,g,i)}a=i;if(j[d|0]>=j[g|0]){while(1){a=a+ -1|0;if((d|0)==(a|0)){f=d+1|0;if(j[d|0]=j[g|0]){continue}break}Da(d,a);h=h+1|0}e=d+1|0;if(e>>>0>=a>>>0){break f}while(1){f=e;e=e+1|0;if(j[f|0]=j[g|0]){continue}break}if(f>>>0>a>>>0){e=f;break f}else{Da(f,a);g=(f|0)==(g|0)?a:g;h=h+1|0;continue}}}Qa(d,d+1|0,b+ -1|0);break d}if(!((e|0)==(g|0)|j[g|0]>=j[e|0])){Da(e,g);h=h+1|0}if(!h){f=Ib(d,e);a=e+1|0;if(Ib(a,b)){b=e;a=d;if(!f){continue a}break d}if(f){continue b}}if((e-d|0)<(b-e|0)){mb(d,e,c);a=e+1|0;continue b}mb(e+1|0,b,c);b=e;a=d;continue a}a=i;if((f|0)==(a|0)){break d}while(1){e=f;f=e+1|0;if(j[d|0]>=j[e|0]){continue}while(1){a=a+ -1|0;if(j[d|0]>>0>=a>>>0){d=e;continue c}else{Da(e,a);continue}}}break}break}break}}function Ab(a){var b=0;b=i[a+396>>2];if(b){i[a+400>>2]=b;wa(b)}b=i[a+384>>2];if(b){i[a+388>>2]=b;wa(b)}b=i[a+372>>2];if(b){i[a+376>>2]=b;wa(b)}b=i[a+360>>2];if(b){i[a+364>>2]=b;wa(b)}b=i[a+348>>2];if(b){i[a+352>>2]=b;wa(b)}b=i[a+336>>2];if(b){i[a+340>>2]=b;wa(b)}b=i[a+324>>2];if(b){i[a+328>>2]=b;wa(b)}b=i[a+312>>2];if(b){i[a+316>>2]=b;wa(b)}b=i[a+300>>2];if(b){i[a+304>>2]=b;wa(b)}b=i[a+288>>2];if(b){i[a+292>>2]=b;wa(b)}b=i[a+276>>2];if(b){i[a+280>>2]=b;wa(b)}b=i[a+264>>2];if(b){i[a+268>>2]=b;wa(b)}b=i[a+252>>2];if(b){i[a+256>>2]=b;wa(b)}b=i[a+240>>2];if(b){i[a+244>>2]=b;wa(b)}b=i[a+228>>2];if(b){i[a+232>>2]=b;wa(b)}b=i[a+216>>2];if(b){i[a+220>>2]=b;wa(b)}b=i[a+204>>2];if(b){i[a+208>>2]=b;wa(b)}b=i[a+192>>2];if(b){i[a+196>>2]=b;wa(b)}b=i[a+180>>2];if(b){i[a+184>>2]=b;wa(b)}b=i[a+168>>2];if(b){i[a+172>>2]=b;wa(b)}b=i[a+156>>2];if(b){i[a+160>>2]=b;wa(b)}b=i[a+144>>2];if(b){i[a+148>>2]=b;wa(b)}b=i[a+132>>2];if(b){i[a+136>>2]=b;wa(b)}b=i[a+120>>2];if(b){i[a+124>>2]=b;wa(b)}b=i[a+108>>2];if(b){i[a+112>>2]=b;wa(b)}b=i[a+96>>2];if(b){i[a+100>>2]=b;wa(b)}b=i[a+84>>2];if(b){i[a+88>>2]=b;wa(b)}b=i[a+72>>2];if(b){i[a+76>>2]=b;wa(b)}b=i[a+60>>2];if(b){i[a- -64>>2]=b;wa(b)}b=i[a+48>>2];if(b){i[a+52>>2]=b;wa(b)}b=i[a+36>>2];if(b){i[a+40>>2]=b;wa(b)}b=i[a+24>>2];if(b){i[a+28>>2]=b;wa(b)}b=i[a+12>>2];if(b){i[a+16>>2]=b;wa(b)}b=i[a>>2];if(b){i[a+4>>2]=b;wa(b)}return a}function dc(a,b,c,d,e,f,g){var h=0,j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;k=i[e+28>>2];l=i[e+32>>2];a:{b:{c:{d:{e:{f:{g:{h:{i:{j:{k:{l:{if(a+ -13>>>0<=3){n=i[e+24>>2];p=i[e+20>>2];if(o(n,p)>>>0<=c>>>0){break l}break b}if(a>>>0>21){break a}h=1<>2]+7>>>3|0,i[e+24>>2]+3>>>2|0)<<4>>>0>c>>>0){break b}break k}j=16}if(o(j,o(k,l))>>>0>c>>>0){break b}}c=8;if((a&-2)==8){if((Xd(k<<2)|0)!=1){break b}if((Xd(l<<2)|0)!=1){break b}}j=4;n:{switch(a|0){case 0:case 2:case 4:case 8:case 9:case 11:case 18:case 19:case 20:break j;case 1:case 3:case 5:case 6:case 7:case 10:case 12:case 17:case 21:break k;case 14:case 15:case 16:break n;case 13:break i;default:break a}}c=2;break j}c=16}q=f>>>2&g;m=-1;j=c;h=-1;o:{switch(a|0){case 6:a=8;break c;case 8:a=6;break c;case 9:a=7;break c;case 10:a=12;break c;case 20:h=q?3:0;a=18;break c;case 21:a=19;break;case 5:break o;case 11:case 12:case 17:case 18:case 19:break b;case 0:case 1:case 2:case 3:break c;case 4:break d;case 16:break f;case 15:break g;case 14:break h;case 13:break i;default:break e}}m=3;h=0;break c}a=22;h=-1;c=j;m=-1;break c}a=24;break c}a=25;break c}a=29;break c}A(19820,19512,9848,19947);x()}h=q?3:0;a=4}r=tc(b,k,l,i[e+4>>2]+d|0,i[e+8>>2],a,c,g,i[e+20>>2],i[e+24>>2],p,n,h,m,f)}return r}A(19820,19512,10859,19963);x()}function Wa(a){var b=0,c=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0;h=8;a:{b:{while(1){if(h+ -1&h){break b}h=h>>>0>8?h:8;d=i[81391];g=d;f=i[81390];j=f;a=a>>>0>8?a+3&-4:8;c:{if(a>>>0<=127){e=(a>>>3|0)+ -1|0;break c}b=r(a);e=((a>>>29-b^4)-(b<<2)|0)+110|0;if(a>>>0<=4095){break c}b=((a>>>30-b^2)-(b<<1)|0)+71|0;e=b>>>0<63?b:63}b=e;c=b&31;if(32<=(b&63)>>>0){b=0;c=d>>>c|0}else{b=d>>>c|0;c=((1<>>c}d=b;if(b|c){while(1){g=c;f=Wd(c,d);b=f;c=b&31;if(32<=(b&63)>>>0){b=0;g=d>>>c|0}else{b=d>>>c|0;g=((1<>>c}d=b;e=e+f|0;f=e<<4;b=i[f+324536>>2];j=f+324528|0;d:{if((b|0)!=(j|0)){c=cb(b,h,a);if(c){break a}c=i[b+4>>2];i[c+8>>2]=i[b+8>>2];i[i[b+8>>2]+4>>2]=c;i[b+8>>2]=j;c=f+324532|0;i[b+4>>2]=i[c>>2];i[c>>2]=b;i[i[b+4>>2]+8>>2]=b;e=e+1|0;c=(d&1)<<31|g>>>1;d=d>>>1|0;break d}b=i[81391];k=325560,l=i[81390]&Zd(-2,-1,e),i[k>>2]=l;i[81391]=ia&b;c=g^1}if(c|d){continue}break}f=i[81390];g=i[81391]}d=r(g);d=63-((d|0)==32?r(f)+32|0:d)<<4;b=d+324528|0;d=i[d+324536>>2];e:{if(!g&f>>>0<1073741824|g>>>0<0){break e}e=99;if((b|0)==(d|0)){break e}while(1){if(!e){break e}c=cb(d,h,a);if(c){break a}e=e+ -1|0;d=i[d+8>>2];if((b|0)!=(d|0)){continue}break}d=b}if(Cb(a+48|0)){continue}break}if((b|0)==(d|0)){break b}while(1){c=cb(d,h,a);if(c){break a}d=i[d+8>>2];if((b|0)!=(d|0)){continue}break}}c=0}return c}function Uc(a,b,c,d,e,f,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0,s=0;l=ha-48|0;ha=l;j=Q(1654)|0;k=D(1660)|0;n=E(j|0,k|0)|0;B(k|0);B(j|0);i[l+16>>2]=0;i[l+8>>2]=0;i[l+12>>2]=0;j=i[d>>2];k=D(1667)|0;j=E(j|0,k|0)|0;B(k|0);p=+K(j|0,300308,l+24|0);J(i[l+24>>2]);B(j|0);if(p<4294967296&p>=0){j=~~p>>>0}else{j=0}if(j){Oa(l+8|0,j)}j=i[d>>2];k=D(1678)|0;j=E(j|0,k|0)|0;B(k|0);m=i[l+12>>2];k=i[l+8>>2];F(n|0);i[l+40>>2]=m-k;i[l+32>>2]=k;i[l+24>>2]=n;q=P(j|0,3,1768,l+24|0)|0;B(j|0);a:{if(g[300748]&1){break a}if(!Sa()){break a}r=300744,s=O(2,1744)|0,i[r>>2]=s;Ra()}j=i[75186];F(i[d>>2]);i[l+24>>2]=i[d>>2];N(j|0,q|0,1697,l+24|0);j=i[e+24>>2];k=i[e+20>>2];m=_a(c);d=o(o(j,k),m);b:{if(c+ -13>>>0<4){break b}if((c&-2)==8){d=j+3&-4;j=d>>>0>8?d:8;d=k+3&-4;d=o(j,d>>>0>8?d:8)>>>1&536870904;break b}d=(c|0)==17?8:4;d=o(o(m,((d+k|0)+ -1>>>0)/(d>>>0)|0),j+3>>>2|0)}j=xa(12);i[j+8>>2]=0;i[j>>2]=0;i[j+4>>2]=0;c:{d:{if(!d){m=0;k=0;break d}if((d|0)<=-1){break c}k=xa(d);i[j>>2]=k;m=d+k|0;i[j+8>>2]=m;ya(k,0,d);i[j+4>>2]=m}c=ec(b,c,k,m-k|0,i[l+8>>2],e,f,h);b=_()|0;if(c){c=D(1752)|0;i[l+24>>2]=j;d=T(1840,l+24|0)|0;Y(b|0,c|0,d|0);B(d|0);B(c|0)}i[a>>2]=b;B(0);B(q|0);a=i[l+8>>2];if(a){i[l+12>>2]=a;wa(a)}B(n|0);ha=l+48|0;return}Ja();x()}function Fa(a,b,c){var d=0,e=0,f=0,h=0,k=0,l=0,m=0;d=j[b+2|0];f=d>>>2|0;d=d<<3;e=j[b+1|0];k=e<<3|e>>>2;e=255;b=j[b|0];l=(b<<3|b>>>2)&255;h=i[(c<<4)+28352>>2];b=l+h|0;a:{if(b>>>0<256){e=b;break a}if((b|0)>-1){break a}e=0}f=d|f;b=255;k=k&255;d=k+h|0;b:{if(d>>>0<256){b=d;break b}if((d|0)>-1){break b}b=0}d=255;m=f&255;h=h+m|0;c:{if(h>>>0<256){d=h;break c}if((h|0)>-1){break c}d=0}h=255;g[a+3|0]=255;g[a+2|0]=d;g[a+1|0]=b;g[a|0]=e;d=i[(c<<4)+28356>>2];b=d+l|0;d:{if(b>>>0<256){h=b;break d}if((b|0)>-1){break d}h=0}f=d+k|0;e:{if(f>>>0<256){break e}b=(f|0)>-1;f=255;if(b){break e}f=0}e=d+m|0;f:{if(e>>>0<256){break f}b=(e|0)>-1;e=255;if(b){break f}e=0}b=255;g[a+7|0]=255;g[a+6|0]=e;g[a+5|0]=f;g[a+4|0]=h;e=i[(c<<4)+28360>>2];d=e+l|0;g:{if(d>>>0<256){b=d;break g}if((d|0)>-1){break g}b=0}f=e+k|0;h:{if(f>>>0<256){break h}d=(f|0)>-1;f=255;if(d){break h}f=0}e=e+m|0;i:{if(e>>>0<256){break i}d=(e|0)>-1;e=255;if(d){break i}e=0}d=255;g[a+11|0]=255;g[a+10|0]=e;g[a+9|0]=f;g[a+8|0]=b;e=i[(c<<4)+28364>>2];b=e+l|0;j:{if(b>>>0<256){d=b;break j}if((b|0)>-1){break j}d=0}c=e+k|0;k:{if(c>>>0<256){break k}b=(c|0)>-1;c=255;if(b){break k}c=0}b=e+m|0;l:{if(b>>>0<256){break l}e=(b|0)>-1;b=255;if(e){break l}b=0}g[a+15|0]=255;g[a+14|0]=b;g[a+13|0]=c;g[a+12|0]=d}function Pc(a,b,c,d,e,f,h,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;h=h|0;j=j|0;var k=0,l=0,m=0,n=0,p=0,q=0,r=0;j=ha-48|0;ha=j;i[j+16>>2]=0;i[j+8>>2]=0;i[j+12>>2]=0;b=i[d>>2];k=D(1667)|0;b=E(b|0,k|0)|0;B(k|0);m=+K(b|0,300332,j+24|0);J(i[j+24>>2]);B(b|0);if(m<4294967296&m>=0){b=~~m>>>0}else{b=0}if(b){Oa(j+8|0,b)}k=Q(1654)|0;l=D(1660)|0;n=E(k|0,l|0)|0;B(l|0);B(k|0);k=i[d>>2];l=D(1678)|0;k=E(k|0,l|0)|0;B(l|0);l=i[j+8>>2];F(n|0);i[j+40>>2]=b;i[j+32>>2]=l;i[j+24>>2]=n;p=P(k|0,3,1856,j+24|0)|0;B(k|0);a:{if(g[300748]&1){break a}if(!Sa()){break a}q=300744,r=O(2,1744)|0,i[q>>2]=r;Ra()}b=i[75186];F(i[d>>2]);i[j+24>>2]=i[d>>2];N(b|0,p|0,1697,j+24|0);d=i[e+24>>2];k=i[e+20>>2];l=_a(c);b=o(o(d,k),l);b:{if(c+ -13>>>0<4){break b}if((c&-2)==8){b=d+3&-4;d=b>>>0>8?b:8;b=k+3&-4;b=o(d,b>>>0>8?b:8)>>>1&536870904;break b}b=(c|0)==17?8:4;b=o(o(l,((b+k|0)+ -1>>>0)/(b>>>0)|0),d+3>>>2|0)}d=xa(12);i[d+8>>2]=0;i[d>>2]=0;i[d+4>>2]=0;c:{d:{if(!b){l=0;k=0;break d}if((b|0)<=-1){break c}k=xa(b);i[d>>2]=k;l=b+k|0;i[d+8>>2]=l;ya(k,0,b);i[d+4>>2]=l}c=dc(c,k,l-k|0,i[j+8>>2],e,f,h);b=_()|0;if(c){c=D(1752)|0;i[j+24>>2]=d;d=T(1840,j+24|0)|0;Y(b|0,c|0,d|0);B(d|0);B(c|0)}i[a>>2]=b;B(0);B(p|0);B(n|0);a=i[j+8>>2];if(a){i[j+12>>2]=a;wa(a)}ha=j+48|0;return}Ja();x()}function Sb(a,b){var c=0,d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0;f=ha-16|0;ha=f;c=a;g[c|0]=0;g[c+1|0]=0;g[c+2|0]=0;g[c+3|0]=0;g[c+4|0]=0;g[c+5|0]=0;g[c+6|0]=0;g[c+7|0]=0;g[c+8|0]=0;g[c+9|0]=0;g[c+10|0]=0;g[c+11|0]=0;g[c+12|0]=0;g[c+13|0]=0;g[c+14|0]=0;g[c+15|0]=0;a:{while(1){m=i<<2;k=i+1|0;n=k<<2;l=i+ -1|0;o=l<<2;e=0;while(1){c=0;p=f;b:{c:{d:{if(l>>>0<=3){d=0;c=e+ -1|0;if(c>>>0<=3){if((c|l)>>>0>=4){break a}g[f|0]=j[(c+o|0)+b|0];d=1}if((e|l)>>>0>3){break a}g[d+f|0]=j[(e+o|0)+b|0];c=d+1|0;h=2;if(e>>>0>2){break d}h=e+1|0;if((h|l)>>>0>3){break a}g[c+f|0]=j[(h+o|0)+b|0];c=d|2}h=e+ -1|0;d=1;if(h>>>0>3){break c}}if((i|h)>>>0>3){break a}g[c+f|0]=j[(h+m|0)+b|0];c=c+1|0;d=c;if(e>>>0>2){break b}d=e+1|0}if((d|i)>>>0>3){break a}g[c+f|0]=j[(d+m|0)+b|0];d=c+1|0}c=d;d=c;e:{if(i>>>0>2){break e}d=e+ -1|0;if(d>>>0<=3){if((d|k)>>>0>3){break a}g[c+f|0]=j[(d+n|0)+b|0];c=c+1|0}if((e|k)>>>0>3){break a}g[c+f|0]=j[(e+n|0)+b|0];h=c+1|0;d=h;if(e>>>0>2){break e}d=e+1|0;if((d|k)>>>0>3){break a}g[f+h|0]=j[(d+n|0)+b|0];d=c+2|0}mb(p,d+f|0,f+8|0);if((e|i)>>>0>=4){A(90843,29004,152,90862);x()}g[(e+m|0)+a|0]=j[(d>>>1|0)+f|0];e=e+1|0;if((e|0)!=4){continue}break}i=k;if((i|0)!=4){continue}break}ha=f+16|0;return}A(90843,29004,151,90862);x()}function cd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,k=0,l=0,m=0,n=0;if(Aa(a,i[b+8>>2],e)){if(!(i[b+28>>2]==1|i[b+4>>2]!=(c|0))){i[b+28>>2]=d}return}a:{if(Aa(a,i[b>>2],e)){if(!(i[b+20>>2]!=(c|0)?i[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}i[b+32>>2]=1;return}i[b+32>>2]=d;if(i[b+44>>2]!=4){f=a+16|0;m=f+(i[a+12>>2]<<3)|0;n=b;b:{c:{while(1){d:{if(f>>>0>=m>>>0){break d}h[b+52>>1]=0;db(f,b,c,c,1,e);if(j[b+54|0]){break d}e:{if(!j[b+53|0]){break e}if(j[b+52|0]){d=1;if(i[b+24>>2]==1){break c}l=1;k=1;if(j[a+8|0]&2){break e}break c}l=1;d=k;if(!(g[a+8|0]&1)){break c}}f=f+8|0;continue}break}d=k;a=4;if(!l){break b}}a=3}i[n+44>>2]=a;if(d&1){break a}}i[b+20>>2]=c;i[b+40>>2]=i[b+40>>2]+1;if(i[b+36>>2]!=1|i[b+24>>2]!=2){break a}g[b+54|0]=1;return}k=i[a+12>>2];f=a+16|0;Xa(f,b,c,d,e);if((k|0)<2){break a}k=f+(k<<3)|0;f=a+24|0;a=i[a+8>>2];if(!(i[b+36>>2]!=1?!(a&2):0)){while(1){if(j[b+54|0]){break a}Xa(f,b,c,d,e);f=f+8|0;if(f>>>0>>0){continue}break}break a}if(!(a&1)){while(1){if(j[b+54|0]|i[b+36>>2]==1){break a}Xa(f,b,c,d,e);f=f+8|0;if(f>>>0>>0){continue}break a}}while(1){if(j[b+54|0]|(i[b+24>>2]==1?i[b+36>>2]==1:0)){break a}Xa(f,b,c,d,e);f=f+8|0;if(f>>>0>>0){continue}break}}}function Ga(a,b,c){var d=0,e=0,f=0;if(c>>>0>=512){$(a|0,b|0,c|0)|0;return a}e=a+c|0;a:{if(!((a^b)&3)){b:{if((c|0)<1){c=a;break b}if(!(a&3)){c=a;break b}c=a;while(1){g[c|0]=j[b|0];b=b+1|0;c=c+1|0;if(c>>>0>=e>>>0){break b}if(c&3){continue}break}}d=e&-4;c:{if(d>>>0<64){break c}f=d+ -64|0;if(c>>>0>f>>>0){break c}while(1){i[c>>2]=i[b>>2];i[c+4>>2]=i[b+4>>2];i[c+8>>2]=i[b+8>>2];i[c+12>>2]=i[b+12>>2];i[c+16>>2]=i[b+16>>2];i[c+20>>2]=i[b+20>>2];i[c+24>>2]=i[b+24>>2];i[c+28>>2]=i[b+28>>2];i[c+32>>2]=i[b+32>>2];i[c+36>>2]=i[b+36>>2];i[c+40>>2]=i[b+40>>2];i[c+44>>2]=i[b+44>>2];i[c+48>>2]=i[b+48>>2];i[c+52>>2]=i[b+52>>2];i[c+56>>2]=i[b+56>>2];i[c+60>>2]=i[b+60>>2];b=b- -64|0;c=c- -64|0;if(c>>>0<=f>>>0){continue}break}}if(c>>>0>=d>>>0){break a}while(1){i[c>>2]=i[b>>2];b=b+4|0;c=c+4|0;if(c>>>0>>0){continue}break}break a}if(e>>>0<4){c=a;break a}d=e+ -4|0;if(d>>>0>>0){c=a;break a}c=a;while(1){g[c|0]=j[b|0];g[c+1|0]=j[b+1|0];g[c+2|0]=j[b+2|0];g[c+3|0]=j[b+3|0];b=b+4|0;c=c+4|0;if(c>>>0<=d>>>0){continue}break}}if(c>>>0>>0){while(1){g[c|0]=j[b|0];b=b+1|0;c=c+1|0;if((e|0)!=(c|0)){continue}break}}return a}function zb(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;a:{b:{c:{if(b>>>0>=26){if(b>>>0>=33){break c}c=i[a+20>>2];d:{if(c>>>0>=25){g=i[a+16>>2];break d}e=i[a+4>>2];h=i[a+12>>2];d=c;while(1){f=0;if(e>>>0>>0){c=e+1|0;i[a+4>>2]=c;f=j[e|0];e=c}c=d+8|0;i[a+20>>2]=c;g=i[a+16>>2]|f<>2]=g;f=d>>>0<17;d=c;if(f){continue}break}}d=c+ -25|0;i[a+20>>2]=d;c=g>>>25|0;i[a+16>>2]=c;e=b+ -25|0;f=0;e:{if(!e){break e}if(e>>>0>=26){break b}f:{while(1){if(d>>>0>=e>>>0){break f}f=0;b=i[a+4>>2];if(b>>>0>2]){i[a+4>>2]=b+1;f=j[b|0]}b=d+8|0;i[a+20>>2]=b;c=f<>2]=c;d=b;if(d>>>0<33){continue}break}break a}f=((-1<>2]=d-e;i[a+16>>2]=c>>>e;return f|g&33554431}g:{if(!b){d=i[a+20>>2];e=i[a+16>>2];c=0;break g}d=i[a+20>>2];h:{while(1){if(d>>>0>=b>>>0){break h}f=0;c=i[a+4>>2];if(c>>>0>2]){i[a+4>>2]=c+1;f=j[c|0]}c=d+8|0;i[a+20>>2]=c;i[a+16>>2]=i[a+16>>2]|f<>>0<33){continue}break}break a}e=i[a+16>>2];c=e&(-1<>2]=d-b;i[a+16>>2]=e>>>b;return c}A(90633,90648,350,90731);x()}A(90740,90648,322,90755);x()}A(90765,90648,332,90755);x()}function Va(a){var b=0,c=0,d=0,e=0,f=0;d=ha-16|0;i[d+8>>2]=0;i[d+12>>2]=0;i[d>>2]=0;i[d+4>>2]=0;f=3;c=j[a|0];b=(c&3)<<2|d;i[b>>2]=i[b>>2]+1;b=c&12|d;i[b>>2]=i[b>>2]+1;b=c>>>2&12|d;i[b>>2]=i[b>>2]+1;c=c>>>4&12|d;i[c>>2]=i[c>>2]+1;c=j[a+1|0];b=(c&3)<<2|d;i[b>>2]=i[b>>2]+1;b=c&12|d;i[b>>2]=i[b>>2]+1;b=c>>>2&12|d;i[b>>2]=i[b>>2]+1;c=c>>>4&12|d;i[c>>2]=i[c>>2]+1;c=j[a+2|0];b=(c&3)<<2|d;i[b>>2]=i[b>>2]+1;b=c&12|d;i[b>>2]=i[b>>2]+1;b=c>>>2&12|d;i[b>>2]=i[b>>2]+1;c=c>>>4&12|d;i[c>>2]=i[c>>2]+1;c=j[a+3|0];b=(c&3)<<2|d;i[b>>2]=i[b>>2]+1;b=c&12|d;i[b>>2]=i[b>>2]+1;b=c>>>2&12|d;i[b>>2]=i[b>>2]+1;c=c>>>4&12|d;i[c>>2]=i[c>>2]+1;g[a+10|0]=0;g[a+8|0]=3;g[a+9|0]=0;b=a+10|0;c=a+8|0;a:{b:{c:{d:{e:{f:{if(!i[d>>2]){if(!i[d+4>>2]){break e}g[a+10|0]=1;g[c|0]=1;f=1;e=1;break f}g[a+10|0]=1;g[c|0]=0;if(!i[d+4>>2]){break d}g[a+10|0]=2;f=0;e=2}g[a+9|0]=1}if(!i[d+8>>2]){break a}e=e+1|0;g[a+10|0]=e;b=c;if(f>>>0<3){break b}break c}e=2;if(i[d+8>>2]){break c}e=1;break a}g[b|0]=2}g[a+9|0]=2}if(i[d+12>>2]){g[a+9|0]=3;g[a+10|0]=e+1}}function fd(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,f=0,h=0;e=ha+ -64|0;ha=e;a:{if(Aa(b,300212,0)){i[c>>2]=0;f=1;break a}if(gd(a,b)){f=1;a=i[c>>2];if(!a){break a}i[c>>2]=i[a>>2];break a}b:{if(!b){break b}b=Ia(b,299992);if(!b){break a}d=i[c>>2];if(d){i[c>>2]=i[d>>2]}h=i[b+8>>2];d=i[a+8>>2];if(h&(d^-1)&7|(h^-1)&d&96){break a}f=1;if(Aa(i[a+12>>2],i[b+12>>2],0)){break a}if(Aa(i[a+12>>2],300200,0)){a=i[b+12>>2];if(!a){break a}f=!Ia(a,300044);break a}d=i[a+12>>2];if(!d){break b}f=0;d=Ia(d,299992);if(d){if(!(g[a+8|0]&1)){break a}f=ed(d,i[b+12>>2]);break a}d=i[a+12>>2];if(!d){break a}d=Ia(d,300104);if(d){if(!(g[a+8|0]&1)){break a}f=Db(d,i[b+12>>2]);break a}a=i[a+12>>2];if(!a){break a}d=Ia(a,299896);if(!d){break a}a=i[b+12>>2];if(!a){break a}a=Ia(a,299896);if(!a){break a}i[e+20>>2]=-1;i[e+16>>2]=d;i[e+12>>2]=0;i[e+8>>2]=a;ya(e+24|0,0,39);i[e+56>>2]=1;ja[i[i[a>>2]+28>>2]](a,e+8|0,i[c>>2],1);a=i[e+32>>2];if(!(!i[c>>2]|(a|0)!=1)){i[c>>2]=i[e+24>>2]}f=(a|0)==1;break a}f=0}ha=e- -64|0;return f|0}function Za(a,b,c,d){var e=0,f=0,g=0,h=0;a:{b:{c:{if(d>>>0<21){d:{if(!(898778>>>d&1)){if(b|c){break c}c=i[o(d,12)+21952>>2];d=8;b=0;while(1){e=(c|0)>(d|0);g=a>>>(e?c-d|0:0)|0;e=e?d:c;if(g>>>e|0){break b}d=d-e|0;b=g<0){continue}break}break d}if(1198383>>>d&1){break a}h=d<<3;g=i[h+22208>>2];f=j[g|0];if((f|0)!=48){e=a>>>(f+ -97&255)<<1&2}f=j[g+1|0];if((f|0)!=48){e=a>>>(f+ -97&255)&1|e}e=e<<1;f=j[g+2|0];if((f|0)!=48){e=e|a>>>(f+ -97&255)&1}e=e<<1;f=j[g+3|0];if((f|0)!=48){e=e|a>>>(f+ -97&255)&1}e=e<<1;f=j[g+4|0];if((f|0)!=48){e=e|a>>>(f+ -97&255)&1}e=e<<1;f=j[g+5|0];if((f|0)!=48){e=a>>>(f+ -97&255)&1|e}f=599186>>>d|0;d=e<<1;e=j[g+6|0];if((e|0)!=48){d=d|a>>>(e+ -97&255)&1}d=d<<1;e=j[g+7|0];if((e|0)!=48){d=a>>>(e+ -97&255)&1|d}e=i[h+22212>>2];d=d<<1;g=j[g+8|0];if((g|0)!=48){d=a>>>(g+ -97&255)&1|d}a=0-(a&1)&511;b=a&128|(a^o(e,f&1?b:c)+d)>>>2}return b}A(22376,19512,11402,22409);x()}A(22431,19512,11411,22409);x()}A(22463,19512,11422,22409);x()}A(22477,19512,11434,22409);x()}function Ub(a,b){var c=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;c=j[b|0]+1|0;c=c>>>0<3?c:3;g[a|0]=(c|0)>0?c:0;c=j[b+1|0]+1|0;c=c>>>0<3?c:3;g[a+1|0]=(c|0)>0?c:0;c=j[b+2|0]+1|0;c=c>>>0<3?c:3;g[a+2|0]=(c|0)>0?c:0;c=j[b+3|0]+1|0;c=c>>>0<3?c:3;g[a+3|0]=(c|0)>0?c:0;c=j[b+4|0]+1|0;c=c>>>0<3?c:3;g[a+4|0]=(c|0)>0?c:0;c=j[b+5|0]+1|0;c=c>>>0<3?c:3;g[a+5|0]=(c|0)>0?c:0;c=j[b+6|0]+1|0;c=c>>>0<3?c:3;g[a+6|0]=(c|0)>0?c:0;c=j[b+7|0]+1|0;c=c>>>0<3?c:3;g[a+7|0]=(c|0)>0?c:0;c=j[b+8|0]+1|0;c=c>>>0<3?c:3;g[a+8|0]=(c|0)>0?c:0;c=j[b+9|0]+1|0;c=c>>>0<3?c:3;g[a+9|0]=(c|0)>0?c:0;c=j[b+10|0]+1|0;c=c>>>0<3?c:3;g[a+10|0]=(c|0)>0?c:0;c=j[b+11|0]+1|0;c=c>>>0<3?c:3;g[a+11|0]=(c|0)>0?c:0;c=j[b+12|0]+1|0;c=c>>>0<3?c:3;g[a+12|0]=(c|0)>0?c:0;c=j[b+13|0]+1|0;c=c>>>0<3?c:3;g[a+13|0]=(c|0)>0?c:0;c=j[b+14|0]+1|0;c=c>>>0<3?c:3;g[a+14|0]=(c|0)>0?c:0;c=a;a=j[b+15|0]+1|0;a=a>>>0<3?a:3;g[c+15|0]=(a|0)>0?a:0}function dd(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0;c=ha-48|0;ha=c;i[c+16>>2]=0;i[c+8>>2]=0;i[c+12>>2]=0;e=Q(1654)|0;d=D(1660)|0;j=E(e|0,d|0)|0;B(d|0);B(e|0);f=i[b>>2];d=D(1667)|0;e=E(f|0,d|0)|0;B(d|0);h=+K(e|0,300332,c+24|0);J(i[c+24>>2]);if(h<4294967296&h>=0){d=~~h>>>0}else{d=0}if(d){Oa(c+8|0,d)}B(e|0);f=i[b>>2];d=D(1678)|0;k=E(f|0,d|0)|0;B(d|0);e=i[c+8>>2];f=i[b>>2];d=D(1690)|0;l=E(f|0,d|0)|0;B(d|0);h=+K(l|0,300308,c+24|0);J(i[c+24>>2]);F(j|0);d=c;if(h<4294967296&h>=0){f=~~h>>>0}else{f=0}i[d+40>>2]=f;i[c+32>>2]=e;i[c+24>>2]=j;e=P(k|0,3,1704,c+24|0)|0;B(l|0);B(k|0);a:{if(g[300748]&1){break a}if(!Sa()){break a}m=300744,n=O(2,1744)|0,i[m>>2]=n;Ra()}d=i[75186];F(i[b>>2]);i[c+24>>2]=i[b>>2];N(d|0,e|0,1697,c+24|0);b=a;a=i[c+8>>2];a=uc(b,a,i[c+12>>2]-a|0);B(e|0);B(j|0);b=i[c+8>>2];if(b){i[c+12>>2]=b;wa(b)}ha=c+48|0;return a|0}function Cb(a){var b=0,c=0,d=0,e=0,f=0,g=0;d=Vc(a);if((d|0)>=1){c=16;e=a+d|0;b=e+ -16|0;i[b+12>>2]=16;i[b>>2]=16;a=i[81388];a:{b:{if(!(!a|i[a+8>>2]!=(d|0))){c=i[d+ -4>>2];g=d-(c>>31^c)|0;f=i[g+ -4>>2];i[a+8>>2]=e;c=-16;a=g-(f>>31^f)|0;if(i[(a+i[a>>2]|0)+ -4>>2]>-1){break b}c=i[a+4>>2];i[c+8>>2]=i[a+8>>2];i[i[a+8>>2]+4>>2]=c;b=b-a|0;i[a>>2]=b;break a}i[d+12>>2]=16;i[d>>2]=16;i[d+8>>2]=e;i[d+4>>2]=a;i[81388]=d}a=c+d|0;b=b-a|0;i[a>>2]=b}i[((b&-4)+a|0)+ -4>>2]=b^-1;g=a;e=i[a>>2]+ -8|0;c:{if(e>>>0<=127){b=(e>>>3|0)+ -1|0;break c}f=r(e);b=((e>>>29-f^4)-(f<<2)|0)+110|0;if(e>>>0<=4095){break c}b=((e>>>30-f^2)-(f<<1)|0)+71|0;b=b>>>0<63?b:63}c=b<<4;i[g+4>>2]=c+324528;c=c+324536|0;i[a+8>>2]=i[c>>2];i[c>>2]=a;i[i[a+8>>2]+4>>2]=a;c=i[81391];a=b&31;if(32<=(b&63)>>>0){b=1<>>32-a;a=1<0}function cb(a,b,c){var d=0,e=0,f=0,g=0;e=a+4|0;d=(e+b|0)+ -1&0-b;b=i[a>>2];if(d+c>>>0<=(b+a|0)+ -4>>>0){f=i[a+4>>2];i[f+8>>2]=i[a+8>>2];i[i[a+8>>2]+4>>2]=f;if((e|0)!=(d|0)){d=d-e|0;f=i[a+ -4>>2];f=a-(f>>31^f)|0;e=d+i[f>>2]|0;i[f>>2]=e;i[(f+(e&-4)|0)+ -4>>2]=e;a=a+d|0;b=b-d|0;i[a>>2]=b}a:{if(c+24>>>0<=b>>>0){e=(a+c|0)+8|0;b=b-c|0;d=b+ -8|0;i[e>>2]=d;i[(e+(d&-4)|0)+ -4>>2]=7-b;g=e;f=i[e>>2]+ -8|0;b:{if(f>>>0<=127){d=(f>>>3|0)+ -1|0;break b}b=r(f);d=((f>>>29-b^4)-(b<<2)|0)+110|0;if(f>>>0<=4095){break b}b=((f>>>30-b^2)-(b<<1)|0)+71|0;d=b>>>0<63?b:63}b=d;d=b<<4;i[g+4>>2]=d+324528;d=d+324536|0;i[e+8>>2]=i[d>>2];i[d>>2]=e;i[i[e+8>>2]+4>>2]=e;d=i[81391];e=b&31;if(32<=(b&63)>>>0){b=1<>>32-e;g=1<>2]=b;i[((b&-4)+a|0)+ -4>>2]=b;break a}i[(a+b|0)+ -4>>2]=b}a=a+4|0}else{a=0}return a}function Wb(a,b){var c=0,d=0,e=0,f=0,h=0,i=0,k=0,l=0;g[a|0]=0;g[a+1|0]=0;g[a+2|0]=0;g[a+3|0]=0;g[a+4|0]=0;g[a+5|0]=0;g[a+6|0]=0;g[a+7|0]=0;g[a+8|0]=0;g[a+9|0]=0;g[a+10|0]=0;g[a+11|0]=0;g[a+12|0]=0;g[a+13|0]=0;g[a+14|0]=0;g[a+15|0]=0;while(1){d=f<<2;h=f>>>0<3?f:3;c=((h|0)>0?h:0)<<2;i=j[c+b|0];h=((f>>>0>1?f:1)<<2)+b|0;k=j[(c|1)+b|0];f=f+1|0;l=(f>>>0<3?f:3)<<2;e=((((i<<3)-(i+j[h+ -4|0]|0)|0)-k|0)-j[l+b|0]|0)/4<<16>>16;e=(e|0)<3?e:3;g[d+a|0]=(e|0)>0?e:0;e=d|1;c=((((k<<3)-(i+j[h+ -3|0]|0)|0)-j[(c|2)+b|0]|0)-j[(l|1)+b|0]|0)/4<<16>>16;c=(c|0)<3?c:3;g[e+a|0]=(c|0)>0?c:0;i=d|2;k=j[i+b|0];c=(k<<3)-(j[b+e|0]+j[h+ -2|0]|0)|0;e=d|3;d=j[e+b|0];c=((c-d|0)-j[(l|2)+b|0]|0)/4<<16>>16;c=(c|0)<3?c:3;g[a+i|0]=(c|0)>0?c:0;d=((((d<<3)-(k+j[h+ -1|0]|0)|0)-d|0)-j[(l|3)+b|0]|0)/4<<16>>16;d=(d|0)<3?d:3;g[a+e|0]=(d|0)>0?d:0;if((f|0)!=4){continue}break}}function mc(a,b,c){var d=0,e=0,f=0,h=0,k=0,l=0,m=0;d=ha-224|0;ha=d;k=Ba(a,d+72|0,0,1);a:{if(!k){break a}e=i[d+176>>2];if((e|0)==8){a=j[d+187|0];c=0;g[b+2|0]=0;g[b+3|0]=0;g[b+4|0]=0;g[b+5|0]=0;g[b+1|0]=a;g[b|0]=a;g[b+6|0]=0;g[b+7|0]=0;e=1;f=170;a=j[d+186|0]<<1;l=j[d+185|0]<<1;m=j[d+184|0]<<1;h=j[a+300769|0]|(j[l+301793|0]<<5|j[m+300769|0]<<11);a=j[a+300768|0]|(j[l+301792|0]<<5|j[m+300768|0]<<11);b:{if((h|0)==(a|0)){if(!a){f=85;break b}f=0;h=a+ -1|0}if(a>>>0>=h>>>0){e=a;c=h;break b}f=f|85;e=h;c=a}g[b+10|0]=c;g[b+8|0]=e;a=o(f,16843009);g[b+12|0]=a;g[b+13|0]=a>>>8;g[b+14|0]=a>>>16;g[b+15|0]=a>>>24;g[b+11|0]=c>>>8;g[b+9|0]=e>>>8;break a}a=b+8|0;Ea(e,i[d+180>>2],d+184|0,d+72|0,d);Ta(b,d|3);if(!(!j[d+188|0]|c)){sb(d+72|0,a);break a}if(j[d+189|0]){rb(d+72|0,d,a,c);break a}$a(a,d,c)}ha=d+224|0;return k}function ic(a,b){var c=0,d=0,e=0,f=0,h=0,k=0,l=0,m=0;k=j[b+3|0];f=j[b+2|0];e=j[b+1|0];b=j[b|0];i[a+12>>2]=0;i[a+4>>2]=-1;i[a+8>>2]=0;g[a|0]=-516;g[a+1|0]=16777213;g[a+2|0]=65535;g[a+3|0]=255;c=b|b<<8;d=16;b=64;while(1){h=(b>>3)+a|0;l=h;m=j[h|0];h=b&7;g[l|0]=m|c<>>h|0;b=b+h|0;d=d-h|0;if(d){continue}break}c=e|e<<8;d=16;while(1){e=(b>>3)+a|0;h=e;l=j[e|0];e=b&7;g[h|0]=l|c<>>e|0;b=b+e|0;d=d-e|0;if(d){continue}break}c=f|f<<8;d=16;while(1){f=(b>>3)+a|0;e=f;h=j[f|0];f=b&7;g[e|0]=h|c<>>f|0;b=b+f|0;d=d-f|0;if(d){continue}break}c=k|k<<8;d=16;while(1){k=(b>>3)+a|0;f=k;e=j[k|0];k=b&7;g[f|0]=e|c<>>k|0;b=b+k|0;d=d-k|0;if(d){continue}break}}function uc(a,b,c){var d=0,e=0,f=0,g=0,h=0;d=ha-32|0;ha=d;i[d+24>>2]=0;i[d+28>>2]=0;i[d+16>>2]=0;i[d+20>>2]=0;i[d+8>>2]=0;i[d+12>>2]=0;a:{if(c?!b:0){break a}i[d+24>>2]=0;i[d+28>>2]=0;i[d+16>>2]=b;i[d+12>>2]=b;i[d+8>>2]=c;i[d+20>>2]=b+c;if(!Ha(d+8|0,a+28|0)|i[a+32>>2]==i[a+28>>2]){break a}if(!Ha(d+8|0,a- -64|0)|i[a+68>>2]==i[a+64>>2]){break a}if(!Ha(d+8|0,a+100|0)|i[a+104>>2]==i[a+100>>2]){break a}if(!Ha(d+8|0,a+136|0)|i[a+140>>2]==i[a+136>>2]){break a}e=i[d+28>>2];b:{if(e>>>0>=13){f=i[d+24>>2];break b}c=i[d+12>>2];g=i[d+20>>2];b=e;while(1){f=0;if(c>>>0>>0){e=c+1|0;i[d+12>>2]=e;f=j[c|0];c=e}e=b+8|0;i[d+28>>2]=e;f=i[d+24>>2]|f<>2]=f;h=b>>>0<5;b=e;if(h){continue}break}}i[d+28>>2]=e+ -13;i[d+24>>2]=f>>>13;i[a+172>>2]=f&8191;f=1}ha=d+32|0;return f}function ab(a,b,c,d){var e=0,f=0,h=0,k=0,l=0,m=0,n=0,p=0,q=0,r=0;f=j[b+1|0];e=j[b|0];n=j[b+2|0];p=j[b+3|0];q=j[b+4|0];b=(((o(f>>>d|0,3)+(e>>>d|0)|0)+o(n>>>d|0,9)|0)+o(p>>>d|0,27)|0)+o(q>>>d|0,81)|0;if((b|0)<243){k=-1<>2];while(1){h=(e>>3)+a|0;e=e&7;g[h|0]=j[h|0]|f<>2]|0;i[c>>2]=e;f=f>>>h|0;b=b-h|0;if(b){continue}break}}f=o(d,3);b=f+6|0;if(b){f=l>>>2&3|l>>>7<>>4&1)<>>5&3)<>2];while(1){d=(e>>3)+a|0;h=d;k=j[d|0];d=e&7;g[h|0]=k|f<>2]|0;i[c>>2]=e;f=f>>>d|0;b=b-d|0;if(b){continue}break}}return}A(290908,19512,5114,290920);x()}function ya(a,b,c){var d=0,e=0,f=0,h=0;a:{if(!c){break a}d=a+c|0;g[d+ -1|0]=b;g[a|0]=b;if(c>>>0<3){break a}g[d+ -2|0]=b;g[a+1|0]=b;g[d+ -3|0]=b;g[a+2|0]=b;if(c>>>0<7){break a}g[d+ -4|0]=b;g[a+3|0]=b;if(c>>>0<9){break a}d=0-a&3;e=d+a|0;b=o(b&255,16843009);i[e>>2]=b;c=c-d&-4;d=c+e|0;i[d+ -4>>2]=b;if(c>>>0<9){break a}i[e+8>>2]=b;i[e+4>>2]=b;i[d+ -8>>2]=b;i[d+ -12>>2]=b;if(c>>>0<25){break a}i[e+24>>2]=b;i[e+20>>2]=b;i[e+16>>2]=b;i[e+12>>2]=b;i[d+ -16>>2]=b;i[d+ -20>>2]=b;i[d+ -24>>2]=b;i[d+ -28>>2]=b;h=e&4|24;c=c-h|0;if(c>>>0<32){break a}d=b;f=b;b=e+h|0;while(1){i[b+24>>2]=f;i[b+28>>2]=d;i[b+16>>2]=f;i[b+20>>2]=d;i[b+8>>2]=f;i[b+12>>2]=d;i[b>>2]=f;i[b+4>>2]=d;b=b+32|0;c=c+ -32|0;if(c>>>0>31){continue}break}}return a}function wa(a){var b=0,c=0,d=0,e=0,f=0;if(a){c=a+ -4|0;e=i[c>>2];d=e;b=c;f=i[a+ -8>>2];if((f|0)<=-1){a=c+f|0;b=i[a+5>>2];i[b+8>>2]=i[a+9>>2];i[i[a+9>>2]+4>>2]=b;d=e+(f^-1)|0;b=a+1|0}a=c+e|0;c=i[a>>2];if((c|0)!=i[(a+c|0)+ -4>>2]){e=i[a+4>>2];i[e+8>>2]=i[a+8>>2];i[i[a+8>>2]+4>>2]=e;d=c+d|0}i[b>>2]=d;i[((d&-4)+b|0)+ -4>>2]=d^-1;f=b;d=i[b>>2]+ -8|0;a:{if(d>>>0<=127){a=(d>>>3|0)+ -1|0;break a}e=r(d);a=((d>>>29-e^4)-(e<<2)|0)+110|0;if(d>>>0<=4095){break a}a=((d>>>30-e^2)-(e<<1)|0)+71|0;a=a>>>0<63?a:63}c=a<<4;i[f+4>>2]=c+324528;c=c+324536|0;i[b+8>>2]=i[c>>2];i[c>>2]=b;i[i[b+8>>2]+4>>2]=b;c=i[81391];b=a&31;if(32<=(a&63)>>>0){a=1<>>32-b;b=1<>2];g[c|0]=1;g[c+1|0]=0;g[c+2|0]=0;g[c+3|0]=0;f=a+39|0;h=j[e+21888|0]+ -1|0;e=i[(j[e+21760|0]<<2)+300704>>2];k=j[j[f+(1<>>6;e=(e<<4|r<<2|q)<<4|p<<2|o;g[c+6|0]=e>>>6;e=(e<<4|n<<2|m)<<4|l<<2|k;g[c+5|0]=e>>>6;g[c+4|0]=a|e<<2;$a(c,b,d|4)}function fc(a,b,c){var d=0,e=0,f=0,h=0,k=0,l=0;d=ha-224|0;ha=d;h=Ba(a,d+72|0,0,1);a:{if(!h){break a}a=i[d+176>>2];if((a|0)==8){a=1;f=170;c=j[d+186|0]<<1;k=j[d+185|0]<<1;l=j[d+184|0]<<1;e=j[c+300769|0]|(j[k+301793|0]<<5|j[l+300769|0]<<11);c=j[c+300768|0]|(j[k+301792|0]<<5|j[l+300768|0]<<11);b:{if((e|0)==(c|0)){if(!c){f=85;c=0;break b}f=0;e=c+ -1|0}if(c>>>0>=e>>>0){a=c;c=e;break b}f=f|85;a=e}g[b+2|0]=c;g[b|0]=a;e=o(f,16843009);g[b+4|0]=e;g[b+5|0]=e>>>8;g[b+6|0]=e>>>16;g[b+7|0]=e>>>24;g[b+3|0]=c>>>8;g[b+1|0]=a>>>8;break a}if(!(!j[d+188|0]|c)){sb(d+72|0,b);break a}Ea(a,i[d+180>>2],d+184|0,d+72|0,d);if(j[d+189|0]){rb(d+72|0,d,b,c);break a}$a(b,d,c)}ha=d+224|0;return h}function Hb(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,j=0;f=ha-16|0;ha=f;c=1;a:{b:{switch(b-a>>2){case 2:b=b+ -4|0;if(l[b>>2]>=l[a>>2]){break a}Ca(a,b);break a;case 3:Pa(a,a+4|0,b+ -4|0);break a;case 4:ib(a,a+4|0,a+8|0,b+ -4|0);break a;case 5:hb(a,a+4|0,a+8|0,a+12|0,b+ -4|0);break a;case 0:case 1:break a;default:break b}}e=a+8|0;Pa(a,a+4|0,e);d=a+12|0;c:{while(1){g=(b|0)==(d|0);if(g){break c}d:{if(l[d>>2]>2]){i[f+12>>2]=i[d>>2];h=d;while(1){e:{c=e;i[h>>2]=i[c>>2];if((a|0)==(c|0)){c=a;break e}h=c;e=c+ -4|0;if(l[f+12>>2]>2]){continue}}break}i[c>>2]=i[f+12>>2];j=j+1|0;if((j|0)==8){break d}}e=d;d=d+4|0;continue}break}c=(d+4|0)==(b|0)}c=c|g}ha=f+16|0;return c&1}function Ib(a,b){var c=0,d=0,e=0,f=0,h=0,i=0,k=0;f=ha-16|0;ha=f;c=1;a:{b:{switch(b-a|0){case 2:b=b+ -1|0;if(j[b|0]>=j[a|0]){break a}Da(a,b);break a;case 3:Qa(a,a+1|0,b+ -1|0);break a;case 4:lb(a,a+1|0,a+2|0,b+ -1|0);break a;case 5:kb(a,a+1|0,a+2|0,a+3|0,b+ -1|0);break a;case 0:case 1:break a;default:break b}}e=a+2|0;Qa(a,a+1|0,e);d=a+3|0;c:{while(1){h=(b|0)==(d|0);if(h){break c}d:{if(j[d|0]>2],f)){eb(b,c,d,e);return}l=j[b+53|0];k=i[a+12>>2];g[b+53|0]=0;m=j[b+52|0];g[b+52|0]=0;n=a+16|0;db(n,b,c,d,e,f);o=j[b+53|0];l=l|o;p=j[b+52|0];m=m|p;a:{if((k|0)<2){break a}n=n+(k<<3)|0;k=a+24|0;while(1){if(j[b+54|0]){break a}b:{if(p){if(i[b+24>>2]==1){break a}if(j[a+8|0]&2){break b}break a}if(!o){break b}if(!(g[a+8|0]&1)){break a}}h[b+52>>1]=0;db(k,b,c,d,e,f);o=j[b+53|0];l=o|l;p=j[b+52|0];m=p|m;k=k+8|0;if(k>>>0>>0){continue}break}}g[b+53|0]=(l&255)!=0;g[b+52|0]=(m&255)!=0}function pb(a,b,c,d,e,f,h,i){var k=0,l=0,m=0,n=0,p=0,q=0;f=f<<2|f>>>4;k=c<<2|c>>>4;c=f-k|0;e=e<<3|e>>>2;l=b<<3|b>>>2;b=e-l|0;h=h<<3|h>>>2;m=d<<3|d>>>2;d=h-m|0;n=(o(c,(k+(f<<1)>>>0)/3|0)+o(b,((e<<1)+l>>>0)/3|0)|0)+o(d,((h<<1)+m>>>0)/3|0)|0;p=(o(c,(f+(k<<1)>>>0)/3|0)+o(b,(e+(l<<1)>>>0)/3|0)|0)+o(d,(h+(m<<1)>>>0)/3|0)|0;q=n+p|0;h=((o(c,f)+o(b,e)|0)+o(d,h)|0)+n|0;k=((o(c,k)+o(b,l)|0)+o(d,m)|0)+p|0;f=0;while(1){e=(f<<2)+a|0;e=(o(c,j[e+1|0])+o(b,j[e|0])|0)+o(d,j[e+2|0])<<1;g[f+i|0]=j[((((e|0)<=(k|0))+((e|0)<(q|0))|0)+((e|0)<(h|0))|0)+297712|0];f=f+1|0;if((f|0)!=16){continue}break}}function Fc(a){var b=0;Ab(a+176|0);b=i[a+160>>2];if(b){i[a+164>>2]=b;wa(b)}b=i[a+148>>2];if(b){i[a+152>>2]=b;wa(b)}b=i[a+136>>2];if(b){i[a+140>>2]=b;wa(b)}b=i[a+124>>2];if(b){i[a+128>>2]=b;wa(b)}b=i[a+112>>2];if(b){i[a+116>>2]=b;wa(b)}b=i[a+100>>2];if(b){i[a+104>>2]=b;wa(b)}b=i[a+88>>2];if(b){i[a+92>>2]=b;wa(b)}b=i[a+76>>2];if(b){i[a+80>>2]=b;wa(b)}b=i[a+64>>2];if(b){i[a+68>>2]=b;wa(b)}b=i[a+52>>2];if(b){i[a+56>>2]=b;wa(b)}b=i[a+40>>2];if(b){i[a+44>>2]=b;wa(b)}b=i[a+28>>2];if(b){i[a+32>>2]=b;wa(b)}b=i[a+12>>2];if(b){i[a+16>>2]=b;wa(b)}b=i[a>>2];if(b){i[a+4>>2]=b;wa(b)}}function vc(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,j=0;e=i[a+8>>2];c=i[a+4>>2];if((e-c|0)/11>>>0>=b>>>0){if(b){d=c;b=o(b,11);c=b+ -11|0;c=ya(d,0,(c-((c>>>0)%11|0)|0)+11|0)+b|0}i[a+4>>2]=c;return}a:{d=c;c=i[a>>2];g=d-c|0;f=(g|0)/11|0;d=f+b|0;if(d>>>0<390451573){e=(e-c|0)/11|0;h=e<<1;d=e>>>0<195225786?h>>>0>>0?d:h:390451572;if(d){if(d>>>0>=390451573){break a}j=xa(o(d,11))}e=o(b,11);b=e+ -11|0;f=ya(o(f,11)+j|0,0,(b-((b>>>0)%11|0)|0)+11|0);b=f+o((g|0)/-11|0,11)|0;if((g|0)>=1){Ga(b,c,g)}i[a+8>>2]=o(d,11)+j;i[a+4>>2]=e+f;i[a>>2]=b;if(c){wa(c)}return}Ja();x()}La(90565);x()}function bd(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(Aa(a,i[b+8>>2],e)){if(!(i[b+28>>2]==1|i[b+4>>2]!=(c|0))){i[b+28>>2]=d}return}a:{if(Aa(a,i[b>>2],e)){if(!(i[b+20>>2]!=(c|0)?i[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}i[b+32>>2]=1;return}i[b+32>>2]=d;b:{if(i[b+44>>2]==4){break b}h[b+52>>1]=0;a=i[a+8>>2];ja[i[i[a>>2]+20>>2]](a,b,c,c,1,e);if(j[b+53|0]){i[b+44>>2]=3;if(!j[b+52|0]){break b}break a}i[b+44>>2]=4}i[b+20>>2]=c;i[b+40>>2]=i[b+40>>2]+1;if(i[b+36>>2]!=1|i[b+24>>2]!=2){break a}g[b+54|0]=1;return}a=i[a+8>>2];ja[i[i[a>>2]+24>>2]](a,b,c,d,e)}}function Ia(a,b){var c=0,d=0,e=0,f=0;c=ha+ -64|0;ha=c;d=i[a>>2];e=i[d+ -4>>2];f=i[d+ -8>>2];i[c+20>>2]=0;i[c+16>>2]=299848;i[c+12>>2]=a;i[c+8>>2]=b;d=0;ya(c+24|0,0,39);a=a+f|0;a:{if(Aa(e,b,0)){i[c+56>>2]=1;ja[i[i[e>>2]+20>>2]](e,c+8|0,a,a,1,0);d=i[c+32>>2]==1?a:0;break a}ja[i[i[e>>2]+24>>2]](e,c+8|0,a,1,0);b:{switch(i[c+44>>2]){case 0:d=i[c+48>>2]==1?i[c+36>>2]==1?i[c+40>>2]==1?i[c+28>>2]:0:0:0;break a;case 1:break b;default:break a}}if(i[c+32>>2]!=1){if(i[c+48>>2]|i[c+36>>2]!=1|i[c+40>>2]!=1){break a}}d=i[c+24>>2]}ha=c- -64|0;return d}function vb(a,b){var c=0,d=0,e=0,f=0,g=0,j=0,k=0;e=i[a+8>>2];c=i[a+4>>2];if(e-c>>2>>>0>=b>>>0){if(!b){i[a+4>>2]=c;return}b=(b<<2)+c|0;while(1){h[c>>1]=0;h[c+2>>1]=0;c=c+4|0;if((b|0)!=(c|0)){continue}break}i[a+4>>2]=b;return}a:{f=i[a>>2];g=c-f|0;j=g>>2;d=j+b|0;if(d>>>0<1073741824){c=0;e=e-f|0;k=e>>1;d=e>>2>>>0<536870911?k>>>0>>0?d:k:1073741823;if(d){if(d>>>0>=1073741824){break a}c=xa(d<<2)}b=b<<2;b=ya((j<<2)+c|0,0,b)+b|0;if((g|0)>=1){Ga(c,f,g)}i[a+8>>2]=(d<<2)+c;i[a+4>>2]=b;i[a>>2]=c;if(f){wa(f)}return}Ja();x()}La(90565);x()}function wc(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,j=0;e=i[a+8>>2];c=i[a+4>>2];if(e-c>>3>>>0>=b>>>0){if(!b){i[a+4>>2]=c;return}b=(b<<3)+c|0;while(1){i[c>>2]=0;i[c+4>>2]=0;c=c+8|0;if((b|0)!=(c|0)){continue}break}i[a+4>>2]=b;return}a:{f=i[a>>2];g=c-f|0;h=g>>3;d=h+b|0;if(d>>>0<536870912){c=0;e=e-f|0;j=e>>2;d=e>>3>>>0<268435455?j>>>0>>0?d:j:536870911;if(d){if(d>>>0>=536870912){break a}c=xa(d<<3)}b=b<<3;b=ya((h<<3)+c|0,0,b)+b|0;if((g|0)>=1){Ga(c,f,g)}i[a+8>>2]=(d<<3)+c;i[a+4>>2]=b;i[a>>2]=c;if(f){wa(f)}return}Ja();x()}La(90565);x()}function Ec(a,b){var c=0,d=0,e=0;a:{c=i[a>>2];d=i[a+4>>2]-c>>4;b:{if(d>>>0>>0){Dc(a,b-d|0);break b}if(d>>>0>b>>>0){i[a+4>>2]=c+(b<<4)}if(!b){break a}}while(1){d=i[a>>2]+(e<<4)|0;c=i[(e<<2)+3120>>2];g[d+15|0]=c>>>30;g[d|0]=c&3;g[d+14|0]=c>>>28&3;g[d+13|0]=c>>>26&3;g[d+12|0]=c>>>24&3;g[d+11|0]=c>>>22&3;g[d+10|0]=c>>>20&3;g[d+9|0]=c>>>18&3;g[d+8|0]=c>>>16&3;g[d+7|0]=c>>>14&3;g[d+6|0]=c>>>12&3;g[d+5|0]=c>>>10&3;g[d+4|0]=c>>>8&3;c=c&255;g[d+3|0]=c>>>6;g[d+2|0]=c>>>4&3;g[d+1|0]=c>>>2&3;e=e+1|0;if((e|0)!=(b|0)){continue}break}}}function Tb(a,b,c){if((c|0)>=4){A(90901,29004,239,90917);x()}g[a+14|0]=0;g[a+15|0]=0;c=(c<<2)+90944|0;g[a|0]=j[c+j[b|0]|0];g[a+1|0]=j[c+j[b+1|0]|0];g[a+2|0]=j[c+j[b+2|0]|0];g[a+3|0]=j[c+j[b+3|0]|0];g[a+4|0]=j[c+j[b+4|0]|0];g[a+5|0]=j[c+j[b+5|0]|0];g[a+6|0]=j[c+j[b+6|0]|0];g[a+7|0]=j[c+j[b+7|0]|0];g[a+8|0]=j[c+j[b+8|0]|0];g[a+9|0]=j[c+j[b+9|0]|0];g[a+10|0]=j[c+j[b+10|0]|0];g[a+11|0]=j[c+j[b+11|0]|0];g[a+12|0]=j[c+j[b+12|0]|0];g[a+13|0]=j[c+j[b+13|0]|0];g[a+14|0]=j[c+j[b+14|0]|0];g[a+15|0]=j[c+j[b+15|0]|0]}function gc(a,b,c,d,e){var f=0,g=0;f=ha-224|0;ha=f;g=Ba(a,f+72|0,0,1);a:{if(!g){break a}a=i[f+176>>2];if((a|0)==8){c=f+184|0;h[b>>1]=j[c+d|0]|3328;a=k[145594]|k[145595]<<16;h[b+2>>1]=a;h[b+4>>1]=a>>>16;d=k[145596];h[b+6>>1]=d;h[b+8>>1]=j[c+e|0]|3328;h[b+10>>1]=a;h[b+12>>1]=a>>>16;h[b+14>>1]=d;break a}Ea(a,i[f+180>>2],f+184|0,f+72|0,f);b:{if((d|0)==3){Ua(f+72|0,f,b);break b}ja[(c?37:38)|0](b,d+f|0,4)}if((e|0)==3){Ua(f+72|0,f,b+8|0);break a}ja[(c?37:38)|0](b+8|0,e+f|0,4)}ha=f+224|0;return g}function bb(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,j=0;e=i[a+8>>2];c=i[a+4>>2];if(e-c>>2>>>0>=b>>>0){if(b){b=b<<2;c=ya(c,0,b)+b|0}i[a+4>>2]=c;return}a:{f=i[a>>2];g=c-f|0;h=g>>2;d=h+b|0;if(d>>>0<1073741824){c=0;e=e-f|0;j=e>>1;d=e>>2>>>0<536870911?j>>>0>>0?d:j:1073741823;if(d){if(d>>>0>=1073741824){break a}c=xa(d<<2)}b=b<<2;b=ya((h<<2)+c|0,0,b)+b|0;if((g|0)>=1){Ga(c,f,g)}i[a+8>>2]=(d<<2)+c;i[a+4>>2]=b;i[a>>2]=c;if(f){wa(f)}return}Ja();x()}La(90565);x()}function Dc(a,b){var c=0,d=0,e=0,f=0,g=0,h=0,j=0;e=i[a+8>>2];c=i[a+4>>2];if(e-c>>4>>>0>=b>>>0){if(b){b=b<<4;c=ya(c,0,b)+b|0}i[a+4>>2]=c;return}a:{f=i[a>>2];g=c-f|0;h=g>>4;d=h+b|0;if(d>>>0<268435456){c=0;e=e-f|0;j=e>>3;d=e>>4>>>0<134217727?j>>>0>>0?d:j:268435455;if(d){if(d>>>0>=268435456){break a}c=xa(d<<4)}b=b<<4;b=ya((h<<4)+c|0,0,b)+b|0;if((g|0)>=1){Ga(c,f,g)}i[a+8>>2]=(d<<4)+c;i[a+4>>2]=b;i[a>>2]=c;if(f){wa(f)}return}Ja();x()}La(90565);x()}function Ya(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;e=i[a+8>>2];c=i[a+4>>2];if(e-c>>1>>>0>=b>>>0){if(b){b=b<<1;c=ya(c,0,b)+b|0}i[a+4>>2]=c;return}a:{f=i[a>>2];g=c-f|0;h=g>>1;d=h+b|0;if((d|0)>-1){c=0;e=e-f|0;d=e>>1>>>0<1073741823?e>>>0>>0?d:e:2147483647;if(d){if((d|0)<=-1){break a}c=xa(d<<1)}b=b<<1;b=ya((h<<1)+c|0,0,b)+b|0;if((g|0)>=1){Ga(c,f,g)}i[a+8>>2]=(d<<1)+c;i[a+4>>2]=b;i[a>>2]=c;if(f){wa(f)}return}Ja();x()}La(90565);x()}function Zd(a,b,c){var d=0,e=0,f=0,g=0;g=c&63;f=g;d=f&31;if(32<=f>>>0){d=-1>>>d|0}else{e=-1>>>d|0;d=(1<>>d}f=d&a;d=b&e;e=g&31;if(32<=g>>>0){d=f<>>32-e|d<>>0){d=-1<>>32-c|-1<>>0){c=0;a=d>>>b|0}else{c=d>>>b|0;a=((1<>>b}a=a|g;ia=c|f;return a} + + + +function ob(){ea(300200,297884);da(300224,297889,1,1,0);Qb();Sd();Rd();Qd();Pd();Od();Nd();Md();Ld();Kd();Jd();X(298784,297995);X(298872,298007);S(298960,4,298040);S(299052,2,298053);S(299144,4,298068);ca(1736,298083);Hd();Ob(298129);Nb(298166);Mb(298205);Lb(298236);Kb(298276);Jb(298305);Gd();Fd();Ob(298412);Nb(298444);Mb(298477);Lb(298510);Kb(298544);Jb(298577);Ed();Dd()}function ad(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;if(Aa(a,i[b+8>>2],e)){if(!(i[b+28>>2]==1|i[b+4>>2]!=(c|0))){i[b+28>>2]=d}return}a:{if(!Aa(a,i[b>>2],e)){break a}if(!(i[b+20>>2]!=(c|0)?i[b+16>>2]!=(c|0):0)){if((d|0)!=1){break a}i[b+32>>2]=1;return}i[b+20>>2]=c;i[b+32>>2]=d;i[b+40>>2]=i[b+40>>2]+1;if(!(i[b+36>>2]!=1|i[b+24>>2]!=2)){g[b+54|0]=1}i[b+44>>2]=4}}function Oa(a,b){var c=0,d=0,e=0,f=0,g=0,h=0;e=i[a+8>>2];c=i[a+4>>2];if(e-c>>>0>=b>>>0){if(b){c=ya(c,0,b)+b|0}i[a+4>>2]=c;return}f=i[a>>2];g=c-f|0;d=g+b|0;if((d|0)>-1){c=0;e=e-f|0;h=e<<1;d=e>>>0<1073741823?h>>>0>>0?d:h:2147483647;if(d){c=xa(d)}b=ya(c+g|0,0,b)+b|0;if((g|0)>=1){Ga(c,f,g)}i[a+8>>2]=c+d;i[a+4>>2]=b;i[a>>2]=c;if(f){wa(f)}return}Ja();x()}function ld(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ha+ -64|0;ha=d;e=1;a:{if(Aa(a,b,0)){break a}e=0;if(!b){break a}b=Ia(b,299896);e=0;if(!b){break a}i[d+20>>2]=-1;i[d+16>>2]=a;i[d+12>>2]=0;i[d+8>>2]=b;ya(d+24|0,0,39);i[d+56>>2]=1;ja[i[i[b>>2]+28>>2]](b,d+8|0,i[c>>2],1);a=i[d+32>>2];if((a|0)==1){i[c>>2]=i[d+24>>2]}e=(a|0)==1}a=e;ha=d- -64|0;return a|0}function ed(a,b){var c=0,d=0;a:{while(1){if(!b){return 0}b=Ia(b,299992);if(!b|i[b+8>>2]&(i[a+8>>2]^-1)){break a}if(Aa(i[a+12>>2],i[b+12>>2],0)){return 1}if(!(g[a+8|0]&1)){break a}c=i[a+12>>2];if(!c){break a}c=Ia(c,299992);if(c){b=i[b+12>>2];a=c;continue}break}a=i[a+12>>2];if(!a){break a}a=Ia(a,300104);if(!a){break a}d=Db(a,i[b+12>>2])}return d}function eb(a,b,c,d){g[a+53|0]=1;a:{if(i[a+4>>2]!=(c|0)){break a}g[a+52|0]=1;c=i[a+16>>2];if(!c){i[a+36>>2]=1;i[a+24>>2]=d;i[a+16>>2]=b;if((d|0)!=1|i[a+48>>2]!=1){break a}g[a+54|0]=1;return}if((b|0)==(c|0)){c=i[a+24>>2];if((c|0)==2){i[a+24>>2]=d;c=d}if(i[a+48>>2]!=1|(c|0)!=1){break a}g[a+54|0]=1;return}g[a+54|0]=1;i[a+36>>2]=i[a+36>>2]+1}}function Bb(a){var b=0,c=0,d=0;a:{b:{b=a;if(!(b&3)){break b}if(!j[a|0]){return 0}while(1){b=b+1|0;if(!(b&3)){break b}if(j[b|0]){continue}break}break a}while(1){c=b;b=b+4|0;d=i[c>>2];if(!((d^-1)&d+ -16843009&-2139062144)){continue}break}if(!(d&255)){return c-a|0}while(1){d=j[c+1|0];b=c+1|0;c=b;if(d){continue}break}}return b-a|0}function yd(a,b){var c=0,d=0,e=0,f=0,g=0;e=ha-16|0;ha=e;c=a+8|0;Pa(a,a+4|0,c);d=a+12|0;while(1){if((b|0)!=(d|0)){if(l[d>>2]>2]){i[e+12>>2]=i[d>>2];g=d;while(1){a:{f=c;i[g>>2]=i[c>>2];if((a|0)==(c|0)){f=a;break a}g=f;c=f+ -4|0;if(l[e+12>>2]>2]){continue}}break}i[f>>2]=i[e+12>>2]}c=d;d=c+4|0;continue}break}ha=e+16|0}function Ac(a,b){var c=0,d=0;a:{if(b>>>0<21){c=o(b,12);d=i[c+21952>>2];if((i[c+21956>>2]<<1|1)+(i[c+21960>>2]<<2)<>>0<=a>>>0){break a}if(!(898778>>>b&1)){return Za(a,0,0,b)}c=a>>>d|0;a=(-1<>>b&1){return Za(a,c,0,b)}return Za(a,0,c,b)}A(22376,19512,11459,22479);x()}A(22505,19512,11460,22479);x()}function zd(a,b){var c=0,d=0,e=0,f=0,h=0;e=ha-16|0;ha=e;c=a+2|0;Qa(a,a+1|0,c);d=a+3|0;while(1){if((b|0)!=(d|0)){if(j[d|0]>>23&255;if(e>>>0<=149){if(e>>>0<=125){return p(a*p(0))}a=(d|0)>-1?a:p(-a);b=p(p(p(a+p(8388608))+p(-8388608))-a);a:{if(!(b>p(.5)^1)){c=p(p(a+b)+p(-1));break a}a=p(a+b);c=a;if(b<=p(-.5)^1){break a}c=p(a+p(1))}a=c;a=(d|0)>-1?a:p(-a)}return a}function Oc(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0;j=ha-16|0;ha=j;k=i[a+4>>2];b=(k>>1)+b|0;a=i[a>>2];a=k&1?i[i[b>>2]+a>>2]:a;i[j>>2]=d;ja[a|0](j+8|0,b,c,j,e,f,g,h);F(i[j+8>>2]);a=i[j+8>>2];B(a|0);B(i[j>>2]);ha=j+16|0;return a|0}function hd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;if(Aa(a,i[b+8>>2],0)){fb(b,c,d);return}e=i[a+12>>2];f=a+16|0;Eb(f,b,c,d);a:{if((e|0)<2){break a}e=(e<<3)+f|0;a=a+24|0;while(1){Eb(a,b,c,d);if(j[b+54|0]){break a}a=a+8|0;if(a>>>0>>0){continue}break}}}function Sc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0;h=ha-16|0;ha=h;j=i[a+4>>2];b=(j>>1)+b|0;a=i[a>>2];a=j&1?i[i[b>>2]+a>>2]:a;i[h>>2]=d;ja[a|0](h+8|0,b,c,h,e,f,g);F(i[h+8>>2]);a=i[h+8>>2];B(a|0);B(i[h>>2]);ha=h+16|0;return a|0}function kd(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=ha-16|0;ha=g;h=i[a+4>>2];b=(h>>1)+b|0;a=i[a>>2];a=h&1?i[i[b>>2]+a>>2]:a;i[g+8>>2]=d;i[g>>2]=f;a=ja[a|0](b,c,g+8|0,e,g)|0;B(i[g>>2]);B(i[g+8>>2]);ha=g+16|0;return a|0}function Pa(a,b,c){var d=0,e=0;e=l[c>>2]>2];a:{b:{if(l[b>>2]>=l[a>>2]){d=0;if(!e){break a}Ca(b,c);d=1;if(l[b>>2]>=l[a>>2]){break a}Ca(a,b);break b}if(e){Ca(a,c);return 1}Ca(a,b);d=1;if(l[c>>2]>=l[b>>2]){break a}Ca(b,c)}d=2}return d}function jc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=xa(40);b=i[b>>2];c=i[c>>2];d=i[d>>2];i[a+16>>2]=0;i[a+8>>2]=0;i[a+12>>2]=0;i[a>>2]=0;i[a+4>>2]=0;i[a+36>>2]=d;i[a+24>>2]=c;i[a+20>>2]=b;i[a+32>>2]=c+3>>>2;i[a+28>>2]=b+3>>>2;return a|0}function Qa(a,b,c){var d=0,e=0;e=j[c|0]=j[a|0]){d=0;if(!e){break a}Da(b,c);d=1;if(j[b|0]>=j[a|0]){break a}Da(a,b);break b}if(e){Da(a,c);return 1}Da(a,b);d=1;if(j[c|0]>=j[b|0]){break a}Da(b,c)}d=2}return d}function Aa(a,b,c){if(!c){return i[a+4>>2]==i[b+4>>2]}if((a|0)==(b|0)){return 1}c=ha-16|0;i[c+8>>2]=a;i[c+12>>2]=i[i[c+8>>2]+4>>2];c=i[c+12>>2];a=ha-16|0;i[a+8>>2]=b;i[a+12>>2]=i[i[a+8>>2]+4>>2];return!md(c,i[a+12>>2])}function hb(a,b,c,d,e){var f=0;f=ib(a,b,c,d);if(l[e>>2]>2]){Ca(d,e);if(l[d>>2]>=l[c>>2]){return f+1|0}Ca(c,d);if(l[c>>2]>=l[b>>2]){return f+2|0}Ca(b,c);if(l[b>>2]>=l[a>>2]){return f+3|0}Ca(a,b);f=f+4|0}return f}function fb(a,b,c){var d=0;d=i[a+16>>2];if(!d){i[a+36>>2]=1;i[a+24>>2]=c;i[a+16>>2]=b;return}a:{if((b|0)==(d|0)){if(i[a+24>>2]!=2){break a}i[a+24>>2]=c;return}g[a+54|0]=1;i[a+24>>2]=2;i[a+36>>2]=i[a+36>>2]+1}}function kb(a,b,c,d,e){var f=0;f=lb(a,b,c,d);if(j[e|0]=j[c|0]){return f+1|0}Da(c,d);if(j[c|0]>=j[b|0]){return f+2|0}Da(b,c);if(j[b|0]>=j[a|0]){return f+3|0}Da(a,b);f=f+4|0}return f}function Gc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=ha-16|0;ha=c;d=i[a>>2];e=c+8|0;a=i[a+4>>2];b=(a>>1)+b|0;f=b;if(a&1){d=i[d+i[b>>2]>>2]}ja[d|0](e,f);F(i[c+8>>2]);a=i[c+8>>2];B(a|0);ha=c+16|0;return a|0}function Vd(a,b){var c=0,d=0,e=0,f=0;c=a>>>16|0;f=o(c,65535);d=o(c,65533);c=a&65535;e=o(c,65533);d=d+(e>>>16|0)|0;c=(d&65535)+o(c,65535)|0;ia=(o(b,-3)+f|0)-a+(d>>>16)+(c>>>16)|0;return e&65535|c<<16}function Xc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=ha-16|0;ha=d;e=i[a+4>>2];b=(e>>1)+b|0;a=i[a>>2];a=e&1?i[i[b>>2]+a>>2]:a;i[d+8>>2]=c;a=ja[a|0](b,d+8|0)|0;B(i[d+8>>2]);ha=d+16|0;return a|0}function md(a,b){var c=0,d=0;c=j[a|0];d=j[b|0];a:{if(!c|(c|0)!=(d|0)){break a}while(1){d=j[b+1|0];c=j[a+1|0];if(!c){break a}b=b+1|0;a=a+1|0;if((c|0)==(d|0)){continue}break}}return c-d|0}function Vc(a){var b=0,c=0;b=i[75182];c=a+3&-4;a=b+c|0;a:{if(a>>>0<=b>>>0?(c|0)>=1:0){break a}if(a>>>0>ce()<<16>>>0){if(!(aa(a|0)|0)){break a}}i[75182]=a;return b}i[81129]=48;return-1}function Eb(a,b,c,d){var e=0,f=0,g=0,h=0;f=i[a+4>>2];a=i[a>>2];g=a;h=b;e=0;a:{if(!c){break a}b=f>>8;e=b;if(!(f&1)){break a}e=i[b+i[c>>2]>>2]}ja[i[i[a>>2]+28>>2]](g,h,e+c|0,f&2?d:2)}function pc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=ha-16|0;ha=f;i[f+12>>2]=b;i[f+8>>2]=c;i[f+4>>2]=d;i[f>>2]=e;a=ja[a|0](f+12|0,f+8|0,f+4|0,f)|0;ha=f+16|0;return a|0}function Db(a,b){a:{if(!b){break a}b=Ia(b,300104);if(!b|i[b+8>>2]&(i[a+8>>2]^-1)){break a}if(!Aa(i[a+12>>2],i[b+12>>2],0)){break a}return Aa(i[a+16>>2],i[b+16>>2],0)}return 0}function bc(a,b){a=a|0;b=b|0;a:{b:{if((b|0)==1){a=a+ -11|0;if(a>>>0>=9){break b}return 60>>>(a&511)&1}if(a>>>0<22){break a}}return(b|0)==1|0}return 3270655>>>(a&4194303)&1}function ib(a,b,c,d){var e=0;e=Pa(a,b,c);if(l[d>>2]>2]){Ca(c,d);if(l[c>>2]>=l[b>>2]){return e+1|0}Ca(b,c);if(l[b>>2]>=l[a>>2]){return e+2|0}Ca(a,b);e=e+3|0}return e}function Wd(a,b){var c=0,d=0;if(a|b){d=b+ -1|0;c=a+ -1|0;if((c|0)!=-1){d=d+1|0}c=r(a^c)+32|0;a=r(b^d);a=(a|0)==32?c:a;b=63-a|0;ia=0-(63>>0)|0;return b}ia=0;return 64}function lb(a,b,c,d){var e=0;e=Qa(a,b,c);if(j[d|0]=j[b|0]){return e+1|0}Da(b,c);if(j[b|0]>=j[a|0]){return e+2|0}Da(a,b);e=e+3|0}return e}function Rb(a){a=a|0;var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;a=ha-16|0;i[a+8>>2]=i[b+12>>2];i[a+12>>2]=i[i[a+8>>2]+4>>2];a=Bd(i[a+12>>2]);ha=b+16|0;return a|0}function Hc(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;c=ha-16|0;ha=c;d=i[b+4>>2];b=i[b>>2];i[c+12>>2]=b;i[c+8>>2]=d-b;e=a,f=T(1900,c+8|0)|0,i[e>>2]=f;ha=c+16|0}function gd(a,b){var c=0,d=0;c=a;d=b;a:{if(j[a+8|0]&24){a=1}else{a=0;if(!b){break a}b=Ia(b,299944);if(!b){break a}a=(j[b+8|0]&24)!=0}a=Aa(c,d,a)}return a}function _c(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(Aa(a,i[b+8>>2],f)){eb(b,c,d,e);return}a=i[a+8>>2];ja[i[i[a>>2]+20>>2]](a,b,c,d,e,f)}function db(a,b,c,d,e,f){var g=0,h=0,j=0;g=i[a+4>>2];h=g>>8;a=i[a>>2];j=a;if(g&1){h=i[i[d>>2]+h>>2]}ja[i[i[a>>2]+20>>2]](j,b,c,d+h|0,g&2?e:2,f)}function Ad(){var a=0,b=0;b=xa(584);a=i[75184];if(!a){a=xa(12);i[a+8>>2]=0;i[a>>2]=0;i[a+4>>2]=0;Ec(a,i[4876]);i[75184]=a}yc(b,a);return b|0}function Xa(a,b,c,d,e){var f=0,g=0,h=0;f=i[a+4>>2];g=f>>8;a=i[a>>2];h=a;if(f&1){g=i[i[c>>2]+g>>2]}ja[i[i[a>>2]+24>>2]](h,b,c+g|0,f&2?d:2,e)}function Yc(){var a=0,b=0,c=0;while(1){b=a<<4;c=b+324528|0;i[b+324532>>2]=c;i[b+324536>>2]=c;a=a+1|0;if((a|0)!=64){continue}break}Cb(48)}function Sa(){var a=0,b=0;a=ha-16|0;ha=a;i[a+12>>2]=0;i[a+4>>2]=300748;i[a>>2]=300748;i[a+8>>2]=300749;b=vd(a);ha=a+16|0;return b}function wd(a,b){var c=0,d=0,e=0,f=0;c=Bb(b);d=xa(c+13|0);i[d+8>>2]=0;i[d+4>>2]=c;i[d>>2]=c;e=a,f=Ga(d+12|0,b,c+1|0),i[e>>2]=f}function id(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Aa(a,i[b+8>>2],0)){fb(b,c,d);return}a=i[a+8>>2];ja[i[i[a>>2]+28>>2]](a,b,c,d)}function xa(a){var b=0;a=a?a:1;a:{while(1){b=Wa(a);if(b){break a}b=i[81130];if(b){ja[b|0]();continue}break}ba();x()}return b}function yc(a,b){i[a>>2]=0;i[a+4>>2]=0;i[a+24>>2]=b;i[a+16>>2]=0;i[a+20>>2]=0;i[a+8>>2]=0;i[a+12>>2]=0;ya(a+28|0,0,556)}function Ra(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=0;i[a+4>>2]=300748;i[a>>2]=300748;i[a+8>>2]=300749;td(a);ha=a+16|0}function La(a){var b=0;b=ga(8)|0;i[b>>2]=299652;i[b>>2]=299696;wd(b+4|0,a);i[b>>2]=299744;fa(b|0,299776,39);x()}function ud(a){var b=0;a:{a=i[a+8>>2];b=j[a|0];if((b|0)!=1){if(b&2){break a}g[a|0]=2;a=1}else{a=0}return a}x()}function Od(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297946;I(300296,i[a+12>>2],4,-2147483648,2147483647);ha=a+16|0}function Md(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297963;I(300320,i[a+12>>2],4,-2147483648,2147483647);ha=a+16|0}function vd(a){var b=0,c=0;b=ha-16|0;ha=b;i[b+8>>2]=i[a+4>>2];if(!j[i[b+8>>2]]){c=ud(a)}ha=b+16|0;return c}function Ca(a,b){var c=0;c=ha-16|0;ha=c;i[c+12>>2]=i[a>>2];i[a>>2]=i[b>>2];i[b>>2]=i[c+12>>2];ha=c+16|0}function Qd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297925;I(300272,i[a+12>>2],2,-32768,32767);ha=a+16|0}function td(a){var b=0;b=ha-16|0;ha=b;i[b+8>>2]=i[a+4>>2];g[i[b+8>>2]]=1;g[i[a+8>>2]]=1;ha=b+16|0}function Da(a,b){var c=0;c=ha-16|0;ha=c;g[c+15|0]=j[a|0];g[a|0]=j[b|0];g[b|0]=j[c+15|0];ha=c+16|0}function Sd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297899;I(300260,i[a+12>>2],1,-128,127);ha=a+16|0}function Qb(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297894;I(300236,i[a+12>>2],1,-128,127);ha=a+16|0}function Zc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;if(Aa(a,i[b+8>>2],f)){eb(b,c,d,e)}}function Pd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297931;I(300284,i[a+12>>2],2,0,65535);ha=a+16|0}function Cd(a){a=a|0;var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;a=i[b+12>>2];ob();ha=b+16|0;return a|0}function Rd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297911;I(300248,i[a+12>>2],1,0,255);ha=a+16|0}function _a(a){a=a|0;if(a>>>0>=22){A(19820,19512,10859,19963);x()}return i[(a<<2)+297780>>2]}function Nd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297950;I(300308,i[a+12>>2],4,0,-1);ha=a+16|0}function Ld(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297968;I(300332,i[a+12>>2],4,0,-1);ha=a+16|0}function qd(a){var b=0;a=i[a>>2]+ -12|0;b=i[a+8>>2]+ -1|0;i[a+8>>2]=b;if((b|0)<=-1){wa(a)}}function Kd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297982;W(300344,i[a+12>>2],4);ha=a+16|0}function Jd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=297988;W(300356,i[a+12>>2],8);ha=a+16|0}function Hd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=298099;G(299200,0,i[a+12>>2]);ha=a+16|0}function Gd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=298343;G(299440,4,i[a+12>>2]);ha=a+16|0}function Fd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=298373;G(299480,5,i[a+12>>2]);ha=a+16|0}function Ed(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=298611;G(299520,6,i[a+12>>2]);ha=a+16|0}function Dd(){var a=0;a=ha-16|0;ha=a;i[a+12>>2]=298642;G(299560,7,i[a+12>>2]);ha=a+16|0}function Xd(a){var b=0,c=0;while(1){c=b;if(a){a=a-1&a;b=b+1|0;continue}break}return c}function Ob(a){var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;G(299240,0,i[b+12>>2]);ha=b+16|0}function Mb(a){var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;G(299280,2,i[b+12>>2]);ha=b+16|0}function Lb(a){var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;G(299320,3,i[b+12>>2]);ha=b+16|0}function Kb(a){var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;G(299360,4,i[b+12>>2]);ha=b+16|0}function Jb(a){var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;G(299400,5,i[b+12>>2]);ha=b+16|0}function Nb(a){var b=0;b=ha-16|0;ha=b;i[b+12>>2]=a;G(1900,1,i[b+12>>2]);ha=b+16|0}function Bd(a){var b=0,c=0;b=Bb(a)+1|0;c=Wa(b);if(!c){return 0}return Ga(c,a,b)}function jd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Aa(a,i[b+8>>2],0)){fb(b,c,d)}}function Jc(a){a=a|0;var b=0;if(a){b=i[a>>2];if(b){i[a+4>>2]=b;wa(b)}wa(a)}}function Yd(a){var b=0;b=a&31;a=0-a&31;return(-1>>>b&-2)<>>a}function Ic(a,b,c){a=a|0;b=b|0;c=c|0;return ja[a|0](b,c)|0}function gb(a){a=a|0;i[a>>2]=299696;qd(a+4|0);return a|0}function Fb(a,b,c){a=a|0;b=b|0;c=c|0;return Aa(a,b,0)|0}function Zb(a,b,c){a=a|0;b=b|0;c=c|0;i[i[a>>2]+b>>2]=c}function cc(a,b){a=a|0;b=b|0;return i[i[a>>2]+b>>2]}function xd(a,b){a=a|0;b=b|0;return ja[a|0](b)|0}function Pb(){Yc();Ud();ja[40](324512)|0}function Lc(){return ya(xa(408),0,408)|0}function nb(a){a=a|0;return ja[a|0]()|0}function Id(a){a=a|0;if(a){Fc(a);wa(a)}}function od(a){a=a|0;return i[a+4>>2]}function Mc(a){a=a|0;if(a){wa(Ab(a))}}function Wc(a){a=a|0;return Wa(a)|0}function sd(a){a=a|0;return 299629}function wb(a){a=a|0;if(a){wa(a)}}function zc(a){a=a|0;return 2084}function nd(a){a=a|0;gb(a);wa(a)}function Td(a){a=a|0;return 2388}function Rc(a){a=a|0;return 2748}function Nc(a){a=a|0;return 2944}function Kc(a){a=a|0;return 1832}function ub(a){a=a|0;return a|0}function pd(a){a=a|0;wa(gb(a))}function Tc(a){a=a|0;ja[a|0]()}function Qc(){return xa(1)|0}function Ja(){La(299568);x()}function Ka(a){a=a|0;wa(a)}function Gb(a){a=a|0} +// EMSCRIPTEN_END_FUNCS +var ja=_d([null,Tc,Cc,Ic,bc,zc,wb,pc,jc,cc,Zb,Td,Id,nb,Ad,xd,_a,rd,kd,dd,Xc,Uc,Sc,Rc,wb,nb,Qc,Pc,Oc,Nc,Mc,nb,Lc,Kc,Jc,Hc,Gc,qc,oc,gb,Cd,ub,Ka,sd,pd,od,nd,ub,Ka,Gb,Gb,Fb,Ka,Fb,Ka,ld,Zc,ad,jd,Ka,_c,bd,id,Ka,$c,cd,hd,Ka,fd]);function ce(){return f.byteLength/65536|0}function de(ne){ne=ne|0;var ka=ce()|0;var la=ka+ne|0;if(ka=0;--qa){pa[48+qa]=52+qa;pa[65+qa]=qa;pa[97+qa]=26+qa}pa[43]=62;pa[47]=63;function ee(oe,pe,qe){var ra,sa,qa=0,ta=pe,ua=qe.length,va=pe+(ua*3>>2)-(qe[ua-2]=="=")-(qe[ua-1]=="=");for(;qa>4;if(ta>2;if(ta=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}if(!Math.imul||Math.imul(4294967295,5)!==-5)Math.imul=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};if(!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(x){froundBuffer[0]=x;return froundBuffer[0]}}if(!Math.clz32)Math.clz32=function(x){var n=32;var y=x>>16;if(y){n-=16;x=y}y=x>>8;if(y){n-=8;x=y}y=x>>4;if(y){n-=4;x=y}y=x>>2;if(y){n-=2;x=y}y=x>>1;if(y)return n-2;return n-x};if(!Math.trunc)Math.trunc=function(x){return x<0?Math.ceil(x):Math.floor(x)};var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="msc_basis_transcoder.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(wasmBinaryFile);if(binary){return binary}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["K"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function dynCallLegacy(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}return Module["dynCall_"+sig].call(null,ptr)}function dynCall(sig,ptr,args){if(sig.indexOf("j")!=-1){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16};function ___cxa_allocate_exception(size){return _malloc(size+ExceptionInfoAttrs.SIZE)+ExceptionInfoAttrs.SIZE}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-ExceptionInfoAttrs.SIZE;this.set_type=function(type){HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]=type};this.get_type=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=prev-1;return prev===1}}var exceptionLast=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function getDynCaller(sig,ptr){assert(sig.indexOf("j")>=0,"getDynCaller should only be called with i64 sigs");var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){abort()}var _emscripten_memcpy_big=Uint8Array.prototype.copyWithin?function(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}:function(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest)};function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();var ASSERTIONS=false;function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); + + + return MSC_TRANSCODER.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = MSC_TRANSCODER; + else if (typeof define === 'function' && define['amd']) + define([], function() { return MSC_TRANSCODER; }); + else if (typeof exports === 'object') + exports["MSC_TRANSCODER"] = MSC_TRANSCODER; + \ No newline at end of file diff --git a/Source/ThirdParty/Workers/msc_basis_transcoder_wrapper.js b/Source/ThirdParty/Workers/msc_basis_transcoder_wrapper.js new file mode 100644 index 00000000000..873e498347e --- /dev/null +++ b/Source/ThirdParty/Workers/msc_basis_transcoder_wrapper.js @@ -0,0 +1,22 @@ + +var MSC_TRANSCODER = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(MSC_TRANSCODER) { + MSC_TRANSCODER = MSC_TRANSCODER || {}; + +var Module=typeof MSC_TRANSCODER!=="undefined"?MSC_TRANSCODER:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="msc_basis_transcoder.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["K"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function dynCallLegacy(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}return Module["dynCall_"+sig].call(null,ptr)}function dynCall(sig,ptr,args){if(sig.indexOf("j")!=-1){return dynCallLegacy(sig,ptr,args)}return wasmTable.get(ptr).apply(null,args)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16};function ___cxa_allocate_exception(size){return _malloc(size+ExceptionInfoAttrs.SIZE)+ExceptionInfoAttrs.SIZE}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-ExceptionInfoAttrs.SIZE;this.set_type=function(type){HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]=type};this.get_type=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=prev-1;return prev===1}}var exceptionLast=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}function ClassHandle_isAliasOf(other){if(!(this instanceof ClassHandle)){return false}if(!(other instanceof ClassHandle)){return false}var leftClass=this.$$.ptrType.registeredClass;var left=this.$$.ptr;var rightClass=other.$$.ptrType.registeredClass;var right=other.$$.ptr;while(leftClass.baseClass){left=leftClass.upcast(left);leftClass=leftClass.baseClass}while(rightClass.baseClass){right=rightClass.upcast(right);rightClass=rightClass.baseClass}return leftClass===rightClass&&left===right}function shallowCopyInternalPointer(o){return{count:o.count,deleteScheduled:o.deleteScheduled,preservePointerOnDelete:o.preservePointerOnDelete,ptr:o.ptr,ptrType:o.ptrType,smartPtr:o.smartPtr,smartPtrType:o.smartPtrType}}function throwInstanceAlreadyDeleted(obj){function getInstanceTypeName(handle){return handle.$$.ptrType.registeredClass.name}throwBindingError(getInstanceTypeName(obj)+" instance already deleted")}var finalizationGroup=false;function detachFinalizer(handle){}function runDestructor($$){if($$.smartPtr){$$.smartPtrType.rawDestructor($$.smartPtr)}else{$$.ptrType.registeredClass.rawDestructor($$.ptr)}}function releaseClassHandle($$){$$.count.value-=1;var toDelete=0===$$.count.value;if(toDelete){runDestructor($$)}}function attachFinalizer(handle){if("undefined"===typeof FinalizationGroup){attachFinalizer=function(handle){return handle};return handle}finalizationGroup=new FinalizationGroup(function(iter){for(var result=iter.next();!result.done;result=iter.next()){var $$=result.value;if(!$$.ptr){console.warn("object already deleted: "+$$.ptr)}else{releaseClassHandle($$)}}});attachFinalizer=function(handle){finalizationGroup.register(handle,handle.$$,handle.$$);return handle};detachFinalizer=function(handle){finalizationGroup.unregister(handle.$$)};return attachFinalizer(handle)}function ClassHandle_clone(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.preservePointerOnDelete){this.$$.count.value+=1;return this}else{var clone=attachFinalizer(Object.create(Object.getPrototypeOf(this),{$$:{value:shallowCopyInternalPointer(this.$$)}}));clone.$$.count.value+=1;clone.$$.deleteScheduled=false;return clone}}function ClassHandle_delete(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}detachFinalizer(this);releaseClassHandle(this.$$);if(!this.$$.preservePointerOnDelete){this.$$.smartPtr=undefined;this.$$.ptr=undefined}}function ClassHandle_isDeleted(){return!this.$$.ptr}var delayFunction=undefined;var deletionQueue=[];function flushPendingDeletes(){while(deletionQueue.length){var obj=deletionQueue.pop();obj.$$.deleteScheduled=false;obj["delete"]()}}function ClassHandle_deleteLater(){if(!this.$$.ptr){throwInstanceAlreadyDeleted(this)}if(this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete){throwBindingError("Object already scheduled for deletion")}deletionQueue.push(this);if(deletionQueue.length===1&&delayFunction){delayFunction(flushPendingDeletes)}this.$$.deleteScheduled=true;return this}function init_ClassHandle(){ClassHandle.prototype["isAliasOf"]=ClassHandle_isAliasOf;ClassHandle.prototype["clone"]=ClassHandle_clone;ClassHandle.prototype["delete"]=ClassHandle_delete;ClassHandle.prototype["isDeleted"]=ClassHandle_isDeleted;ClassHandle.prototype["deleteLater"]=ClassHandle_deleteLater}function ClassHandle(){}var registeredPointers={};function ensureOverloadTable(proto,methodName,humanName){if(undefined===proto[methodName].overloadTable){var prevFunc=proto[methodName];proto[methodName]=function(){if(!proto[methodName].overloadTable.hasOwnProperty(arguments.length)){throwBindingError("Function '"+humanName+"' called with an invalid number of arguments ("+arguments.length+") - expects one of ("+proto[methodName].overloadTable+")!")}return proto[methodName].overloadTable[arguments.length].apply(this,arguments)};proto[methodName].overloadTable=[];proto[methodName].overloadTable[prevFunc.argCount]=prevFunc}}function exposePublicSymbol(name,value,numArguments){if(Module.hasOwnProperty(name)){if(undefined===numArguments||undefined!==Module[name].overloadTable&&undefined!==Module[name].overloadTable[numArguments]){throwBindingError("Cannot register public name '"+name+"' twice")}ensureOverloadTable(Module,name,name);if(Module.hasOwnProperty(numArguments)){throwBindingError("Cannot register multiple overloads of a function with the same number of arguments ("+numArguments+")!")}Module[name].overloadTable[numArguments]=value}else{Module[name]=value;if(undefined!==numArguments){Module[name].numArguments=numArguments}}}function RegisteredClass(name,constructor,instancePrototype,rawDestructor,baseClass,getActualType,upcast,downcast){this.name=name;this.constructor=constructor;this.instancePrototype=instancePrototype;this.rawDestructor=rawDestructor;this.baseClass=baseClass;this.getActualType=getActualType;this.upcast=upcast;this.downcast=downcast;this.pureVirtualFunctions=[]}function upcastPointer(ptr,ptrClass,desiredClass){while(ptrClass!==desiredClass){if(!ptrClass.upcast){throwBindingError("Expected null or instance of "+desiredClass.name+", got an instance of "+ptrClass.name)}ptr=ptrClass.upcast(ptr);ptrClass=ptrClass.baseClass}return ptr}function constNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function genericPointerToWireType(destructors,handle){var ptr;if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}if(this.isSmartPointer){ptr=this.rawConstructor();if(destructors!==null){destructors.push(this.rawDestructor,ptr)}return ptr}else{return 0}}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(!this.isConst&&handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);if(this.isSmartPointer){if(undefined===handle.$$.smartPtr){throwBindingError("Passing raw pointer to smart pointer is illegal")}switch(this.sharingPolicy){case 0:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{throwBindingError("Cannot convert argument of type "+(handle.$$.smartPtrType?handle.$$.smartPtrType.name:handle.$$.ptrType.name)+" to parameter type "+this.name)}break;case 1:ptr=handle.$$.smartPtr;break;case 2:if(handle.$$.smartPtrType===this){ptr=handle.$$.smartPtr}else{var clonedHandle=handle["clone"]();ptr=this.rawShare(ptr,__emval_register(function(){clonedHandle["delete"]()}));if(destructors!==null){destructors.push(this.rawDestructor,ptr)}}break;default:throwBindingError("Unsupporting sharing policy")}}return ptr}function nonConstNoSmartPtrRawPointerToWireType(destructors,handle){if(handle===null){if(this.isReference){throwBindingError("null is not a valid "+this.name)}return 0}if(!handle.$$){throwBindingError('Cannot pass "'+_embind_repr(handle)+'" as a '+this.name)}if(!handle.$$.ptr){throwBindingError("Cannot pass deleted object as a pointer of type "+this.name)}if(handle.$$.ptrType.isConst){throwBindingError("Cannot convert argument of type "+handle.$$.ptrType.name+" to parameter type "+this.name)}var handleClass=handle.$$.ptrType.registeredClass;var ptr=upcastPointer(handle.$$.ptr,handleClass,this.registeredClass);return ptr}function simpleReadValueFromPointer(pointer){return this["fromWireType"](HEAPU32[pointer>>2])}function RegisteredPointer_getPointee(ptr){if(this.rawGetPointee){ptr=this.rawGetPointee(ptr)}return ptr}function RegisteredPointer_destructor(ptr){if(this.rawDestructor){this.rawDestructor(ptr)}}function RegisteredPointer_deleteObject(handle){if(handle!==null){handle["delete"]()}}function downcastPointer(ptr,ptrClass,desiredClass){if(ptrClass===desiredClass){return ptr}if(undefined===desiredClass.baseClass){return null}var rv=downcastPointer(ptr,ptrClass,desiredClass.baseClass);if(rv===null){return null}return desiredClass.downcast(rv)}function getInheritedInstanceCount(){return Object.keys(registeredInstances).length}function getLiveInheritedInstances(){var rv=[];for(var k in registeredInstances){if(registeredInstances.hasOwnProperty(k)){rv.push(registeredInstances[k])}}return rv}function setDelayFunction(fn){delayFunction=fn;if(deletionQueue.length&&delayFunction){delayFunction(flushPendingDeletes)}}function init_embind(){Module["getInheritedInstanceCount"]=getInheritedInstanceCount;Module["getLiveInheritedInstances"]=getLiveInheritedInstances;Module["flushPendingDeletes"]=flushPendingDeletes;Module["setDelayFunction"]=setDelayFunction}var registeredInstances={};function getBasestPointer(class_,ptr){if(ptr===undefined){throwBindingError("ptr should not be undefined")}while(class_.baseClass){ptr=class_.upcast(ptr);class_=class_.baseClass}return ptr}function getInheritedInstance(class_,ptr){ptr=getBasestPointer(class_,ptr);return registeredInstances[ptr]}function makeClassHandle(prototype,record){if(!record.ptrType||!record.ptr){throwInternalError("makeClassHandle requires ptr and ptrType")}var hasSmartPtrType=!!record.smartPtrType;var hasSmartPtr=!!record.smartPtr;if(hasSmartPtrType!==hasSmartPtr){throwInternalError("Both smartPtrType and smartPtr must be specified")}record.count={value:1};return attachFinalizer(Object.create(prototype,{$$:{value:record}}))}function RegisteredPointer_fromWireType(ptr){var rawPointer=this.getPointee(ptr);if(!rawPointer){this.destructor(ptr);return null}var registeredInstance=getInheritedInstance(this.registeredClass,rawPointer);if(undefined!==registeredInstance){if(0===registeredInstance.$$.count.value){registeredInstance.$$.ptr=rawPointer;registeredInstance.$$.smartPtr=ptr;return registeredInstance["clone"]()}else{var rv=registeredInstance["clone"]();this.destructor(ptr);return rv}}function makeDefaultHandle(){if(this.isSmartPointer){return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:rawPointer,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(this.registeredClass.instancePrototype,{ptrType:this,ptr:ptr})}}var actualType=this.registeredClass.getActualType(rawPointer);var registeredPointerRecord=registeredPointers[actualType];if(!registeredPointerRecord){return makeDefaultHandle.call(this)}var toType;if(this.isConst){toType=registeredPointerRecord.constPointerType}else{toType=registeredPointerRecord.pointerType}var dp=downcastPointer(rawPointer,this.registeredClass,toType.registeredClass);if(dp===null){return makeDefaultHandle.call(this)}if(this.isSmartPointer){return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp,smartPtrType:this,smartPtr:ptr})}else{return makeClassHandle(toType.registeredClass.instancePrototype,{ptrType:toType,ptr:dp})}}function init_RegisteredPointer(){RegisteredPointer.prototype.getPointee=RegisteredPointer_getPointee;RegisteredPointer.prototype.destructor=RegisteredPointer_destructor;RegisteredPointer.prototype["argPackAdvance"]=8;RegisteredPointer.prototype["readValueFromPointer"]=simpleReadValueFromPointer;RegisteredPointer.prototype["deleteObject"]=RegisteredPointer_deleteObject;RegisteredPointer.prototype["fromWireType"]=RegisteredPointer_fromWireType}function RegisteredPointer(name,registeredClass,isReference,isConst,isSmartPointer,pointeeType,sharingPolicy,rawGetPointee,rawConstructor,rawShare,rawDestructor){this.name=name;this.registeredClass=registeredClass;this.isReference=isReference;this.isConst=isConst;this.isSmartPointer=isSmartPointer;this.pointeeType=pointeeType;this.sharingPolicy=sharingPolicy;this.rawGetPointee=rawGetPointee;this.rawConstructor=rawConstructor;this.rawShare=rawShare;this.rawDestructor=rawDestructor;if(!isSmartPointer&®isteredClass.baseClass===undefined){if(isConst){this["toWireType"]=constNoSmartPtrRawPointerToWireType;this.destructorFunction=null}else{this["toWireType"]=nonConstNoSmartPtrRawPointerToWireType;this.destructorFunction=null}}else{this["toWireType"]=genericPointerToWireType}}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function getDynCaller(sig,ptr){assert(sig.indexOf("j")>=0,"getDynCaller should only be called with i64 sigs");var argCache=[];return function(){argCache.length=arguments.length;for(var i=0;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function __embind_register_class_class_function(rawClassType,methodName,argCount,rawArgTypesAddr,invokerSignature,rawInvoker,fn){var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);methodName=readLatin1String(methodName);rawInvoker=embind__requireFunction(invokerSignature,rawInvoker);whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName=classType.name+"."+methodName;function unboundTypesHandler(){throwUnboundTypeError("Cannot call "+humanName+" due to unbound types",rawArgTypes)}var proto=classType.registeredClass.constructor;if(undefined===proto[methodName]){unboundTypesHandler.argCount=argCount-1;proto[methodName]=unboundTypesHandler}else{ensureOverloadTable(proto,methodName,humanName);proto[methodName].overloadTable[argCount-1]=unboundTypesHandler}whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));var func=craftInvokerFunction(humanName,invokerArgsArray,null,rawInvoker,fn);if(undefined===proto[methodName].overloadTable){func.argCount=argCount-1;proto[methodName]=func}else{proto[methodName].overloadTable[argCount-1]=func}return[]});return[]})}function __embind_register_class_constructor(rawClassType,argCount,rawArgTypesAddr,invokerSignature,invoker,rawConstructor){assert(argCount>0);var rawArgTypes=heap32VectorToArray(argCount,rawArgTypesAddr);invoker=embind__requireFunction(invokerSignature,invoker);var args=[rawConstructor];var destructors=[];whenDependentTypesAreResolved([],[rawClassType],function(classType){classType=classType[0];var humanName="constructor "+classType.name;if(undefined===classType.registeredClass.constructor_body){classType.registeredClass.constructor_body=[]}if(undefined!==classType.registeredClass.constructor_body[argCount-1]){throw new BindingError("Cannot register multiple constructors with identical number of parameters ("+(argCount-1)+") for class '"+classType.name+"'! Overload resolution is currently only performed using the parameter count, not actual type info!")}classType.registeredClass.constructor_body[argCount-1]=function unboundTypeHandler(){throwUnboundTypeError("Cannot construct "+classType.name+" due to unbound types",rawArgTypes)};whenDependentTypesAreResolved([],rawArgTypes,function(argTypes){classType.registeredClass.constructor_body[argCount-1]=function constructor_body(){if(arguments.length!==argCount-1){throwBindingError(humanName+" called with "+arguments.length+" arguments, expected "+(argCount-1))}destructors.length=0;args.length=argCount;for(var i=1;i4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>1])};case 2:return function(pointer){var heap=signed?HEAP32:HEAPU32;return this["fromWireType"](heap[pointer>>2])};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_enum(rawType,name,size,isSigned){var shift=getShiftFromSize(size);name=readLatin1String(name);function ctor(){}ctor.values={};registerType(rawType,{name:name,constructor:ctor,"fromWireType":function(c){return this.constructor.values[c]},"toWireType":function(destructors,c){return c.value},"argPackAdvance":8,"readValueFromPointer":enumReadValueFromPointer(name,shift,isSigned),destructorFunction:null});exposePublicSymbol(name,ctor)}function requireRegisteredType(rawType,humanName){var impl=registeredTypes[rawType];if(undefined===impl){throwBindingError(humanName+" has unknown type "+getTypeName(rawType))}return impl}function __embind_register_enum_value(rawEnumType,name,enumValue){var enumType=requireRegisteredType(rawEnumType,"enum");name=readLatin1String(name);var Enum=enumType.constructor;var Value=Object.create(enumType.constructor.prototype,{value:{value:enumValue},constructor:{value:createNamedFunction(enumType.name+"_"+name,function(){})}});Enum.values[enumValue]=Value;Enum[name]=Value}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function __embind_register_function(name,argCount,rawArgTypesAddr,signature,rawInvoker,fn){var argTypes=heap32VectorToArray(argCount,rawArgTypesAddr);name=readLatin1String(name);rawInvoker=embind__requireFunction(signature,rawInvoker);exposePublicSymbol(name,function(){throwUnboundTypeError("Cannot call "+name+" due to unbound types",argTypes)},argCount-1);whenDependentTypesAreResolved([],argTypes,function(argTypes){var invokerArgsArray=[argTypes[0],null].concat(argTypes.slice(1));replacePublicSymbol(name,craftInvokerFunction(name,invokerArgsArray,null,rawInvoker,fn),argCount-1);return[]})}function integerReadValueFromPointer(name,shift,signed){switch(shift){case 0:return signed?function readS8FromPointer(pointer){return HEAP8[pointer]}:function readU8FromPointer(pointer){return HEAPU8[pointer]};case 1:return signed?function readS16FromPointer(pointer){return HEAP16[pointer>>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(i==length||HEAPU8[currentBytePtr]==0){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(i==length||HEAP[currentBytePtr>>shift]==0){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function requireHandle(handle){if(!handle){throwBindingError("Cannot use deleted val. handle = "+handle)}return emval_handle_array[handle].value}function __emval_as(handle,returnType,destructorsRef){handle=requireHandle(handle);returnType=requireRegisteredType(returnType,"emval::as");var destructors=[];var rd=__emval_register(destructors);HEAP32[destructorsRef>>2]=rd;return returnType["toWireType"](destructors,handle)}var emval_symbols={};function getStringOrSymbol(address){var symbol=emval_symbols[address];if(symbol===undefined){return readLatin1String(address)}else{return symbol}}var emval_methodCallers=[];function __emval_call_void_method(caller,handle,methodName,args){caller=emval_methodCallers[caller];handle=requireHandle(handle);methodName=getStringOrSymbol(methodName);caller(handle,methodName,null,args)}function __emval_addMethodCaller(caller){var id=emval_methodCallers.length;emval_methodCallers.push(caller);return id}function __emval_lookupTypes(argCount,argTypes){var a=new Array(argCount);for(var i=0;i>2)+i],"parameter "+i)}return a}function __emval_get_method_caller(argCount,argTypes){var types=__emval_lookupTypes(argCount,argTypes);var retType=types[0];var signatureName=retType.name+"_$"+types.slice(1).map(function(t){return t.name}).join("_")+"$";var params=["retType"];var args=[retType];var argsList="";for(var i=0;i4){emval_handle_array[handle].refcount+=1}}function craftEmvalAllocator(argCount){var argsList="";for(var i=0;i>> 2) + "+i+'], "parameter '+i+'");\n'+"var arg"+i+" = argType"+i+".readValueFromPointer(args);\n"+"args += argType"+i+"['argPackAdvance'];\n"}functionBody+="var obj = new constructor("+argsList+");\n"+"return __emval_register(obj);\n"+"}\n";return new Function("requireRegisteredType","Module","__emval_register",functionBody)(requireRegisteredType,Module,__emval_register)}var emval_newers={};function __emval_new(handle,argCount,argTypes,args){handle=requireHandle(handle);var newer=emval_newers[argCount];if(!newer){newer=craftEmvalAllocator(argCount);emval_newers[argCount]=newer}return newer(handle,argTypes,args)}function __emval_new_cstring(v){return __emval_register(getStringOrSymbol(v))}function __emval_new_object(){return __emval_register({})}function __emval_run_destructors(handle){var destructors=emval_handle_array[handle].value;runDestructors(destructors);__emval_decref(handle)}function __emval_set_property(handle,key,value){handle=requireHandle(handle);key=requireHandle(key);value=requireHandle(value);handle[key]=value}function __emval_take_value(type,argv){type=requireRegisteredType(type,"_emval_take_value");var v=type["readValueFromPointer"](argv);return __emval_register(v)}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_ClassHandle();init_RegisteredPointer();init_embind();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");init_emval();__ATINIT__.push({func:function(){___wasm_call_ctors()}});var asmLibraryArg={"b":___assert_fail,"J":___cxa_allocate_exception,"I":___cxa_throw,"G":__embind_register_bool,"n":__embind_register_class,"w":__embind_register_class_class_function,"s":__embind_register_class_constructor,"m":__embind_register_class_function,"i":__embind_register_class_property,"F":__embind_register_emval,"v":__embind_register_enum,"d":__embind_register_enum_value,"x":__embind_register_float,"A":__embind_register_function,"j":__embind_register_integer,"h":__embind_register_memory_view,"y":__embind_register_std_string,"t":__embind_register_std_wstring,"H":__embind_register_void,"l":__emval_as,"o":__emval_call_void_method,"c":__emval_decref,"p":__emval_get_method_caller,"r":__emval_get_module_property,"f":__emval_get_property,"g":__emval_incref,"q":__emval_new,"e":__emval_new_cstring,"B":__emval_new_object,"k":__emval_run_destructors,"z":__emval_set_property,"u":__emval_take_value,"E":_abort,"C":_emscripten_memcpy_big,"D":_emscripten_resize_heap,"a":wasmMemory};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["L"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["M"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["N"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["O"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["P"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); + + + return MSC_TRANSCODER.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = MSC_TRANSCODER; + else if (typeof define === 'function' && define['amd']) + define([], function() { return MSC_TRANSCODER; }); + else if (typeof exports === 'object') + exports["MSC_TRANSCODER"] = MSC_TRANSCODER; + \ No newline at end of file diff --git a/Source/ThirdParty/crunch.js b/Source/ThirdParty/crunch.js deleted file mode 100644 index 37b89fefef4..00000000000 --- a/Source/ThirdParty/crunch.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @licence - * crunch/crnlib uses the ZLIB license: - * http://opensource.org/licenses/Zlib - * - * Copyright (c) 2010-2016 Richard Geldreich, Jr. and Binomial LLC - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * - * 3. This notice may not be removed or altered from any source distribution. - */ - -// The C++ code was compiled to Javascript with Emcripten. -// For instructions, see: https://github.com/BinomialLLC/crunch - -var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;if(Module["ENVIRONMENT"]){if(Module["ENVIRONMENT"]==="WEB"){ENVIRONMENT_IS_WEB=true}else if(Module["ENVIRONMENT"]==="WORKER"){ENVIRONMENT_IS_WORKER=true}else if(Module["ENVIRONMENT"]==="NODE"){ENVIRONMENT_IS_NODE=true}else if(Module["ENVIRONMENT"]==="SHELL"){ENVIRONMENT_IS_SHELL=true}else{throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.")}}else{ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER}if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=console.log;if(!Module["printErr"])Module["printErr"]=console.warn;var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};Module["load"]=function load(f){globalEval(read(f))};if(!Module["thisProgram"]){if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));Module["inspect"]=(function(){return"[Emscripten Module object]"})}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function shell_read(){throw"no read() available"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof quit==="function"){Module["quit"]=(function(status,toThrow){quit(status)})}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){Module["readBinary"]=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}Module["readAsync"]=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response)}else{onerror()}};xhr.onerror=onerror;xhr.send(null)};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function shell_print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function shell_printErr(x){console.warn(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WORKER){Module["load"]=importScripts}if(typeof Module["setWindowTitle"]==="undefined"){Module["setWindowTitle"]=(function(title){document.title=title})}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}if(!Module["quit"]){Module["quit"]=(function(status,toThrow){throw toThrow})}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;var Runtime={setTempRet0:(function(value){tempRet0=value;return value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,prepVararg:(function(ptr,type){if(type==="double"||type==="i64"){if(ptr&7){assert((ptr&7)===4);ptr+=4}}else{assert((ptr&3)===0)}return ptr}),getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){return Module["dynCall_"+sig].apply(null,[ptr].concat(args))}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i>2];var end=(ret+size+15|0)&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var ABORT=0;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=Runtime.stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args,opts){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[typeof _malloc==="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];hasUtf|=t;if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(hasUtf<128){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return Module["UTF8ToString"](ptr)}Module["Pointer_stringify"]=Pointer_stringify;function AsciiToString(ptr){var str="";while(1){var ch=HEAP8[ptr++>>0];if(!ch)return str;str+=String.fromCharCode(ch)}}Module["AsciiToString"]=AsciiToString;function stringToAscii(str,outPtr){return writeAsciiToMemory(str,outPtr,false)}Module["stringToAscii"]=stringToAscii;var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}Module["UTF8ArrayToString"]=UTF8ArrayToString;function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}Module["UTF8ToString"]=UTF8ToString;function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}Module["stringToUTF8Array"]=stringToUTF8Array;function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}Module["stringToUTF8"]=stringToUTF8;function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}Module["lengthBytesUTF8"]=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){var __cxa_demangle_func=Module["___cxa_demangle"]||Module["__cxa_demangle"];if(__cxa_demangle_func){try{var s=func.substr(1);var len=lengthBytesUTF8(s)+1;var buf=_malloc(len);stringToUTF8(s,buf,len);var status=_malloc(4);var ret=__cxa_demangle_func(buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}return func}Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}Module["stackTrace"]=stackTrace;var WASM_PAGE_SIZE=65536;var ASMJS_PAGE_SIZE=16777216;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed;var STACK_BASE,STACKTOP,STACK_MAX;var DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0;staticSealed=false;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}if(!Module["reallocBuffer"])Module["reallocBuffer"]=(function(size){var ret;try{if(ArrayBuffer.transfer){ret=ArrayBuffer.transfer(buffer,size)}else{var oldHEAP8=HEAP8;ret=new ArrayBuffer(size);var temp=new Int8Array(ret);temp.set(oldHEAP8)}}catch(e){return false}var success=_emscripten_replace_memory(ret);if(!success)return false;return ret});function enlargeMemory(){var PAGE_MULTIPLE=Module["usingWasm"]?WASM_PAGE_SIZE:ASMJS_PAGE_SIZE;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT)}}var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var lastChar,end;if(dontAddNull){end=buffer+lengthBytesUTF8(string);lastChar=HEAP8[end]}stringToUTF8(string,buffer,Infinity);if(dontAddNull)HEAP8[end]=lastChar}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];if(!Math["clz32"])Math["clz32"]=(function(x){x=x>>>0;for(var i=0;i<32;i++){if(x&1<<31-i)return i}return 32});Math.clz32=Math["clz32"];if(!Math["trunc"])Math["trunc"]=(function(x){return x<0?Math.ceil(x):Math.floor(x)});Math.trunc=Math["trunc"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_round=Math.round;var Math_min=Math.min;var Math_clz32=Math.clz32;var Math_trunc=Math.trunc;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var ASM_CONSTS=[];STATIC_BASE=Runtime.GLOBAL_BASE;STATICTOP=STATIC_BASE+6192;__ATINIT__.push();allocate([228,2,0,0,81,16,0,0,12,3,0,0,177,16,0,0,32,0,0,0,0,0,0,0,12,3,0,0,94,16,0,0,48,0,0,0,0,0,0,0,228,2,0,0,127,16,0,0,12,3,0,0,140,16,0,0,16,0,0,0,0,0,0,0,12,3,0,0,183,17,0,0,32,0,0,0,0,0,0,0,12,3,0,0,147,17,0,0,72,0,0,0,0,0,0,0,108,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,32,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,248,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224,1,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,40,20,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,16,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,56,0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,37,115,40,37,117,41,58,32,65,115,115,101,114,116,105,111,110,32,102,97,105,108,117,114,101,58,32,34,37,115,34,10,0,109,95,115,105,122,101,32,60,61,32,109,95,99,97,112,97,99,105,116,121,0,46,47,105,110,99,92,99,114,110,95,100,101,99,111,109,112,46,104,0,109,105,110,95,110,101,119,95,99,97,112,97,99,105,116,121,32,60,32,40,48,120,55,70,70,70,48,48,48,48,85,32,47,32,101,108,101,109,101,110,116,95,115,105,122,101,41,0,110,101,119,95,99,97,112,97,99,105,116,121,32,38,38,32,40,110,101,119,95,99,97,112,97,99,105,116,121,32,62,32,109,95,99,97,112,97,99,105,116,121,41,0,110,117,109,95,99,111,100,101,115,91,99,93,0,115,111,114,116,101,100,95,112,111,115,32,60,32,116,111,116,97,108,95,117,115,101,100,95,115,121,109,115,0,112,67,111,100,101,115,105,122,101,115,91,115,121,109,95,105,110,100,101,120,93,32,61,61,32,99,111,100,101,115,105,122,101,0,116,32,60,32,40,49,85,32,60,60,32,116,97,98,108,101,95,98,105,116,115,41,0,109,95,108,111,111,107,117,112,91,116,93,32,61,61,32,99,85,73,78,84,51,50,95,77,65,88,0,99,114,110,100,95,109,97,108,108,111,99,58,32,115,105,122,101,32,116,111,111,32,98,105,103,0,99,114,110,100,95,109,97,108,108,111,99,58,32,111,117,116,32,111,102,32,109,101,109,111,114,121,0,40,40,117,105,110,116,51,50,41,112,95,110,101,119,32,38,32,40,67,82,78,68,95,77,73,78,95,65,76,76,79,67,95,65,76,73,71,78,77,69,78,84,32,45,32,49,41,41,32,61,61,32,48,0,99,114,110,100,95,114,101,97,108,108,111,99,58,32,98,97,100,32,112,116,114,0,99,114,110,100,95,102,114,101,101,58,32,98,97,100,32,112,116,114,0,102,97,108,115,101,0,40,116,111,116,97,108,95,115,121,109,115,32,62,61,32,49,41,32,38,38,32,40,116,111,116,97,108,95,115,121,109,115,32,60,61,32,112,114,101,102,105,120,95,99,111,100,105,110,103,58,58,99,77,97,120,83,117,112,112,111,114,116,101,100,83,121,109,115,41,0,17,18,19,20,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15,16,48,0,110,117,109,95,98,105,116,115,32,60,61,32,51,50,85,0,109,95,98,105,116,95,99,111,117,110,116,32,60,61,32,99,66,105,116,66,117,102,83,105,122,101,0,116,32,33,61,32,99,85,73,78,84,51,50,95,77,65,88,0,109,111,100,101,108,46,109,95,99,111,100,101,95,115,105,122,101,115,91,115,121,109,93,32,61,61,32,108,101,110,0,0,2,3,1,0,2,3,4,5,6,7,1,40,108,101,110,32,62,61,32,49,41,32,38,38,32,40,108,101,110,32,60,61,32,99,77,97,120,69,120,112,101,99,116,101,100,67,111,100,101,83,105,122,101,41,0,105,32,60,32,109,95,115,105,122,101,0,110,101,120,116,95,108,101,118,101,108,95,111,102,115,32,62,32,99,117,114,95,108,101,118,101,108,95,111,102,115,0,1,2,2,3,3,3,3,4,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,2,1,2,0,0,0,1,0,2,1,0,2,0,0,1,2,3,110,117,109,32,38,38,32,40,110,117,109,32,61,61,32,126,110,117,109,95,99,104,101,99,107,41,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,116,101,114,109,105,110,97,116,105,110,103,0,117,110,99,97,117,103,104,116,0,83,116,57,101,120,99,101,112,116,105,111,110,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,83,116,57,116,121,112,101,95,105,110,102,111,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _abort(){Module["abort"]()}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0&&!info.rethrown){if(info.destructor){Module["dynCall_vi"](info.destructor,ptr)}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___cxa_begin_catch(ptr){var info=EXCEPTIONS.infos[ptr];if(info&&!info.caught){info.caught=true;__ZSt18uncaught_exceptionv.uncaught_exception--}if(info)info.rethrown=false;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Module["dynCall_v"](func);_pthread_once.seen[ptr]=1}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}var SYSCALLS={varargs:0,get:(function(varargs){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret}),getStr:(function(){var ret=Pointer_stringify(SYSCALLS.get());return ret}),get64:(function(){var low=SYSCALLS.get(),high=SYSCALLS.get();if(low>=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}var cttz_i8=allocate([8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0],"i8",ALLOC_STATIC);var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}function ___setErrNo(value){if(Module["___errno_location"])HEAP32[Module["___errno_location"]()>>2]=value;return value}var PTHREAD_SPECIFIC_NEXT_KEY=1;var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(Runtime.setTempRet0(0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(Runtime.setTempRet0(0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(Runtime.setTempRet0(typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(Runtime.setTempRet0(throwntype),thrown)|0}function ___gxx_personality_v0(){}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);HEAP32[result>>2]=stream.position;if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.get(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();var ret=0;if(!___syscall146.buffer){___syscall146.buffers=[null,[],[]];___syscall146.printChar=(function(stream,curr){var buffer=___syscall146.buffers[stream];assert(buffer);if(curr===0||curr===10){(stream===1?Module["print"]:Module["printErr"])(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}})}for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=DYNAMIC_BASE;staticSealed=true;function invoke_iiii(index,a1,a2,a3){try{return Module["dynCall_iiii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){try{Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_vi(index,a1){try{Module["dynCall_vi"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_ii(index,a1){try{return Module["dynCall_ii"](index,a1)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viii(index,a1,a2,a3){try{Module["dynCall_viii"](index,a1,a2,a3)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_v(index){try{Module["dynCall_v"](index)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){try{Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}function invoke_viiii(index,a1,a2,a3,a4){try{Module["dynCall_viiii"](index,a1,a2,a3,a4)}catch(e){if(typeof e!=="number"&&e!=="longjmp")throw e;Module["setThrew"](1,0)}}Module.asmGlobalArg={"Math":Math,"Int8Array":Int8Array,"Int16Array":Int16Array,"Int32Array":Int32Array,"Uint8Array":Uint8Array,"Uint16Array":Uint16Array,"Uint32Array":Uint32Array,"Float32Array":Float32Array,"Float64Array":Float64Array,"NaN":NaN,"Infinity":Infinity,"byteLength":byteLength};Module.asmLibraryArg={"abort":abort,"assert":assert,"enlargeMemory":enlargeMemory,"getTotalMemory":getTotalMemory,"abortOnCannotGrowMemory":abortOnCannotGrowMemory,"invoke_iiii":invoke_iiii,"invoke_viiiii":invoke_viiiii,"invoke_vi":invoke_vi,"invoke_ii":invoke_ii,"invoke_viii":invoke_viii,"invoke_v":invoke_v,"invoke_viiiiii":invoke_viiiiii,"invoke_viiii":invoke_viiii,"_pthread_getspecific":_pthread_getspecific,"___syscall54":___syscall54,"_pthread_setspecific":_pthread_setspecific,"___gxx_personality_v0":___gxx_personality_v0,"___syscall6":___syscall6,"___setErrNo":___setErrNo,"_abort":_abort,"___cxa_begin_catch":___cxa_begin_catch,"_pthread_once":_pthread_once,"_emscripten_memcpy_big":_emscripten_memcpy_big,"_pthread_key_create":_pthread_key_create,"___syscall140":___syscall140,"___resumeException":___resumeException,"___cxa_find_matching_catch":___cxa_find_matching_catch,"___syscall146":___syscall146,"__ZSt18uncaught_exceptionv":__ZSt18uncaught_exceptionv,"DYNAMICTOP_PTR":DYNAMICTOP_PTR,"tempDoublePtr":tempDoublePtr,"ABORT":ABORT,"STACKTOP":STACKTOP,"STACK_MAX":STACK_MAX,"cttz_i8":cttz_i8};// EMSCRIPTEN_START_ASM -var asm=(function(global,env,buffer) { -"almost asm";var a=global.Int8Array;var b=new a(buffer);var c=global.Int16Array;var d=new c(buffer);var e=global.Int32Array;var f=new e(buffer);var g=global.Uint8Array;var h=new g(buffer);var i=global.Uint16Array;var j=new i(buffer);var k=global.Uint32Array;var l=new k(buffer);var m=global.Float32Array;var n=new m(buffer);var o=global.Float64Array;var p=new o(buffer);var q=global.byteLength;var r=env.DYNAMICTOP_PTR|0;var s=env.tempDoublePtr|0;var t=env.ABORT|0;var u=env.STACKTOP|0;var v=env.STACK_MAX|0;var w=env.cttz_i8|0;var x=0;var y=0;var z=0;var A=0;var B=global.NaN,C=global.Infinity;var D=0,E=0,F=0,G=0,H=0.0;var I=0;var J=global.Math.floor;var K=global.Math.abs;var L=global.Math.sqrt;var M=global.Math.pow;var N=global.Math.cos;var O=global.Math.sin;var P=global.Math.tan;var Q=global.Math.acos;var R=global.Math.asin;var S=global.Math.atan;var T=global.Math.atan2;var U=global.Math.exp;var V=global.Math.log;var W=global.Math.ceil;var X=global.Math.imul;var Y=global.Math.min;var Z=global.Math.max;var _=global.Math.clz32;var $=env.abort;var aa=env.assert;var ba=env.enlargeMemory;var ca=env.getTotalMemory;var da=env.abortOnCannotGrowMemory;var ea=env.invoke_iiii;var fa=env.invoke_viiiii;var ga=env.invoke_vi;var ha=env.invoke_ii;var ia=env.invoke_viii;var ja=env.invoke_v;var ka=env.invoke_viiiiii;var la=env.invoke_viiii;var ma=env._pthread_getspecific;var na=env.___syscall54;var oa=env._pthread_setspecific;var pa=env.___gxx_personality_v0;var qa=env.___syscall6;var ra=env.___setErrNo;var sa=env._abort;var ta=env.___cxa_begin_catch;var ua=env._pthread_once;var va=env._emscripten_memcpy_big;var wa=env._pthread_key_create;var xa=env.___syscall140;var ya=env.___resumeException;var za=env.___cxa_find_matching_catch;var Aa=env.___syscall146;var Ba=env.__ZSt18uncaught_exceptionv;var Ca=0.0;function Da(newBuffer){if(q(newBuffer)&16777215||q(newBuffer)<=16777215||q(newBuffer)>2147483648)return false;b=new a(newBuffer);d=new c(newBuffer);f=new e(newBuffer);h=new g(newBuffer);j=new i(newBuffer);l=new k(newBuffer);n=new m(newBuffer);p=new o(newBuffer);buffer=newBuffer;return true} -// EMSCRIPTEN_START_FUNCS -function Ma(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0;x=u;u=u+16|0;n=x;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=f[1144]|0;c=m>>>a;if(c&3|0){b=(c&1^1)+a|0;a=4616+(b<<1<<2)|0;c=a+8|0;d=f[c>>2]|0;e=d+8|0;g=f[e>>2]|0;if((a|0)==(g|0))f[1144]=m&~(1<>2]=a;f[c>>2]=g}w=b<<3;f[d+4>>2]=w|3;w=d+w+4|0;f[w>>2]=f[w>>2]|1;w=e;u=x;return w|0}l=f[1146]|0;if(k>>>0>l>>>0){if(c|0){b=2<>>12&16;b=b>>>h;c=b>>>5&8;b=b>>>c;e=b>>>2&4;b=b>>>e;a=b>>>1&2;b=b>>>a;d=b>>>1&1;d=(c|h|e|a|d)+(b>>>d)|0;b=4616+(d<<1<<2)|0;a=b+8|0;e=f[a>>2]|0;h=e+8|0;c=f[h>>2]|0;if((b|0)==(c|0)){a=m&~(1<>2]=b;f[a>>2]=c;a=m}g=(d<<3)-k|0;f[e+4>>2]=k|3;d=e+k|0;f[d+4>>2]=g|1;f[d+g>>2]=g;if(l|0){e=f[1149]|0;b=l>>>3;c=4616+(b<<1<<2)|0;b=1<>2]|0}f[a>>2]=e;f[b+12>>2]=e;f[e+8>>2]=b;f[e+12>>2]=c}f[1146]=g;f[1149]=d;w=h;u=x;return w|0}i=f[1145]|0;if(i){c=(i&0-i)+-1|0;h=c>>>12&16;c=c>>>h;g=c>>>5&8;c=c>>>g;j=c>>>2&4;c=c>>>j;d=c>>>1&2;c=c>>>d;a=c>>>1&1;a=f[4880+((g|h|j|d|a)+(c>>>a)<<2)>>2]|0;c=(f[a+4>>2]&-8)-k|0;d=f[a+16+(((f[a+16>>2]|0)==0&1)<<2)>>2]|0;if(!d){j=a;g=c}else{do{h=(f[d+4>>2]&-8)-k|0;j=h>>>0>>0;c=j?h:c;a=j?d:a;d=f[d+16+(((f[d+16>>2]|0)==0&1)<<2)>>2]|0}while((d|0)!=0);j=a;g=c}h=j+k|0;if(j>>>0>>0){e=f[j+24>>2]|0;b=f[j+12>>2]|0;do if((b|0)==(j|0)){a=j+20|0;b=f[a>>2]|0;if(!b){a=j+16|0;b=f[a>>2]|0;if(!b){c=0;break}}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0;c=b}else{c=f[j+8>>2]|0;f[c+12>>2]=b;f[b+8>>2]=c;c=b}while(0);do if(e|0){b=f[j+28>>2]|0;a=4880+(b<<2)|0;if((j|0)==(f[a>>2]|0)){f[a>>2]=c;if(!c){f[1145]=i&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=e;b=f[j+16>>2]|0;if(b|0){f[c+16>>2]=b;f[b+24>>2]=c}b=f[j+20>>2]|0;if(b|0){f[c+20>>2]=b;f[b+24>>2]=c}}while(0);if(g>>>0<16){w=g+k|0;f[j+4>>2]=w|3;w=j+w+4|0;f[w>>2]=f[w>>2]|1}else{f[j+4>>2]=k|3;f[h+4>>2]=g|1;f[h+g>>2]=g;if(l|0){d=f[1149]|0;b=l>>>3;c=4616+(b<<1<<2)|0;b=1<>2]|0}f[a>>2]=d;f[b+12>>2]=d;f[d+8>>2]=b;f[d+12>>2]=c}f[1146]=g;f[1149]=h}w=j+8|0;u=x;return w|0}else m=k}else m=k}else m=k}else if(a>>>0<=4294967231){a=a+11|0;k=a&-8;j=f[1145]|0;if(j){d=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)i=31;else{m=(a+1048320|0)>>>16&8;v=a<>>16&4;v=v<>>16&2;i=14-(l|m|i)+(v<>>15)|0;i=k>>>(i+7|0)&1|i<<1}else i=0;c=f[4880+(i<<2)>>2]|0;a:do if(!c){c=0;a=0;v=57}else{a=0;h=k<<((i|0)==31?0:25-(i>>>1)|0);g=0;while(1){e=(f[c+4>>2]&-8)-k|0;if(e>>>0>>0)if(!e){a=c;d=0;e=c;v=61;break a}else{a=c;d=e}e=f[c+20>>2]|0;c=f[c+16+(h>>>31<<2)>>2]|0;g=(e|0)==0|(e|0)==(c|0)?g:e;e=(c|0)==0;if(e){c=g;v=57;break}else h=h<<((e^1)&1)}}while(0);if((v|0)==57){if((c|0)==0&(a|0)==0){a=2<>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;l=m>>>1&2;m=m>>>l;c=m>>>1&1;a=0;c=f[4880+((g|h|i|l|c)+(m>>>c)<<2)>>2]|0}if(!c){i=a;h=d}else{e=c;v=61}}if((v|0)==61)while(1){v=0;c=(f[e+4>>2]&-8)-k|0;m=c>>>0>>0;c=m?c:d;a=m?e:a;e=f[e+16+(((f[e+16>>2]|0)==0&1)<<2)>>2]|0;if(!e){i=a;h=c;break}else{d=c;v=61}}if((i|0)!=0?h>>>0<((f[1146]|0)-k|0)>>>0:0){g=i+k|0;if(i>>>0>=g>>>0){w=0;u=x;return w|0}e=f[i+24>>2]|0;b=f[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=f[a>>2]|0;if(!b){a=i+16|0;b=f[a>>2]|0;if(!b){b=0;break}}while(1){c=b+20|0;d=f[c>>2]|0;if(d|0){b=d;a=c;continue}c=b+16|0;d=f[c>>2]|0;if(!d)break;else{b=d;a=c}}f[a>>2]=0}else{w=f[i+8>>2]|0;f[w+12>>2]=b;f[b+8>>2]=w}while(0);do if(e){a=f[i+28>>2]|0;c=4880+(a<<2)|0;if((i|0)==(f[c>>2]|0)){f[c>>2]=b;if(!b){d=j&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=b;if(!b){d=j;break}}f[b+24>>2]=e;a=f[i+16>>2]|0;if(a|0){f[b+16>>2]=a;f[a+24>>2]=b}a=f[i+20>>2]|0;if(a){f[b+20>>2]=a;f[a+24>>2]=b;d=j}else d=j}else d=j;while(0);do if(h>>>0>=16){f[i+4>>2]=k|3;f[g+4>>2]=h|1;f[g+h>>2]=h;b=h>>>3;if(h>>>0<256){c=4616+(b<<1<<2)|0;a=f[1144]|0;b=1<>2]|0}f[a>>2]=g;f[b+12>>2]=g;f[g+8>>2]=b;f[g+12>>2]=c;break}b=h>>>8;if(b)if(h>>>0>16777215)b=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(t|v|b)+(w<>>15)|0;b=h>>>(b+7|0)&1|b<<1}else b=0;c=4880+(b<<2)|0;f[g+28>>2]=b;a=g+16|0;f[a+4>>2]=0;f[a>>2]=0;a=1<>2]=g;f[g+24>>2]=c;f[g+12>>2]=g;f[g+8>>2]=g;break}a=h<<((b|0)==31?0:25-(b>>>1)|0);c=f[c>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(h|0)){v=97;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=96;break}else{a=a<<1;c=b}}if((v|0)==96){f[d>>2]=g;f[g+24>>2]=c;f[g+12>>2]=g;f[g+8>>2]=g;break}else if((v|0)==97){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=g;f[v>>2]=g;f[g+8>>2]=w;f[g+12>>2]=c;f[g+24>>2]=0;break}}else{w=h+k|0;f[i+4>>2]=w|3;w=i+w+4|0;f[w>>2]=f[w>>2]|1}while(0);w=i+8|0;u=x;return w|0}else m=k}else m=k}else m=-1;while(0);c=f[1146]|0;if(c>>>0>=m>>>0){b=c-m|0;a=f[1149]|0;if(b>>>0>15){w=a+m|0;f[1149]=w;f[1146]=b;f[w+4>>2]=b|1;f[w+b>>2]=b;f[a+4>>2]=m|3}else{f[1146]=0;f[1149]=0;f[a+4>>2]=c|3;w=a+c+4|0;f[w>>2]=f[w>>2]|1}w=a+8|0;u=x;return w|0}h=f[1147]|0;if(h>>>0>m>>>0){t=h-m|0;f[1147]=t;w=f[1150]|0;v=w+m|0;f[1150]=v;f[v+4>>2]=t|1;f[w+4>>2]=m|3;w=w+8|0;u=x;return w|0}if(!(f[1262]|0)){f[1264]=4096;f[1263]=4096;f[1265]=-1;f[1266]=-1;f[1267]=0;f[1255]=0;a=n&-16^1431655768;f[n>>2]=a;f[1262]=a;a=4096}else a=f[1264]|0;i=m+48|0;j=m+47|0;g=a+j|0;e=0-a|0;k=g&e;if(k>>>0<=m>>>0){w=0;u=x;return w|0}a=f[1254]|0;if(a|0?(l=f[1252]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){w=0;u=x;return w|0}b:do if(!(f[1255]&4)){c=f[1150]|0;c:do if(c){d=5024;while(1){a=f[d>>2]|0;if(a>>>0<=c>>>0?(q=d+4|0,(a+(f[q>>2]|0)|0)>>>0>c>>>0):0)break;a=f[d+8>>2]|0;if(!a){v=118;break c}else d=a}b=g-h&e;if(b>>>0<2147483647){a=ac(b|0)|0;if((a|0)==((f[d>>2]|0)+(f[q>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;v=135;break b}}else{d=a;v=126}}else b=0}else v=118;while(0);do if((v|0)==118){c=ac(0)|0;if((c|0)!=(-1|0)?(b=c,o=f[1263]|0,p=o+-1|0,b=((p&b|0)==0?0:(p+b&0-o)-b|0)+k|0,o=f[1252]|0,p=b+o|0,b>>>0>m>>>0&b>>>0<2147483647):0){q=f[1254]|0;if(q|0?p>>>0<=o>>>0|p>>>0>q>>>0:0){b=0;break}a=ac(b|0)|0;if((a|0)==(c|0)){h=b;g=c;v=135;break b}else{d=a;v=126}}else b=0}while(0);do if((v|0)==126){c=0-b|0;if(!(i>>>0>b>>>0&(b>>>0<2147483647&(d|0)!=(-1|0))))if((d|0)==(-1|0)){b=0;break}else{h=b;g=d;v=135;break b}a=f[1264]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=d;v=135;break b}if((ac(a|0)|0)==(-1|0)){ac(c|0)|0;b=0;break}else{h=a+b|0;g=d;v=135;break b}}while(0);f[1255]=f[1255]|4;v=133}else{b=0;v=133}while(0);if(((v|0)==133?k>>>0<2147483647:0)?(t=ac(k|0)|0,q=ac(0)|0,r=q-t|0,s=r>>>0>(m+40|0)>>>0,!((t|0)==(-1|0)|s^1|t>>>0>>0&((t|0)!=(-1|0)&(q|0)!=(-1|0))^1)):0){h=s?r:b;g=t;v=135}if((v|0)==135){b=(f[1252]|0)+h|0;f[1252]=b;if(b>>>0>(f[1253]|0)>>>0)f[1253]=b;j=f[1150]|0;do if(j){b=5024;while(1){a=f[b>>2]|0;c=b+4|0;d=f[c>>2]|0;if((g|0)==(a+d|0)){v=145;break}e=f[b+8>>2]|0;if(!e)break;else b=e}if(((v|0)==145?(f[b+12>>2]&8|0)==0:0)?j>>>0>>0&j>>>0>=a>>>0:0){f[c>>2]=d+h;w=j+8|0;w=(w&7|0)==0?0:0-w&7;v=j+w|0;w=(f[1147]|0)+(h-w)|0;f[1150]=v;f[1147]=w;f[v+4>>2]=w|1;f[v+w+4>>2]=40;f[1151]=f[1266];break}if(g>>>0<(f[1148]|0)>>>0)f[1148]=g;c=g+h|0;b=5024;while(1){if((f[b>>2]|0)==(c|0)){v=153;break}a=f[b+8>>2]|0;if(!a)break;else b=a}if((v|0)==153?(f[b+12>>2]&8|0)==0:0){f[b>>2]=g;l=b+4|0;f[l>>2]=(f[l>>2]|0)+h;l=g+8|0;l=g+((l&7|0)==0?0:0-l&7)|0;b=c+8|0;b=c+((b&7|0)==0?0:0-b&7)|0;k=l+m|0;i=b-l-m|0;f[l+4>>2]=m|3;do if((b|0)!=(j|0)){if((b|0)==(f[1149]|0)){w=(f[1146]|0)+i|0;f[1146]=w;f[1149]=k;f[k+4>>2]=w|1;f[k+w>>2]=w;break}a=f[b+4>>2]|0;if((a&3|0)==1){h=a&-8;d=a>>>3;d:do if(a>>>0<256){a=f[b+8>>2]|0;c=f[b+12>>2]|0;if((c|0)==(a|0)){f[1144]=f[1144]&~(1<>2]=c;f[c+8>>2]=a;break}}else{g=f[b+24>>2]|0;a=f[b+12>>2]|0;do if((a|0)==(b|0)){d=b+16|0;c=d+4|0;a=f[c>>2]|0;if(!a){a=f[d>>2]|0;if(!a){a=0;break}else c=d}while(1){d=a+20|0;e=f[d>>2]|0;if(e|0){a=e;c=d;continue}d=a+16|0;e=f[d>>2]|0;if(!e)break;else{a=e;c=d}}f[c>>2]=0}else{w=f[b+8>>2]|0;f[w+12>>2]=a;f[a+8>>2]=w}while(0);if(!g)break;c=f[b+28>>2]|0;d=4880+(c<<2)|0;do if((b|0)!=(f[d>>2]|0)){f[g+16+(((f[g+16>>2]|0)!=(b|0)&1)<<2)>>2]=a;if(!a)break d}else{f[d>>2]=a;if(a|0)break;f[1145]=f[1145]&~(1<>2]=g;c=b+16|0;d=f[c>>2]|0;if(d|0){f[a+16>>2]=d;f[d+24>>2]=a}c=f[c+4>>2]|0;if(!c)break;f[a+20>>2]=c;f[c+24>>2]=a}while(0);b=b+h|0;e=h+i|0}else e=i;b=b+4|0;f[b>>2]=f[b>>2]&-2;f[k+4>>2]=e|1;f[k+e>>2]=e;b=e>>>3;if(e>>>0<256){c=4616+(b<<1<<2)|0;a=f[1144]|0;b=1<>2]|0}f[a>>2]=k;f[b+12>>2]=k;f[k+8>>2]=b;f[k+12>>2]=c;break}b=e>>>8;do if(!b)b=0;else{if(e>>>0>16777215){b=31;break}v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;b=14-(t|v|b)+(w<>>15)|0;b=e>>>(b+7|0)&1|b<<1}while(0);d=4880+(b<<2)|0;f[k+28>>2]=b;a=k+16|0;f[a+4>>2]=0;f[a>>2]=0;a=f[1145]|0;c=1<>2]=k;f[k+24>>2]=d;f[k+12>>2]=k;f[k+8>>2]=k;break}a=e<<((b|0)==31?0:25-(b>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){v=194;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=193;break}else{a=a<<1;c=b}}if((v|0)==193){f[d>>2]=k;f[k+24>>2]=c;f[k+12>>2]=k;f[k+8>>2]=k;break}else if((v|0)==194){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=k;f[v>>2]=k;f[k+8>>2]=w;f[k+12>>2]=c;f[k+24>>2]=0;break}}else{w=(f[1147]|0)+i|0;f[1147]=w;f[1150]=k;f[k+4>>2]=w|1}while(0);w=l+8|0;u=x;return w|0}b=5024;while(1){a=f[b>>2]|0;if(a>>>0<=j>>>0?(w=a+(f[b+4>>2]|0)|0,w>>>0>j>>>0):0)break;b=f[b+8>>2]|0}e=w+-47|0;a=e+8|0;a=e+((a&7|0)==0?0:0-a&7)|0;e=j+16|0;a=a>>>0>>0?j:a;b=a+8|0;c=g+8|0;c=(c&7|0)==0?0:0-c&7;v=g+c|0;c=h+-40-c|0;f[1150]=v;f[1147]=c;f[v+4>>2]=c|1;f[v+c+4>>2]=40;f[1151]=f[1266];c=a+4|0;f[c>>2]=27;f[b>>2]=f[1256];f[b+4>>2]=f[1257];f[b+8>>2]=f[1258];f[b+12>>2]=f[1259];f[1256]=g;f[1257]=h;f[1259]=0;f[1258]=b;b=a+24|0;do{v=b;b=b+4|0;f[b>>2]=7}while((v+8|0)>>>0>>0);if((a|0)!=(j|0)){g=a-j|0;f[c>>2]=f[c>>2]&-2;f[j+4>>2]=g|1;f[a>>2]=g;b=g>>>3;if(g>>>0<256){c=4616+(b<<1<<2)|0;a=f[1144]|0;b=1<>2]|0}f[a>>2]=j;f[b+12>>2]=j;f[j+8>>2]=b;f[j+12>>2]=c;break}b=g>>>8;if(b)if(g>>>0>16777215)c=31;else{v=(b+1048320|0)>>>16&8;w=b<>>16&4;w=w<>>16&2;c=14-(t|v|c)+(w<>>15)|0;c=g>>>(c+7|0)&1|c<<1}else c=0;d=4880+(c<<2)|0;f[j+28>>2]=c;f[j+20>>2]=0;f[e>>2]=0;b=f[1145]|0;a=1<>2]=j;f[j+24>>2]=d;f[j+12>>2]=j;f[j+8>>2]=j;break}a=g<<((c|0)==31?0:25-(c>>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(g|0)){v=216;break}d=c+16+(a>>>31<<2)|0;b=f[d>>2]|0;if(!b){v=215;break}else{a=a<<1;c=b}}if((v|0)==215){f[d>>2]=j;f[j+24>>2]=c;f[j+12>>2]=j;f[j+8>>2]=j;break}else if((v|0)==216){v=c+8|0;w=f[v>>2]|0;f[w+12>>2]=j;f[v>>2]=j;f[j+8>>2]=w;f[j+12>>2]=c;f[j+24>>2]=0;break}}}else{w=f[1148]|0;if((w|0)==0|g>>>0>>0)f[1148]=g;f[1256]=g;f[1257]=h;f[1259]=0;f[1153]=f[1262];f[1152]=-1;b=0;do{w=4616+(b<<1<<2)|0;f[w+12>>2]=w;f[w+8>>2]=w;b=b+1|0}while((b|0)!=32);w=g+8|0;w=(w&7|0)==0?0:0-w&7;v=g+w|0;w=h+-40-w|0;f[1150]=v;f[1147]=w;f[v+4>>2]=w|1;f[v+w+4>>2]=40;f[1151]=f[1266]}while(0);b=f[1147]|0;if(b>>>0>m>>>0){t=b-m|0;f[1147]=t;w=f[1150]|0;v=w+m|0;f[1150]=v;f[v+4>>2]=t|1;f[w+4>>2]=m|3;w=w+8|0;u=x;return w|0}}w=jd()|0;f[w>>2]=12;w=0;u=x;return w|0}function Na(a,c,d,e,g,i){a=a|0;c=+c;d=d|0;e=e|0;g=g|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+560|0;l=G+8|0;t=G;F=G+524|0;E=F;m=G+512|0;f[t>>2]=0;D=m+12|0;Fc(c)|0;if((I|0)<0){c=-c;B=1;A=2087}else{B=(g&2049|0)!=0&1;A=(g&2048|0)==0?((g&1|0)==0?2088:2093):2090}Fc(c)|0;C=I&2146435072;do if(C>>>0<2146435072|(C|0)==2146435072&0<0){q=+hd(c,t)*2.0;j=q!=0.0;if(j)f[t>>2]=(f[t>>2]|0)+-1;w=i|32;if((w|0)==97){r=i&32;p=(r|0)==0?A:A+9|0;o=B|2;j=12-e|0;do if(!(e>>>0>11|(j|0)==0)){c=8.0;do{j=j+-1|0;c=c*16.0}while((j|0)!=0);if((b[p>>0]|0)==45){c=-(c+(-q-c));break}else{c=q+c-c;break}}else c=q;while(0);k=f[t>>2]|0;j=(k|0)<0?0-k|0:k;j=Rb(j,((j|0)<0)<<31>>31,D)|0;if((j|0)==(D|0)){j=m+11|0;b[j>>0]=48}b[j+-1>>0]=(k>>31&2)+43;n=j+-2|0;b[n>>0]=i+15;m=(e|0)<1;l=(g&8|0)==0;j=F;do{C=~~c;k=j+1|0;b[j>>0]=h[2122+C>>0]|r;c=(c-+(C|0))*16.0;if((k-E|0)==1?!(l&(m&c==0.0)):0){b[k>>0]=46;j=j+2|0}else j=k}while(c!=0.0);C=j-E|0;E=D-n|0;D=(e|0)!=0&(C+-2|0)<(e|0)?e+2|0:C;j=E+o+D|0;Wb(a,32,d,j,g);Nc(a,p,o);Wb(a,48,d,j,g^65536);Nc(a,F,C);Wb(a,48,D-C|0,0,0);Nc(a,n,E);Wb(a,32,d,j,g^8192);break}k=(e|0)<0?6:e;if(j){j=(f[t>>2]|0)+-28|0;f[t>>2]=j;c=q*268435456.0}else{c=q;j=f[t>>2]|0}C=(j|0)<0?l:l+288|0;l=C;do{y=~~c>>>0;f[l>>2]=y;l=l+4|0;c=(c-+(y>>>0))*1.0e9}while(c!=0.0);if((j|0)>0){m=C;o=l;while(1){n=(j|0)<29?j:29;j=o+-4|0;if(j>>>0>=m>>>0){l=0;do{x=yc(f[j>>2]|0,0,n|0)|0;x=Gc(x|0,I|0,l|0,0)|0;y=I;v=mc(x|0,y|0,1e9,0)|0;f[j>>2]=v;l=Uc(x|0,y|0,1e9,0)|0;j=j+-4|0}while(j>>>0>=m>>>0);if(l){m=m+-4|0;f[m>>2]=l}}l=o;while(1){if(l>>>0<=m>>>0)break;j=l+-4|0;if(!(f[j>>2]|0))l=j;else break}j=(f[t>>2]|0)-n|0;f[t>>2]=j;if((j|0)>0)o=l;else break}}else m=C;if((j|0)<0){e=((k+25|0)/9|0)+1|0;s=(w|0)==102;do{r=0-j|0;r=(r|0)<9?r:9;if(m>>>0>>0){n=(1<>>r;p=0;j=m;do{y=f[j>>2]|0;f[j>>2]=(y>>>r)+p;p=X(y&n,o)|0;j=j+4|0}while(j>>>0>>0);j=(f[m>>2]|0)==0?m+4|0:m;if(!p){m=j;j=l}else{f[l>>2]=p;m=j;j=l+4|0}}else{m=(f[m>>2]|0)==0?m+4|0:m;j=l}l=s?C:m;l=(j-l>>2|0)>(e|0)?l+(e<<2)|0:j;j=(f[t>>2]|0)+r|0;f[t>>2]=j}while((j|0)<0);j=m;e=l}else{j=m;e=l}y=C;if(j>>>0>>0){l=(y-j>>2)*9|0;n=f[j>>2]|0;if(n>>>0>=10){m=10;do{m=m*10|0;l=l+1|0}while(n>>>0>=m>>>0)}}else l=0;s=(w|0)==103;v=(k|0)!=0;m=k-((w|0)!=102?l:0)+((v&s)<<31>>31)|0;if((m|0)<(((e-y>>2)*9|0)+-9|0)){m=m+9216|0;r=C+4+(((m|0)/9|0)+-1024<<2)|0;m=((m|0)%9|0)+1|0;if((m|0)<9){n=10;do{n=n*10|0;m=m+1|0}while((m|0)!=9)}else n=10;o=f[r>>2]|0;p=(o>>>0)%(n>>>0)|0;m=(r+4|0)==(e|0);if(!(m&(p|0)==0)){q=(((o>>>0)/(n>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;x=(n|0)/2|0;c=p>>>0>>0?.5:m&(p|0)==(x|0)?1.0:1.5;if(B){x=(b[A>>0]|0)==45;c=x?-c:c;q=x?-q:q}m=o-p|0;f[r>>2]=m;if(q+c!=q){x=m+n|0;f[r>>2]=x;if(x>>>0>999999999){l=r;while(1){m=l+-4|0;f[l>>2]=0;if(m>>>0>>0){j=j+-4|0;f[j>>2]=0}x=(f[m>>2]|0)+1|0;f[m>>2]=x;if(x>>>0>999999999)l=m;else break}}else m=r;l=(y-j>>2)*9|0;o=f[j>>2]|0;if(o>>>0>=10){n=10;do{n=n*10|0;l=l+1|0}while(o>>>0>=n>>>0)}}else m=r}else m=r;m=m+4|0;m=e>>>0>m>>>0?m:e;x=j}else{m=e;x=j}w=m;while(1){if(w>>>0<=x>>>0){t=0;break}j=w+-4|0;if(!(f[j>>2]|0))w=j;else{t=1;break}}e=0-l|0;do if(s){j=((v^1)&1)+k|0;if((j|0)>(l|0)&(l|0)>-5){n=i+-1|0;k=j+-1-l|0}else{n=i+-2|0;k=j+-1|0}j=g&8;if(!j){if(t?(z=f[w+-4>>2]|0,(z|0)!=0):0)if(!((z>>>0)%10|0)){m=0;j=10;do{j=j*10|0;m=m+1|0}while(!((z>>>0)%(j>>>0)|0|0))}else m=0;else m=9;j=((w-y>>2)*9|0)+-9|0;if((n|32|0)==102){r=j-m|0;r=(r|0)>0?r:0;k=(k|0)<(r|0)?k:r;r=0;break}else{r=j+l-m|0;r=(r|0)>0?r:0;k=(k|0)<(r|0)?k:r;r=0;break}}else r=j}else{n=i;r=g&8}while(0);s=k|r;o=(s|0)!=0&1;p=(n|32|0)==102;if(p){v=0;j=(l|0)>0?l:0}else{j=(l|0)<0?e:l;j=Rb(j,((j|0)<0)<<31>>31,D)|0;m=D;if((m-j|0)<2)do{j=j+-1|0;b[j>>0]=48}while((m-j|0)<2);b[j+-1>>0]=(l>>31&2)+43;j=j+-2|0;b[j>>0]=n;v=j;j=m-j|0}j=B+1+k+o+j|0;Wb(a,32,d,j,g);Nc(a,A,B);Wb(a,48,d,j,g^65536);if(p){n=x>>>0>C>>>0?C:x;r=F+9|0;o=r;p=F+8|0;m=n;do{l=Rb(f[m>>2]|0,0,r)|0;if((m|0)==(n|0)){if((l|0)==(r|0)){b[p>>0]=48;l=p}}else if(l>>>0>F>>>0){Ib(F|0,48,l-E|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}Nc(a,l,o-l|0);m=m+4|0}while(m>>>0<=C>>>0);if(s|0)Nc(a,2138,1);if(m>>>0>>0&(k|0)>0)while(1){l=Rb(f[m>>2]|0,0,r)|0;if(l>>>0>F>>>0){Ib(F|0,48,l-E|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}Nc(a,l,(k|0)<9?k:9);m=m+4|0;l=k+-9|0;if(!(m>>>0>>0&(k|0)>9)){k=l;break}else k=l}Wb(a,48,k+9|0,9,0)}else{s=t?w:x+4|0;if((k|0)>-1){t=F+9|0;r=(r|0)==0;e=t;o=0-E|0;p=F+8|0;n=x;do{l=Rb(f[n>>2]|0,0,t)|0;if((l|0)==(t|0)){b[p>>0]=48;l=p}do if((n|0)==(x|0)){m=l+1|0;Nc(a,l,1);if(r&(k|0)<1){l=m;break}Nc(a,2138,1);l=m}else{if(l>>>0<=F>>>0)break;Ib(F|0,48,l+o|0)|0;do l=l+-1|0;while(l>>>0>F>>>0)}while(0);E=e-l|0;Nc(a,l,(k|0)>(E|0)?E:k);k=k-E|0;n=n+4|0}while(n>>>0>>0&(k|0)>-1)}Wb(a,48,k+18|0,18,0);Nc(a,v,D-v|0)}Wb(a,32,d,j,g^8192)}else{F=(i&32|0)!=0;j=B+3|0;Wb(a,32,d,j,g&-65537);Nc(a,A,B);Nc(a,c!=c|0.0!=0.0?(F?2114:2118):F?2106:2110,3);Wb(a,32,d,j,g^8192)}while(0);u=G;return ((j|0)<(d|0)?d:j)|0}function Oa(a,c,e,g,h){a=a|0;c=c|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=u;u=u+64|0;C=G+16|0;D=G;A=G+24|0;E=G+8|0;F=G+20|0;f[C>>2]=c;x=(a|0)!=0;y=A+40|0;z=y;A=A+39|0;B=E+4|0;j=0;i=0;n=0;a:while(1){do if((i|0)>-1)if((j|0)>(2147483647-i|0)){i=jd()|0;f[i>>2]=75;i=-1;break}else{i=j+i|0;break}while(0);j=b[c>>0]|0;if(!(j<<24>>24)){w=87;break}else k=c;b:while(1){switch(j<<24>>24){case 37:{j=k;w=9;break b}case 0:{j=k;break b}default:{}}v=k+1|0;f[C>>2]=v;j=b[v>>0]|0;k=v}c:do if((w|0)==9)while(1){w=0;if((b[k+1>>0]|0)!=37)break c;j=j+1|0;k=k+2|0;f[C>>2]=k;if((b[k>>0]|0)==37)w=9;else break}while(0);j=j-c|0;if(x)Nc(a,c,j);if(j|0){c=k;continue}l=k+1|0;j=(b[l>>0]|0)+-48|0;if(j>>>0<10){v=(b[k+2>>0]|0)==36;t=v?j:-1;n=v?1:n;l=v?k+3|0:l}else t=-1;f[C>>2]=l;j=b[l>>0]|0;k=(j<<24>>24)+-32|0;d:do if(k>>>0<32){m=0;o=j;while(1){j=1<>2]=l;j=b[l>>0]|0;k=(j<<24>>24)+-32|0;if(k>>>0>=32)break;else o=j}}else m=0;while(0);if(j<<24>>24==42){k=l+1|0;j=(b[k>>0]|0)+-48|0;if(j>>>0<10?(b[l+2>>0]|0)==36:0){f[h+(j<<2)>>2]=10;j=f[g+((b[k>>0]|0)+-48<<3)>>2]|0;n=1;l=l+3|0}else{if(n|0){i=-1;break}if(x){n=(f[e>>2]|0)+(4-1)&~(4-1);j=f[n>>2]|0;f[e>>2]=n+4;n=0;l=k}else{j=0;n=0;l=k}}f[C>>2]=l;v=(j|0)<0;j=v?0-j|0:j;m=v?m|8192:m}else{j=ec(C)|0;if((j|0)<0){i=-1;break}l=f[C>>2]|0}do if((b[l>>0]|0)==46){if((b[l+1>>0]|0)!=42){f[C>>2]=l+1;k=ec(C)|0;l=f[C>>2]|0;break}o=l+2|0;k=(b[o>>0]|0)+-48|0;if(k>>>0<10?(b[l+3>>0]|0)==36:0){f[h+(k<<2)>>2]=10;k=f[g+((b[o>>0]|0)+-48<<3)>>2]|0;l=l+4|0;f[C>>2]=l;break}if(n|0){i=-1;break a}if(x){v=(f[e>>2]|0)+(4-1)&~(4-1);k=f[v>>2]|0;f[e>>2]=v+4}else k=0;f[C>>2]=o;l=o}else k=-1;while(0);s=0;while(1){if(((b[l>>0]|0)+-65|0)>>>0>57){i=-1;break a}v=l+1|0;f[C>>2]=v;o=b[(b[l>>0]|0)+-65+(1606+(s*58|0))>>0]|0;q=o&255;if((q+-1|0)>>>0<8){s=q;l=v}else break}if(!(o<<24>>24)){i=-1;break}r=(t|0)>-1;do if(o<<24>>24==19)if(r){i=-1;break a}else w=49;else{if(r){f[h+(t<<2)>>2]=q;r=g+(t<<3)|0;t=f[r+4>>2]|0;w=D;f[w>>2]=f[r>>2];f[w+4>>2]=t;w=49;break}if(!x){i=0;break a}db(D,q,e)}while(0);if((w|0)==49?(w=0,!x):0){j=0;c=v;continue}l=b[l>>0]|0;l=(s|0)!=0&(l&15|0)==3?l&-33:l;r=m&-65537;t=(m&8192|0)==0?m:r;e:do switch(l|0){case 110:switch((s&255)<<24>>24){case 0:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 1:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 2:{j=f[D>>2]|0;f[j>>2]=i;f[j+4>>2]=((i|0)<0)<<31>>31;j=0;c=v;continue a}case 3:{d[f[D>>2]>>1]=i;j=0;c=v;continue a}case 4:{b[f[D>>2]>>0]=i;j=0;c=v;continue a}case 6:{f[f[D>>2]>>2]=i;j=0;c=v;continue a}case 7:{j=f[D>>2]|0;f[j>>2]=i;f[j+4>>2]=((i|0)<0)<<31>>31;j=0;c=v;continue a}default:{j=0;c=v;continue a}}case 112:{l=120;k=k>>>0>8?k:8;c=t|8;w=61;break}case 88:case 120:{c=t;w=61;break}case 111:{l=D;c=f[l>>2]|0;l=f[l+4>>2]|0;q=kc(c,l,y)|0;r=z-q|0;m=0;o=2070;k=(t&8|0)==0|(k|0)>(r|0)?k:r+1|0;r=t;w=67;break}case 105:case 100:{l=D;c=f[l>>2]|0;l=f[l+4>>2]|0;if((l|0)<0){c=Cc(0,0,c|0,l|0)|0;l=I;m=D;f[m>>2]=c;f[m+4>>2]=l;m=1;o=2070;w=66;break e}else{m=(t&2049|0)!=0&1;o=(t&2048|0)==0?((t&1|0)==0?2070:2072):2071;w=66;break e}}case 117:{l=D;m=0;o=2070;c=f[l>>2]|0;l=f[l+4>>2]|0;w=66;break}case 99:{b[A>>0]=f[D>>2];c=A;m=0;o=2070;q=y;l=1;k=r;break}case 109:{l=jd()|0;l=Qc(f[l>>2]|0)|0;w=71;break}case 115:{l=f[D>>2]|0;l=l|0?l:2080;w=71;break}case 67:{f[E>>2]=f[D>>2];f[B>>2]=0;f[D>>2]=E;q=-1;l=E;w=75;break}case 83:{c=f[D>>2]|0;if(!k){Wb(a,32,j,0,t);c=0;w=84}else{q=k;l=c;w=75}break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{j=Na(a,+p[D>>3],j,k,t,l)|0;c=v;continue a}default:{m=0;o=2070;q=y;l=k;k=t}}while(0);f:do if((w|0)==61){t=D;s=f[t>>2]|0;t=f[t+4>>2]|0;q=gc(s,t,y,l&32)|0;o=(c&8|0)==0|(s|0)==0&(t|0)==0;m=o?0:2;o=o?2070:2070+(l>>4)|0;r=c;c=s;l=t;w=67}else if((w|0)==66){q=Rb(c,l,y)|0;r=t;w=67}else if((w|0)==71){w=0;t=vb(l,0,k)|0;s=(t|0)==0;c=l;m=0;o=2070;q=s?l+k|0:t;l=s?k:t-l|0;k=r}else if((w|0)==75){w=0;o=l;c=0;k=0;while(1){m=f[o>>2]|0;if(!m)break;k=Rc(F,m)|0;if((k|0)<0|k>>>0>(q-c|0)>>>0)break;c=k+c|0;if(q>>>0>c>>>0)o=o+4|0;else break}if((k|0)<0){i=-1;break a}Wb(a,32,j,c,t);if(!c){c=0;w=84}else{m=0;while(1){k=f[l>>2]|0;if(!k){w=84;break f}k=Rc(F,k)|0;m=k+m|0;if((m|0)>(c|0)){w=84;break f}Nc(a,F,k);if(m>>>0>=c>>>0){w=84;break}else l=l+4|0}}}while(0);if((w|0)==67){w=0;l=(c|0)!=0|(l|0)!=0;t=(k|0)!=0|l;l=((l^1)&1)+(z-q)|0;c=t?q:y;q=y;l=t?((k|0)>(l|0)?k:l):k;k=(k|0)>-1?r&-65537:r}else if((w|0)==84){w=0;Wb(a,32,j,c,t^8192);j=(j|0)>(c|0)?j:c;c=v;continue}s=q-c|0;r=(l|0)<(s|0)?s:l;t=r+m|0;j=(j|0)<(t|0)?t:j;Wb(a,32,j,t,k);Nc(a,o,m);Wb(a,48,j,t,k^65536);Wb(a,48,r,s,0);Nc(a,c,s);Wb(a,32,j,t,k^8192);c=v}g:do if((w|0)==87)if(!a)if(!n)i=0;else{i=1;while(1){c=f[h+(i<<2)>>2]|0;if(!c)break;db(g+(i<<3)|0,c,e);i=i+1|0;if((i|0)>=10){i=1;break g}}while(1){if(f[h+(i<<2)>>2]|0){i=-1;break g}i=i+1|0;if((i|0)>=10){i=1;break}}}while(0);u=G;return i|0}function Pa(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=u;u=u+704|0;A=E+144|0;z=E+128|0;y=E+112|0;x=E+96|0;w=E+80|0;v=E+64|0;t=E+48|0;B=E+32|0;n=E+16|0;k=E;p=E+184|0;D=E+160|0;q=yb(a,14)|0;if(!q){Eb(c);D=1;u=E;return D|0}r=c+4|0;s=c+8|0;d=f[s>>2]|0;if((d|0)!=(q|0)){if(d>>>0<=q>>>0){do if((f[c+12>>2]|0)>>>0>>0){if(fb(r,q,(d+1|0)==(q|0),1,0)|0){d=f[s>>2]|0;break}b[c+16>>0]=1;D=0;u=E;return D|0}while(0);Ib((f[r>>2]|0)+d|0,0,q-d|0)|0}f[s>>2]=q}Ib(f[r>>2]|0,0,q|0)|0;o=a+20|0;d=f[o>>2]|0;if((d|0)<5){i=a+4|0;j=a+8|0;g=a+16|0;do{e=f[i>>2]|0;if((e|0)==(f[j>>2]|0))e=0;else{f[i>>2]=e+1;e=h[e>>0]|0}d=d+8|0;f[o>>2]=d;if((d|0)>=33){f[k>>2]=866;f[k+4>>2]=3208;f[k+8>>2]=1366;vc(p,812,k)|0;Ub(p)|0;d=f[o>>2]|0}e=e<<32-d|f[g>>2];f[g>>2]=e}while((d|0)<5)}else{e=a+16|0;g=e;e=f[e>>2]|0}m=e>>>27;f[g>>2]=e<<5;f[o>>2]=d+-5;if((m+-1|0)>>>0>20){D=0;u=E;return D|0}f[D+20>>2]=0;f[D>>2]=0;f[D+4>>2]=0;f[D+8>>2]=0;f[D+12>>2]=0;b[D+16>>0]=0;d=D+4|0;e=D+8|0;a:do if(fb(d,21,0,1,0)|0){i=f[e>>2]|0;l=f[d>>2]|0;Ib(l+i|0,0,21-i|0)|0;f[e>>2]=21;i=a+4|0;j=a+8|0;k=a+16|0;g=0;do{d=f[o>>2]|0;if((d|0)<3)do{e=f[i>>2]|0;if((e|0)==(f[j>>2]|0))e=0;else{f[i>>2]=e+1;e=h[e>>0]|0}d=d+8|0;f[o>>2]=d;if((d|0)>=33){f[n>>2]=866;f[n+4>>2]=3208;f[n+8>>2]=1366;vc(p,812,n)|0;Ub(p)|0;d=f[o>>2]|0}e=e<<32-d|f[k>>2];f[k>>2]=e}while((d|0)<3);else e=f[k>>2]|0;f[k>>2]=e<<3;f[o>>2]=d+-3;b[l+(h[1327+g>>0]|0)>>0]=e>>>29;g=g+1|0}while((g|0)!=(m|0));if(qb(D)|0){k=a+4|0;l=a+8|0;m=a+16|0;d=0;b:do{j=q-d|0;g=bb(a,D)|0;c:do if(g>>>0<17){if((f[s>>2]|0)>>>0<=d>>>0){f[B>>2]=866;f[B+4>>2]=910;f[B+8>>2]=1497;vc(p,812,B)|0;Ub(p)|0}b[(f[r>>2]|0)+d>>0]=g;d=d+1|0}else switch(g|0){case 17:{e=f[o>>2]|0;if((e|0)<3)do{g=f[k>>2]|0;if((g|0)==(f[l>>2]|0))g=0;else{f[k>>2]=g+1;g=h[g>>0]|0}e=e+8|0;f[o>>2]=e;if((e|0)>=33){f[t>>2]=866;f[t+4>>2]=3208;f[t+8>>2]=1366;vc(p,812,t)|0;Ub(p)|0;e=f[o>>2]|0}g=g<<32-e|f[m>>2];f[m>>2]=g}while((e|0)<3);else g=f[m>>2]|0;f[m>>2]=g<<3;f[o>>2]=e+-3;g=(g>>>29)+3|0;e=g>>>0>j>>>0;if(e){d=0;break a}else{d=(e?0:g)+d|0;break c}}case 18:{e=f[o>>2]|0;if((e|0)<7)do{g=f[k>>2]|0;if((g|0)==(f[l>>2]|0))g=0;else{f[k>>2]=g+1;g=h[g>>0]|0}e=e+8|0;f[o>>2]=e;if((e|0)>=33){f[v>>2]=866;f[v+4>>2]=3208;f[v+8>>2]=1366;vc(p,812,v)|0;Ub(p)|0;e=f[o>>2]|0}g=g<<32-e|f[m>>2];f[m>>2]=g}while((e|0)<7);else g=f[m>>2]|0;f[m>>2]=g<<7;f[o>>2]=e+-7;g=(g>>>25)+11|0;e=g>>>0>j>>>0;if(e){d=0;break a}else{d=(e?0:g)+d|0;break c}}default:{if((g+-19|0)>>>0>=2){C=81;break b}e=f[o>>2]|0;if((g|0)==19){if((e|0)<2){g=e;while(1){e=f[k>>2]|0;if((e|0)==(f[l>>2]|0))i=0;else{f[k>>2]=e+1;i=h[e>>0]|0}e=g+8|0;f[o>>2]=e;if((e|0)>=33){f[w>>2]=866;f[w+4>>2]=3208;f[w+8>>2]=1366;vc(p,812,w)|0;Ub(p)|0;e=f[o>>2]|0}g=i<<32-e|f[m>>2];f[m>>2]=g;if((e|0)<2)g=e;else break}}else g=f[m>>2]|0;f[m>>2]=g<<2;g=g>>>30;i=3;e=e+-2|0}else{if((e|0)<6)do{g=f[k>>2]|0;if((g|0)==(f[l>>2]|0))g=0;else{f[k>>2]=g+1;g=h[g>>0]|0}e=e+8|0;f[o>>2]=e;if((e|0)>=33){f[x>>2]=866;f[x+4>>2]=3208;f[x+8>>2]=1366;vc(p,812,x)|0;Ub(p)|0;e=f[o>>2]|0}g=g<<32-e|f[m>>2];f[m>>2]=g}while((e|0)<6);else g=f[m>>2]|0;f[m>>2]=g<<6;g=g>>>26;i=7;e=e+-6|0}f[o>>2]=e;g=g+i|0;if((d|0)==0|g>>>0>j>>>0){d=0;break a}e=d+-1|0;if((f[s>>2]|0)>>>0<=e>>>0){f[y>>2]=866;f[y+4>>2]=910;f[y+8>>2]=1497;vc(p,812,y)|0;Ub(p)|0}i=b[(f[r>>2]|0)+e>>0]|0;if(!(i<<24>>24)){d=0;break a}e=g+d|0;if(d>>>0>=e>>>0)break c;do{if((f[s>>2]|0)>>>0<=d>>>0){f[z>>2]=866;f[z+4>>2]=910;f[z+8>>2]=1497;vc(p,812,z)|0;Ub(p)|0}b[(f[r>>2]|0)+d>>0]=i;d=d+1|0}while((d|0)!=(e|0));d=e}}while(0)}while(q>>>0>d>>>0);if((C|0)==81){f[A>>2]=866;f[A+4>>2]=3149;f[A+8>>2]=1348;vc(p,812,A)|0;Ub(p)|0;d=0;break}if((q|0)==(d|0))d=qb(c)|0;else d=0}else d=0}else{b[D+16>>0]=1;d=0}while(0);Cb(D);D=d;u=E;return D|0}function Qa(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;L=u;u=u+880|0;J=L+144|0;I=L+128|0;H=L+112|0;G=L+96|0;C=L+80|0;x=L+64|0;v=L+48|0;w=L+32|0;q=L+16|0;p=L;E=L+360|0;F=L+296|0;K=L+224|0;t=L+156|0;if((c|0)==0|g>>>0>11){K=0;u=L;return K|0}f[a>>2]=c;i=K;k=i+68|0;do{f[i>>2]=0;i=i+4|0}while((i|0)<(k|0));i=0;do{D=b[e+i>>0]|0;k=K+((D&255)<<2)|0;if(D<<24>>24)f[k>>2]=(f[k>>2]|0)+1;i=i+1|0}while((i|0)!=(c|0));k=0;l=0;m=0;n=-1;o=1;while(1){i=f[K+(o<<2)>>2]|0;if(!i){f[a+28+(o+-1<<2)>>2]=0;r=l}else{r=o+-1|0;f[F+(r<<2)>>2]=k;k=i+k|0;D=16-o|0;f[a+28+(r<<2)>>2]=(k+-1<>2]=l;f[t+(o<<2)>>2]=l;r=i+l|0;m=m>>>0>o>>>0?m:o;n=n>>>0>>0?n:o}o=o+1|0;if((o|0)==17)break;else{k=k<<1;l=r}}f[a+4>>2]=r;k=a+172|0;do if(r>>>0>(f[k>>2]|0)>>>0){i=r+-1|0;if(!(i&r))i=r;else{i=i>>>16|i;i=i>>>8|i;i=i>>>4|i;i=i>>>2|i;i=(i>>>1|i)+1|0;i=i>>>0>c>>>0?c:i}f[k>>2]=i;l=a+176|0;i=f[l>>2]|0;do if(i|0){D=f[i+-4>>2]|0;i=i+-8|0;if(!((D|0)!=0?(D|0)==(~f[i>>2]|0):0)){f[p>>2]=866;f[p+4>>2]=651;f[p+8>>2]=1579;vc(E,812,p)|0;Ub(E)|0}if(!(i&7)){Nb(i,0,0,1,0)|0;break}else{f[q>>2]=866;f[q+4>>2]=2506;f[q+8>>2]=1232;vc(E,812,q)|0;Ub(E)|0;break}}while(0);i=f[k>>2]|0;i=i|0?i:1;k=Db((i<<1)+8|0,0)|0;if(!k){f[l>>2]=0;g=0;break}else{f[k+4>>2]=i;f[k>>2]=~i;f[l>>2]=k+8;s=24;break}}else s=24;while(0);a:do if((s|0)==24){D=a+24|0;b[D>>0]=n;b[a+25>>0]=m;l=a+176|0;k=0;do{B=b[e+k>>0]|0;i=B&255;if(B<<24>>24){if(!(f[K+(i<<2)>>2]|0)){f[w>>2]=866;f[w+4>>2]=2276;f[w+8>>2]=977;vc(E,812,w)|0;Ub(E)|0}B=t+(i<<2)|0;i=f[B>>2]|0;f[B>>2]=i+1;if(i>>>0>=r>>>0){f[v>>2]=866;f[v+4>>2]=2280;f[v+8>>2]=990;vc(E,812,v)|0;Ub(E)|0}d[(f[l>>2]|0)+(i<<1)>>1]=k}k=k+1|0}while((k|0)!=(c|0));A=(h[D>>0]|0)>>>0>>0?g:0;B=a+8|0;f[B>>2]=A;z=(A|0)!=0;if(z){y=1<>>0>(f[i>>2]|0)>>>0){f[i>>2]=y;l=a+168|0;i=f[l>>2]|0;do if(i|0){w=f[i+-4>>2]|0;i=i+-8|0;if(!((w|0)!=0?(w|0)==(~f[i>>2]|0):0)){f[x>>2]=866;f[x+4>>2]=651;f[x+8>>2]=1579;vc(E,812,x)|0;Ub(E)|0}if(!(i&7)){Nb(i,0,0,1,0)|0;break}else{f[C>>2]=866;f[C+4>>2]=2506;f[C+8>>2]=1232;vc(E,812,C)|0;Ub(E)|0;break}}while(0);i=y<<2;k=Db(i+8|0,0)|0;if(!k){f[l>>2]=0;g=0;break a}else{C=k+8|0;f[k+4>>2]=y;f[k>>2]=~y;f[l>>2]=C;k=C;break}}else{k=a+168|0;i=y<<2;l=k;k=f[k>>2]|0}while(0);Ib(k|0,-1,i|0)|0;v=a+176|0;t=1;do{if(f[K+(t<<2)>>2]|0){w=A-t|0;x=1<>2]|0;if(i>>>0>=16){f[G>>2]=866;f[G+4>>2]=1960;f[G+8>>2]=1453;vc(E,812,G)|0;Ub(E)|0}c=f[a+28+(i<<2)>>2]|0;c=(c|0)==0?-1:(c+-1|0)>>>(16-t|0);if(k>>>0<=c>>>0){r=(f[a+96+(i<<2)>>2]|0)-k|0;s=t<<16;do{i=j[(f[v>>2]|0)+(r+k<<1)>>1]|0;if((h[e+i>>0]|0|0)!=(t|0)){f[H>>2]=866;f[H+4>>2]=2322;f[H+8>>2]=1019;vc(E,812,H)|0;Ub(E)|0}q=k<>>0>=y>>>0){f[I>>2]=866;f[I+4>>2]=2328;f[I+8>>2]=1053;vc(E,812,I)|0;Ub(E)|0}i=f[l>>2]|0;if((f[i+(p<<2)>>2]|0)!=-1){f[J>>2]=866;f[J+4>>2]=2330;f[J+8>>2]=1076;vc(E,812,J)|0;Ub(E)|0;i=f[l>>2]|0}f[i+(p<<2)>>2]=o;n=n+1|0}while(n>>>0>>0);k=k+1|0}while(k>>>0<=c>>>0)}}t=t+1|0}while(A>>>0>=t>>>0)}i=a+96|0;f[i>>2]=(f[i>>2]|0)-(f[F>>2]|0);i=a+100|0;f[i>>2]=(f[i>>2]|0)-(f[F+4>>2]|0);i=a+104|0;f[i>>2]=(f[i>>2]|0)-(f[F+8>>2]|0);i=a+108|0;f[i>>2]=(f[i>>2]|0)-(f[F+12>>2]|0);i=a+112|0;f[i>>2]=(f[i>>2]|0)-(f[F+16>>2]|0);i=a+116|0;f[i>>2]=(f[i>>2]|0)-(f[F+20>>2]|0);i=a+120|0;f[i>>2]=(f[i>>2]|0)-(f[F+24>>2]|0);i=a+124|0;f[i>>2]=(f[i>>2]|0)-(f[F+28>>2]|0);i=a+128|0;f[i>>2]=(f[i>>2]|0)-(f[F+32>>2]|0);i=a+132|0;f[i>>2]=(f[i>>2]|0)-(f[F+36>>2]|0);i=a+136|0;f[i>>2]=(f[i>>2]|0)-(f[F+40>>2]|0);i=a+140|0;f[i>>2]=(f[i>>2]|0)-(f[F+44>>2]|0);i=a+144|0;f[i>>2]=(f[i>>2]|0)-(f[F+48>>2]|0);i=a+148|0;f[i>>2]=(f[i>>2]|0)-(f[F+52>>2]|0);i=a+152|0;f[i>>2]=(f[i>>2]|0)-(f[F+56>>2]|0);i=a+156|0;f[i>>2]=(f[i>>2]|0)-(f[F+60>>2]|0);i=a+16|0;f[i>>2]=0;k=a+20|0;f[k>>2]=h[D>>0];b:do if(z){do{if(!g)break b;J=g;g=g+-1|0}while(!(f[K+(J<<2)>>2]|0));f[i>>2]=f[a+28+(g<<2)>>2];g=A+1|0;f[k>>2]=g;if(g>>>0<=m>>>0){while(1){if(f[K+(g<<2)>>2]|0)break;g=g+1|0;if(g>>>0>m>>>0)break b}f[k>>2]=g}}while(0);f[a+92>>2]=-1;f[a+160>>2]=1048575;f[a+12>>2]=32-(f[B>>2]|0);g=1}while(0);K=g;u=L;return K|0}function Ra(a,c,d,e,g,i,j,k){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;ga=u;u=u+656|0;ea=ga+112|0;ca=ga+96|0;ba=ga+80|0;aa=ga+64|0;$=ga+48|0;fa=ga+32|0;da=ga+16|0;_=ga;Y=ga+144|0;Z=ga+128|0;N=a+240|0;O=f[N>>2]|0;P=a+256|0;Q=f[P>>2]|0;W=b[(f[a+88>>2]|0)+17>>0]|0;R=W&255;S=e>>>2;if(!(W<<24>>24)){u=ga;return 1}T=(k|0)==0;U=j+-1|0;V=U<<4;W=k+-1|0;H=(i&1|0)!=0;I=e<<1;J=a+92|0;K=a+116|0;L=a+140|0;M=a+236|0;G=(g&1|0)!=0;F=a+188|0;B=a+252|0;C=S+1|0;D=S+2|0;E=S+3|0;A=0;i=0;d=0;g=1;do{if(!T){y=f[c+(A<<2)>>2]|0;z=0;while(1){w=z&1;m=(w|0)==0;v=(w<<5^32)+-16|0;w=(w<<1^2)+-1|0;t=m?j:-1;l=m?0:U;a=(z|0)==(W|0);x=H&a;if((l|0)!=(t|0)){s=H&a^1;r=m?y:y+V|0;while(1){if((g|0)==1)g=bb(J,K)|0|512;q=g&7;g=g>>>3;m=h[1539+q>>0]|0;a=0;do{n=(bb(J,L)|0)+d|0;o=n-O|0;p=o>>31;d=p&n|o&~p;if((f[N>>2]|0)>>>0<=d>>>0){f[_>>2]=866;f[_+4>>2]=910;f[_+8>>2]=1497;vc(Y,812,_)|0;Ub(Y)|0}f[Z+(a<<2)>>2]=f[(f[M>>2]|0)+(d<<2)>>2];a=a+1|0}while(a>>>0>>0);p=G&(l|0)==(U|0);if(x|p){o=0;do{a=r+(X(o,e)|0)|0;n=(o|0)==0|s;m=o<<1;ia=(bb(J,F)|0)+i|0;ha=ia-Q|0;i=ha>>31;i=i&ia|ha&~i;do if(!p){if(n){f[a>>2]=f[Z+((h[1547+(q<<2)+m>>0]|0)<<2)>>2];if((f[P>>2]|0)>>>0<=i>>>0){f[ba>>2]=866;f[ba+4>>2]=910;f[ba+8>>2]=1497;vc(Y,812,ba)|0;Ub(Y)|0}f[a+4>>2]=f[(f[B>>2]|0)+(i<<2)>>2]}a=a+8|0;ha=(bb(J,F)|0)+i|0;ia=ha-Q|0;i=ia>>31;i=i&ha|ia&~i;if(n){f[a>>2]=f[Z+((h[(m|1)+(1547+(q<<2))>>0]|0)<<2)>>2];if((f[P>>2]|0)>>>0<=i>>>0){f[ea>>2]=866;f[ea+4>>2]=910;f[ea+8>>2]=1497;vc(Y,812,ea)|0;Ub(Y)|0}f[a+4>>2]=f[(f[B>>2]|0)+(i<<2)>>2]}}else{if(!n){ha=(bb(J,F)|0)+i|0;ia=ha-Q|0;i=ia>>31;i=i&ha|ia&~i;break}f[a>>2]=f[Z+((h[1547+(q<<2)+m>>0]|0)<<2)>>2];if((f[P>>2]|0)>>>0<=i>>>0){f[ca>>2]=866;f[ca+4>>2]=910;f[ca+8>>2]=1497;vc(Y,812,ca)|0;Ub(Y)|0}f[a+4>>2]=f[(f[B>>2]|0)+(i<<2)>>2];ha=(bb(J,F)|0)+i|0;ia=ha-Q|0;i=ia>>31;i=i&ha|ia&~i}while(0);o=o+1|0}while((o|0)!=2)}else{f[r>>2]=f[Z+((h[1547+(q<<2)>>0]|0)<<2)>>2];ha=(bb(J,F)|0)+i|0;ia=ha-Q|0;i=ia>>31;i=i&ha|ia&~i;if((f[P>>2]|0)>>>0<=i>>>0){f[da>>2]=866;f[da+4>>2]=910;f[da+8>>2]=1497;vc(Y,812,da)|0;Ub(Y)|0}f[r+4>>2]=f[(f[B>>2]|0)+(i<<2)>>2];f[r+8>>2]=f[Z+((h[1547+(q<<2)+1>>0]|0)<<2)>>2];ha=(bb(J,F)|0)+i|0;ia=ha-Q|0;i=ia>>31;i=i&ha|ia&~i;if((f[P>>2]|0)>>>0<=i>>>0){f[fa>>2]=866;f[fa+4>>2]=910;f[fa+8>>2]=1497;vc(Y,812,fa)|0;Ub(Y)|0}f[r+12>>2]=f[(f[B>>2]|0)+(i<<2)>>2];f[r+(S<<2)>>2]=f[Z+((h[1547+(q<<2)+2>>0]|0)<<2)>>2];ha=(bb(J,F)|0)+i|0;ia=ha-Q|0;i=ia>>31;i=i&ha|ia&~i;if((f[P>>2]|0)>>>0<=i>>>0){f[$>>2]=866;f[$+4>>2]=910;f[$+8>>2]=1497;vc(Y,812,$)|0;Ub(Y)|0}f[r+(C<<2)>>2]=f[(f[B>>2]|0)+(i<<2)>>2];f[r+(D<<2)>>2]=f[Z+((h[1547+(q<<2)+3>>0]|0)<<2)>>2];ha=(bb(J,F)|0)+i|0;ia=ha-Q|0;i=ia>>31;i=i&ha|ia&~i;if((f[P>>2]|0)>>>0<=i>>>0){f[aa>>2]=866;f[aa+4>>2]=910;f[aa+8>>2]=1497;vc(Y,812,aa)|0;Ub(Y)|0}f[r+(E<<2)>>2]=f[(f[B>>2]|0)+(i<<2)>>2]}l=w+l|0;if((l|0)==(t|0))break;else r=r+v|0}}z=z+1|0;if((z|0)==(k|0))break;else y=y+I|0}}A=A+1|0}while((A|0)!=(R|0));u=ga;return 1}function Sa(a,c,d,e,g,i,k,l){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;ka=u;u=u+640|0;ha=ka+80|0;ga=ka+64|0;fa=ka+48|0;ja=ka+32|0;ia=ka+16|0;ea=ka;ca=ka+128|0;da=ka+112|0;P=ka+96|0;Q=a+272|0;R=f[Q>>2]|0;ba=f[a+88>>2]|0;S=(h[ba+63>>0]|0)<<8|(h[ba+64>>0]|0);ba=b[ba+17>>0]|0;T=ba&255;if(!(ba<<24>>24)){u=ka;return 1}U=(l|0)==0;V=k+-1|0;W=V<<5;X=l+-1|0;Y=e<<1;Z=a+92|0;_=a+116|0;$=a+164|0;aa=a+268|0;ba=a+212|0;O=(g&1|0)==0;N=(i&1|0)==0;M=a+288|0;L=a+284|0;K=0;a=0;i=0;g=0;d=0;m=1;do{if(!U){I=f[c+(K<<2)>>2]|0;J=0;while(1){H=J&1;o=(H|0)==0;G=(H<<6^64)+-32|0;H=(H<<1^2)+-1|0;E=o?k:-1;n=o?0:V;if((n|0)!=(E|0)){F=N|(J|0)!=(X|0);D=o?I:I+W|0;while(1){if((m|0)==1)m=bb(Z,_)|0|512;C=m&7;m=m>>>3;p=h[1539+C>>0]|0;o=0;do{z=(bb(Z,$)|0)+d|0;A=z-R|0;B=A>>31;d=B&z|A&~B;if((f[Q>>2]|0)>>>0<=d>>>0){f[ea>>2]=866;f[ea+4>>2]=910;f[ea+8>>2]=1497;vc(ca,812,ea)|0;Ub(ca)|0}f[da+(o<<2)>>2]=j[(f[aa>>2]|0)+(d<<1)>>1];o=o+1|0}while(o>>>0

    >>0);o=0;do{z=(bb(Z,$)|0)+i|0;A=z-R|0;B=A>>31;i=B&z|A&~B;if((f[Q>>2]|0)>>>0<=i>>>0){f[ia>>2]=866;f[ia+4>>2]=910;f[ia+8>>2]=1497;vc(ca,812,ia)|0;Ub(ca)|0}f[P+(o<<2)>>2]=j[(f[aa>>2]|0)+(i<<1)>>1];o=o+1|0}while(o>>>0

    >>0);B=O|(n|0)!=(V|0);z=0;A=D;while(1){w=F|(z|0)==0;x=z<<1;if(B){t=0;v=A;while(1){y=(bb(Z,ba)|0)+g|0;s=y-S|0;g=s>>31;g=g&y|s&~g;s=(bb(Z,ba)|0)+a|0;y=s-S|0;a=y>>31;a=a&s|y&~a;if(w){s=h[t+x+(1547+(C<<2))>>0]|0;p=g*3|0;o=f[M>>2]|0;if(o>>>0<=p>>>0){f[ja>>2]=866;f[ja+4>>2]=910;f[ja+8>>2]=1497;vc(ca,812,ja)|0;Ub(ca)|0;o=f[M>>2]|0}q=f[L>>2]|0;p=q+(p<<1)|0;r=a*3|0;if(o>>>0>r>>>0)o=q;else{f[fa>>2]=866;f[fa+4>>2]=910;f[fa+8>>2]=1497;vc(ca,812,fa)|0;Ub(ca)|0;o=f[L>>2]|0}y=o+(r<<1)|0;f[v>>2]=(j[p>>1]|0)<<16|f[da+(s<<2)>>2];f[v+4>>2]=(j[p+4>>1]|0)<<16|(j[p+2>>1]|0);f[v+8>>2]=(j[y>>1]|0)<<16|f[P+(s<<2)>>2];f[v+12>>2]=(j[y+4>>1]|0)<<16|(j[y+2>>1]|0)}t=t+1|0;if((t|0)==2)break;else v=v+16|0}}else{y=w^1;w=1547+(C<<2)+x|0;t=0;v=A;while(1){x=(bb(Z,ba)|0)+g|0;s=x-S|0;g=s>>31;g=g&x|s&~g;s=(bb(Z,ba)|0)+a|0;x=s-S|0;a=x>>31;a=a&s|x&~a;if(!((t|0)!=0|y)){s=h[w>>0]|0;p=g*3|0;o=f[M>>2]|0;if(o>>>0<=p>>>0){f[ga>>2]=866;f[ga+4>>2]=910;f[ga+8>>2]=1497;vc(ca,812,ga)|0;Ub(ca)|0;o=f[M>>2]|0}q=f[L>>2]|0;p=q+(p<<1)|0;r=a*3|0;if(o>>>0>r>>>0)o=q;else{f[ha>>2]=866;f[ha+4>>2]=910;f[ha+8>>2]=1497;vc(ca,812,ha)|0;Ub(ca)|0;o=f[L>>2]|0}x=o+(r<<1)|0;f[v>>2]=(j[p>>1]|0)<<16|f[da+(s<<2)>>2];f[v+4>>2]=(j[p+4>>1]|0)<<16|(j[p+2>>1]|0);f[v+8>>2]=(j[x>>1]|0)<<16|f[P+(s<<2)>>2];f[v+12>>2]=(j[x+4>>1]|0)<<16|(j[x+2>>1]|0)}t=t+1|0;if((t|0)==2)break;else v=v+16|0}}z=z+1|0;if((z|0)==2)break;else A=A+e|0}n=H+n|0;if((n|0)==(E|0))break;else D=D+G|0}}J=J+1|0;if((J|0)==(l|0))break;else I=I+Y|0}}K=K+1|0}while((K|0)!=(T|0));u=ka;return 1}function Ta(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;if(!a)return;c=a+-8|0;e=f[1148]|0;a=f[a+-4>>2]|0;b=a&-8;j=c+b|0;do if(!(a&1)){d=f[c>>2]|0;if(!(a&3))return;h=c+(0-d)|0;g=d+b|0;if(h>>>0>>0)return;if((h|0)==(f[1149]|0)){a=j+4|0;b=f[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}f[1146]=g;f[a>>2]=b&-2;f[h+4>>2]=g|1;f[h+g>>2]=g;return}c=d>>>3;if(d>>>0<256){a=f[h+8>>2]|0;b=f[h+12>>2]|0;if((b|0)==(a|0)){f[1144]=f[1144]&~(1<>2]=b;f[b+8>>2]=a;i=h;b=g;break}}e=f[h+24>>2]|0;a=f[h+12>>2]|0;do if((a|0)==(h|0)){c=h+16|0;b=c+4|0;a=f[b>>2]|0;if(!a){a=f[c>>2]|0;if(!a){a=0;break}else b=c}while(1){c=a+20|0;d=f[c>>2]|0;if(d|0){a=d;b=c;continue}c=a+16|0;d=f[c>>2]|0;if(!d)break;else{a=d;b=c}}f[b>>2]=0}else{i=f[h+8>>2]|0;f[i+12>>2]=a;f[a+8>>2]=i}while(0);if(e){b=f[h+28>>2]|0;c=4880+(b<<2)|0;if((h|0)==(f[c>>2]|0)){f[c>>2]=a;if(!a){f[1145]=f[1145]&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=a;if(!a){i=h;b=g;break}}f[a+24>>2]=e;b=h+16|0;c=f[b>>2]|0;if(c|0){f[a+16>>2]=c;f[c+24>>2]=a}b=f[b+4>>2]|0;if(b){f[a+20>>2]=b;f[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=c;h=c}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;d=f[a>>2]|0;if(!(d&1))return;if(!(d&2)){a=f[1149]|0;if((j|0)==(f[1150]|0)){j=(f[1147]|0)+b|0;f[1147]=j;f[1150]=i;f[i+4>>2]=j|1;if((i|0)!=(a|0))return;f[1149]=0;f[1146]=0;return}if((j|0)==(a|0)){j=(f[1146]|0)+b|0;f[1146]=j;f[1149]=h;f[i+4>>2]=j|1;f[h+j>>2]=j;return}e=(d&-8)+b|0;c=d>>>3;do if(d>>>0<256){b=f[j+8>>2]|0;a=f[j+12>>2]|0;if((a|0)==(b|0)){f[1144]=f[1144]&~(1<>2]=a;f[a+8>>2]=b;break}}else{g=f[j+24>>2]|0;a=f[j+12>>2]|0;do if((a|0)==(j|0)){c=j+16|0;b=c+4|0;a=f[b>>2]|0;if(!a){a=f[c>>2]|0;if(!a){c=0;break}else b=c}while(1){c=a+20|0;d=f[c>>2]|0;if(d|0){a=d;b=c;continue}c=a+16|0;d=f[c>>2]|0;if(!d)break;else{a=d;b=c}}f[b>>2]=0;c=a}else{c=f[j+8>>2]|0;f[c+12>>2]=a;f[a+8>>2]=c;c=a}while(0);if(g|0){a=f[j+28>>2]|0;b=4880+(a<<2)|0;if((j|0)==(f[b>>2]|0)){f[b>>2]=c;if(!c){f[1145]=f[1145]&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=c;if(!c)break}f[c+24>>2]=g;a=j+16|0;b=f[a>>2]|0;if(b|0){f[c+16>>2]=b;f[b+24>>2]=c}a=f[a+4>>2]|0;if(a|0){f[c+20>>2]=a;f[a+24>>2]=c}}}while(0);f[i+4>>2]=e|1;f[h+e>>2]=e;if((i|0)==(f[1149]|0)){f[1146]=e;return}}else{f[a>>2]=d&-2;f[i+4>>2]=b|1;f[h+b>>2]=b;e=b}a=e>>>3;if(e>>>0<256){c=4616+(a<<1<<2)|0;b=f[1144]|0;a=1<>2]|0}f[b>>2]=i;f[a+12>>2]=i;f[i+8>>2]=a;f[i+12>>2]=c;return}a=e>>>8;if(a)if(e>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=e>>>(a+7|0)&1|a<<1}else a=0;d=4880+(a<<2)|0;f[i+28>>2]=a;f[i+20>>2]=0;f[i+16>>2]=0;b=f[1145]|0;c=1<>>1)|0);c=f[d>>2]|0;while(1){if((f[c+4>>2]&-8|0)==(e|0)){a=73;break}d=c+16+(b>>>31<<2)|0;a=f[d>>2]|0;if(!a){a=72;break}else{b=b<<1;c=a}}if((a|0)==72){f[d>>2]=i;f[i+24>>2]=c;f[i+12>>2]=i;f[i+8>>2]=i;break}else if((a|0)==73){h=c+8|0;j=f[h>>2]|0;f[j+12>>2]=i;f[h>>2]=i;f[i+8>>2]=j;f[i+12>>2]=c;f[i+24>>2]=0;break}}else{f[1145]=b|c;f[d>>2]=i;f[i+24>>2]=d;f[i+12>>2]=i;f[i+8>>2]=i}while(0);j=(f[1152]|0)+-1|0;f[1152]=j;if(!j)a=5032;else return;while(1){a=f[a>>2]|0;if(!a)break;else a=a+8|0}f[1152]=-1;return}function Ua(a,c,d,e,g,i,k,l){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0,na=0,oa=0,pa=0;pa=u;u=u+640|0;ma=pa+80|0;la=pa+64|0;ka=pa+48|0;oa=pa+32|0;na=pa+16|0;ja=pa;ha=pa+128|0;ia=pa+112|0;N=pa+96|0;O=a+240|0;P=f[O>>2]|0;Q=a+256|0;R=f[Q>>2]|0;S=a+272|0;T=f[S>>2]|0;ga=f[a+88>>2]|0;U=(h[ga+63>>0]|0)<<8|(h[ga+64>>0]|0);ga=b[ga+17>>0]|0;V=ga&255;if(!(ga<<24>>24)){u=pa;return 1}W=(l|0)==0;X=k+-1|0;Y=X<<5;Z=l+-1|0;_=e<<1;$=a+92|0;aa=a+116|0;ba=a+164|0;ca=a+268|0;da=a+140|0;ea=a+236|0;fa=a+212|0;ga=a+188|0;M=(g&1|0)==0;L=(i&1|0)==0;J=a+288|0;K=a+284|0;I=a+252|0;H=0;a=0;i=0;g=0;d=0;m=1;do{if(!W){F=f[c+(H<<2)>>2]|0;G=0;while(1){E=G&1;o=(E|0)==0;D=(E<<6^64)+-32|0;E=(E<<1^2)+-1|0;B=o?k:-1;n=o?0:X;if((n|0)!=(B|0)){C=L|(G|0)!=(Z|0);A=o?F:F+Y|0;while(1){if((m|0)==1)m=bb($,aa)|0|512;z=m&7;m=m>>>3;p=h[1539+z>>0]|0;o=0;do{w=(bb($,ba)|0)+i|0;x=w-T|0;y=x>>31;i=y&w|x&~y;if((f[S>>2]|0)>>>0<=i>>>0){f[ja>>2]=866;f[ja+4>>2]=910;f[ja+8>>2]=1497;vc(ha,812,ja)|0;Ub(ha)|0}f[N+(o<<2)>>2]=j[(f[ca>>2]|0)+(i<<1)>>1];o=o+1|0}while(o>>>0

    >>0);o=0;do{w=(bb($,da)|0)+d|0;x=w-P|0;y=x>>31;d=y&w|x&~y;if((f[O>>2]|0)>>>0<=d>>>0){f[na>>2]=866;f[na+4>>2]=910;f[na+8>>2]=1497;vc(ha,812,na)|0;Ub(ha)|0}f[ia+(o<<2)>>2]=f[(f[ea>>2]|0)+(d<<2)>>2];o=o+1|0}while(o>>>0

    >>0);y=M|(n|0)!=(X|0);w=0;x=A;while(1){s=C|(w|0)==0;t=w<<1;if(y){q=0;r=x;while(1){v=(bb($,fa)|0)+a|0;p=v-U|0;a=p>>31;a=a&v|p&~a;p=(bb($,ga)|0)+g|0;v=p-R|0;g=v>>31;g=g&p|v&~g;if(s){o=h[q+t+(1547+(z<<2))>>0]|0;p=a*3|0;if((f[J>>2]|0)>>>0<=p>>>0){f[oa>>2]=866;f[oa+4>>2]=910;f[oa+8>>2]=1497;vc(ha,812,oa)|0;Ub(ha)|0}v=(f[K>>2]|0)+(p<<1)|0;f[r>>2]=(j[v>>1]|0)<<16|f[N+(o<<2)>>2];f[r+4>>2]=(j[v+4>>1]|0)<<16|(j[v+2>>1]|0);f[r+8>>2]=f[ia+(o<<2)>>2];if((f[Q>>2]|0)>>>0<=g>>>0){f[ka>>2]=866;f[ka+4>>2]=910;f[ka+8>>2]=1497;vc(ha,812,ka)|0;Ub(ha)|0}f[r+12>>2]=f[(f[I>>2]|0)+(g<<2)>>2]}q=q+1|0;if((q|0)==2)break;else r=r+16|0}}else{v=s^1;s=1547+(z<<2)+t|0;q=0;r=x;while(1){t=(bb($,fa)|0)+a|0;p=t-U|0;a=p>>31;a=a&t|p&~a;p=(bb($,ga)|0)+g|0;t=p-R|0;g=t>>31;g=g&p|t&~g;if(!((q|0)!=0|v)){o=h[s>>0]|0;p=a*3|0;if((f[J>>2]|0)>>>0<=p>>>0){f[la>>2]=866;f[la+4>>2]=910;f[la+8>>2]=1497;vc(ha,812,la)|0;Ub(ha)|0}t=(f[K>>2]|0)+(p<<1)|0;f[r>>2]=(j[t>>1]|0)<<16|f[N+(o<<2)>>2];f[r+4>>2]=(j[t+4>>1]|0)<<16|(j[t+2>>1]|0);f[r+8>>2]=f[ia+(o<<2)>>2];if((f[Q>>2]|0)>>>0<=g>>>0){f[ma>>2]=866;f[ma+4>>2]=910;f[ma+8>>2]=1497;vc(ha,812,ma)|0;Ub(ha)|0}f[r+12>>2]=f[(f[I>>2]|0)+(g<<2)>>2]}q=q+1|0;if((q|0)==2)break;else r=r+16|0}}w=w+1|0;if((w|0)==2)break;else x=x+e|0}n=E+n|0;if((n|0)==(B|0))break;else A=A+D|0}}G=G+1|0;if((G|0)==(l|0))break;else F=F+_|0}}H=H+1|0}while((H|0)!=(V|0));u=pa;return 1}function Va(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;j=a+b|0;c=f[a+4>>2]|0;do if(!(c&1)){d=f[a>>2]|0;if(!(c&3))return;g=a+(0-d)|0;h=d+b|0;if((g|0)==(f[1149]|0)){a=j+4|0;c=f[a>>2]|0;if((c&3|0)!=3){i=g;c=h;break}f[1146]=h;f[a>>2]=c&-2;f[g+4>>2]=h|1;f[g+h>>2]=h;return}b=d>>>3;if(d>>>0<256){a=f[g+8>>2]|0;c=f[g+12>>2]|0;if((c|0)==(a|0)){f[1144]=f[1144]&~(1<>2]=c;f[c+8>>2]=a;i=g;c=h;break}}e=f[g+24>>2]|0;a=f[g+12>>2]|0;do if((a|0)==(g|0)){b=g+16|0;c=b+4|0;a=f[c>>2]|0;if(!a){a=f[b>>2]|0;if(!a){a=0;break}else c=b}while(1){b=a+20|0;d=f[b>>2]|0;if(d|0){a=d;c=b;continue}b=a+16|0;d=f[b>>2]|0;if(!d)break;else{a=d;c=b}}f[c>>2]=0}else{i=f[g+8>>2]|0;f[i+12>>2]=a;f[a+8>>2]=i}while(0);if(e){c=f[g+28>>2]|0;b=4880+(c<<2)|0;if((g|0)==(f[b>>2]|0)){f[b>>2]=a;if(!a){f[1145]=f[1145]&~(1<>2]|0)!=(g|0)&1)<<2)>>2]=a;if(!a){i=g;c=h;break}}f[a+24>>2]=e;c=g+16|0;b=f[c>>2]|0;if(b|0){f[a+16>>2]=b;f[b+24>>2]=a}c=f[c+4>>2]|0;if(c){f[a+20>>2]=c;f[c+24>>2]=a;i=g;c=h}else{i=g;c=h}}else{i=g;c=h}}else{i=a;c=b}while(0);a=j+4|0;d=f[a>>2]|0;if(!(d&2)){a=f[1149]|0;if((j|0)==(f[1150]|0)){j=(f[1147]|0)+c|0;f[1147]=j;f[1150]=i;f[i+4>>2]=j|1;if((i|0)!=(a|0))return;f[1149]=0;f[1146]=0;return}if((j|0)==(a|0)){j=(f[1146]|0)+c|0;f[1146]=j;f[1149]=i;f[i+4>>2]=j|1;f[i+j>>2]=j;return}g=(d&-8)+c|0;b=d>>>3;do if(d>>>0<256){c=f[j+8>>2]|0;a=f[j+12>>2]|0;if((a|0)==(c|0)){f[1144]=f[1144]&~(1<>2]=a;f[a+8>>2]=c;break}}else{e=f[j+24>>2]|0;a=f[j+12>>2]|0;do if((a|0)==(j|0)){b=j+16|0;c=b+4|0;a=f[c>>2]|0;if(!a){a=f[b>>2]|0;if(!a){b=0;break}else c=b}while(1){b=a+20|0;d=f[b>>2]|0;if(d|0){a=d;c=b;continue}b=a+16|0;d=f[b>>2]|0;if(!d)break;else{a=d;c=b}}f[c>>2]=0;b=a}else{b=f[j+8>>2]|0;f[b+12>>2]=a;f[a+8>>2]=b;b=a}while(0);if(e|0){a=f[j+28>>2]|0;c=4880+(a<<2)|0;if((j|0)==(f[c>>2]|0)){f[c>>2]=b;if(!b){f[1145]=f[1145]&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=b;if(!b)break}f[b+24>>2]=e;a=j+16|0;c=f[a>>2]|0;if(c|0){f[b+16>>2]=c;f[c+24>>2]=b}a=f[a+4>>2]|0;if(a|0){f[b+20>>2]=a;f[a+24>>2]=b}}}while(0);f[i+4>>2]=g|1;f[i+g>>2]=g;if((i|0)==(f[1149]|0)){f[1146]=g;return}else c=g}else{f[a>>2]=d&-2;f[i+4>>2]=c|1;f[i+c>>2]=c}a=c>>>3;if(c>>>0<256){b=4616+(a<<1<<2)|0;c=f[1144]|0;a=1<>2]|0}f[c>>2]=i;f[a+12>>2]=i;f[i+8>>2]=a;f[i+12>>2]=b;return}a=c>>>8;if(a)if(c>>>0>16777215)a=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;a=14-(g|h|a)+(j<>>15)|0;a=c>>>(a+7|0)&1|a<<1}else a=0;e=4880+(a<<2)|0;f[i+28>>2]=a;f[i+20>>2]=0;f[i+16>>2]=0;b=f[1145]|0;d=1<>2]=i;f[i+24>>2]=e;f[i+12>>2]=i;f[i+8>>2]=i;return}b=c<<((a|0)==31?0:25-(a>>>1)|0);d=f[e>>2]|0;while(1){if((f[d+4>>2]&-8|0)==(c|0)){a=69;break}e=d+16+(b>>>31<<2)|0;a=f[e>>2]|0;if(!a){a=68;break}else{b=b<<1;d=a}}if((a|0)==68){f[e>>2]=i;f[i+24>>2]=d;f[i+12>>2]=i;f[i+8>>2]=i;return}else if((a|0)==69){h=d+8|0;j=f[h>>2]|0;f[j+12>>2]=i;f[h>>2]=i;f[i+8>>2]=j;f[i+12>>2]=d;f[i+24>>2]=0;return}}function Wa(a){a=a|0;var c=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;S=u;u=u+2416|0;k=S;j=S+1904|0;R=S+1880|0;O=S+980|0;P=S+80|0;Q=S+16|0;e=f[a+88>>2]|0;M=(h[e+63>>0]|0)<<8|(h[e+64>>0]|0);N=a+92|0;c=(f[a+4>>2]|0)+((h[e+58>>0]|0)<<8|(h[e+57>>0]|0)<<16|(h[e+59>>0]|0))|0;e=(h[e+61>>0]|0)<<8|(h[e+60>>0]|0)<<16|(h[e+62>>0]|0);if(!e){R=0;u=S;return R|0}f[N>>2]=c;f[a+96>>2]=c;f[a+104>>2]=e;f[a+100>>2]=c+e;f[a+108>>2]=0;f[a+112>>2]=0;f[R+20>>2]=0;f[R>>2]=0;f[R+4>>2]=0;f[R+8>>2]=0;f[R+12>>2]=0;b[R+16>>0]=0;if(Pa(N,R)|0){c=0;e=-7;g=-7;while(1){f[O+(c<<2)>>2]=g;f[P+(c<<2)>>2]=e;i=(g|0)>6;c=c+1|0;if((c|0)==225)break;else{e=(i&1)+e|0;g=i?-7:g+1|0}}c=Q;e=c+64|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(e|0));i=a+284|0;e=M*3|0;g=a+288|0;c=f[g>>2]|0;a:do if((c|0)==(e|0))l=13;else{if(c>>>0<=e>>>0){do if((f[a+292>>2]|0)>>>0>>0)if(fb(i,e,(c+1|0)==(e|0),2,0)|0){c=f[g>>2]|0;break}else{b[a+296>>0]=1;c=0;break a}while(0);Ib((f[i>>2]|0)+(c<<1)|0,0,e-c<<1|0)|0}f[g>>2]=e;l=13}while(0);do if((l|0)==13){if(!M){f[k>>2]=866;f[k+4>>2]=910;f[k+8>>2]=1497;vc(j,812,k)|0;Ub(j)|0;c=1;break}x=Q+4|0;y=Q+8|0;z=Q+12|0;A=Q+16|0;B=Q+20|0;C=Q+24|0;D=Q+28|0;E=Q+32|0;F=Q+36|0;G=Q+40|0;H=Q+44|0;I=Q+48|0;J=Q+52|0;K=Q+56|0;L=Q+60|0;w=0;c=f[i>>2]|0;e=f[Q>>2]|0;g=f[x>>2]|0;i=f[y>>2]|0;a=f[z>>2]|0;j=f[A>>2]|0;k=f[B>>2]|0;l=f[C>>2]|0;m=f[D>>2]|0;n=f[E>>2]|0;o=f[F>>2]|0;p=f[G>>2]|0;q=f[H>>2]|0;r=0;s=0;t=0;v=0;while(1){U=bb(N,R)|0;e=e+(f[O+(U<<2)>>2]|0)&7;g=g+(f[P+(U<<2)>>2]|0)&7;U=bb(N,R)|0;i=i+(f[O+(U<<2)>>2]|0)&7;a=a+(f[P+(U<<2)>>2]|0)&7;U=bb(N,R)|0;j=j+(f[O+(U<<2)>>2]|0)&7;k=k+(f[P+(U<<2)>>2]|0)&7;U=bb(N,R)|0;l=l+(f[O+(U<<2)>>2]|0)&7;m=m+(f[P+(U<<2)>>2]|0)&7;U=bb(N,R)|0;n=n+(f[O+(U<<2)>>2]|0)&7;o=o+(f[P+(U<<2)>>2]|0)&7;U=bb(N,R)|0;p=p+(f[O+(U<<2)>>2]|0)&7;q=q+(f[P+(U<<2)>>2]|0)&7;U=bb(N,R)|0;r=r+(f[O+(U<<2)>>2]|0)&7;s=s+(f[P+(U<<2)>>2]|0)&7;U=bb(N,R)|0;t=t+(f[O+(U<<2)>>2]|0)&7;v=v+(f[P+(U<<2)>>2]|0)&7;U=h[1445+k>>0]|0;d[c>>1]=(h[1445+g>>0]|0)<<3|(h[1445+e>>0]|0)|(h[1445+i>>0]|0)<<6|(h[1445+a>>0]|0)<<9|(h[1445+j>>0]|0)<<12|U<<15;T=h[1445+p>>0]|0;d[c+2>>1]=(h[1445+l>>0]|0)<<2|U>>>1|(h[1445+m>>0]|0)<<5|(h[1445+n>>0]|0)<<8|(h[1445+o>>0]|0)<<11|T<<14;d[c+4>>1]=(h[1445+q>>0]|0)<<1|T>>>2|(h[1445+r>>0]|0)<<4|(h[1445+s>>0]|0)<<7|(h[1445+t>>0]|0)<<10|(h[1445+v>>0]|0)<<13;w=w+1|0;if(w>>>0>=M>>>0)break;else c=c+6|0}f[Q>>2]=e;f[x>>2]=g;f[y>>2]=i;f[z>>2]=a;f[A>>2]=j;f[B>>2]=k;f[C>>2]=l;f[D>>2]=m;f[E>>2]=n;f[F>>2]=o;f[G>>2]=p;f[H>>2]=q;f[I>>2]=r;f[J>>2]=s;f[K>>2]=t;f[L>>2]=v;c=1}while(0)}else c=0;Cb(R);U=c;u=S;return U|0}function Xa(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0;D=u;u=u+1008|0;j=D;i=D+496|0;C=D+472|0;z=D+276|0;A=D+80|0;B=D+16|0;d=f[a+88>>2]|0;x=(h[d+47>>0]|0)<<8|(h[d+48>>0]|0);y=a+92|0;c=(f[a+4>>2]|0)+((h[d+42>>0]|0)<<8|(h[d+41>>0]|0)<<16|(h[d+43>>0]|0))|0;d=(h[d+45>>0]|0)<<8|(h[d+44>>0]|0)<<16|(h[d+46>>0]|0);if(!d){C=0;u=D;return C|0}f[y>>2]=c;f[a+96>>2]=c;f[a+104>>2]=d;f[a+100>>2]=c+d;f[a+108>>2]=0;f[a+112>>2]=0;f[C+20>>2]=0;f[C>>2]=0;f[C+4>>2]=0;f[C+8>>2]=0;f[C+12>>2]=0;b[C+16>>0]=0;if(Pa(y,C)|0){c=0;d=-3;e=-3;while(1){f[z+(c<<2)>>2]=e;f[A+(c<<2)>>2]=d;g=(e|0)>2;c=c+1|0;if((c|0)==49)break;else{d=(g&1)+d|0;e=g?-3:e+1|0}}c=B;d=c+64|0;do{f[c>>2]=0;c=c+4|0}while((c|0)<(d|0));e=a+252|0;d=a+256|0;c=f[d>>2]|0;a:do if((c|0)==(x|0))k=13;else{if(c>>>0<=x>>>0){do if((f[a+260>>2]|0)>>>0>>0)if(fb(e,x,(c+1|0)==(x|0),4,0)|0){c=f[d>>2]|0;break}else{b[a+264>>0]=1;c=0;break a}while(0);Ib((f[e>>2]|0)+(c<<2)|0,0,x-c<<2|0)|0}f[d>>2]=x;k=13}while(0);do if((k|0)==13){if(!x){f[j>>2]=866;f[j+4>>2]=910;f[j+8>>2]=1497;vc(i,812,j)|0;Ub(i)|0;c=1;break}a=B+4|0;i=B+8|0;j=B+12|0;k=B+16|0;l=B+20|0;m=B+24|0;n=B+28|0;o=B+32|0;p=B+36|0;q=B+40|0;r=B+44|0;s=B+48|0;t=B+52|0;v=B+56|0;w=B+60|0;g=0;c=f[e>>2]|0;d=f[a>>2]|0;e=f[B>>2]|0;while(1){Q=bb(y,C)|0;e=e+(f[z+(Q<<2)>>2]|0)&3;d=d+(f[A+(Q<<2)>>2]|0)&3;Q=bb(y,C)|0;R=(f[i>>2]|0)+(f[z+(Q<<2)>>2]|0)&3;f[i>>2]=R;Q=(f[j>>2]|0)+(f[A+(Q<<2)>>2]|0)&3;f[j>>2]=Q;O=bb(y,C)|0;P=(f[k>>2]|0)+(f[z+(O<<2)>>2]|0)&3;f[k>>2]=P;O=(f[l>>2]|0)+(f[A+(O<<2)>>2]|0)&3;f[l>>2]=O;M=bb(y,C)|0;N=(f[m>>2]|0)+(f[z+(M<<2)>>2]|0)&3;f[m>>2]=N;M=(f[n>>2]|0)+(f[A+(M<<2)>>2]|0)&3;f[n>>2]=M;K=bb(y,C)|0;L=(f[o>>2]|0)+(f[z+(K<<2)>>2]|0)&3;f[o>>2]=L;K=(f[p>>2]|0)+(f[A+(K<<2)>>2]|0)&3;f[p>>2]=K;I=bb(y,C)|0;J=(f[q>>2]|0)+(f[z+(I<<2)>>2]|0)&3;f[q>>2]=J;I=(f[r>>2]|0)+(f[A+(I<<2)>>2]|0)&3;f[r>>2]=I;G=bb(y,C)|0;H=(f[s>>2]|0)+(f[z+(G<<2)>>2]|0)&3;f[s>>2]=H;G=(f[t>>2]|0)+(f[A+(G<<2)>>2]|0)&3;f[t>>2]=G;E=bb(y,C)|0;F=(f[v>>2]|0)+(f[z+(E<<2)>>2]|0)&3;f[v>>2]=F;E=(f[w>>2]|0)+(f[A+(E<<2)>>2]|0)&3;f[w>>2]=E;f[c>>2]=(h[1441+d>>0]|0)<<2|(h[1441+e>>0]|0)|(h[1441+R>>0]|0)<<4|(h[1441+Q>>0]|0)<<6|(h[1441+P>>0]|0)<<8|(h[1441+O>>0]|0)<<10|(h[1441+N>>0]|0)<<12|(h[1441+M>>0]|0)<<14|(h[1441+L>>0]|0)<<16|(h[1441+K>>0]|0)<<18|(h[1441+J>>0]|0)<<20|(h[1441+I>>0]|0)<<22|(h[1441+H>>0]|0)<<24|(h[1441+G>>0]|0)<<26|(h[1441+F>>0]|0)<<28|(h[1441+E>>0]|0)<<30;g=g+1|0;if(g>>>0>=x>>>0)break;else c=c+4|0}f[B>>2]=e;f[a>>2]=d;c=1}while(0)}else c=0;Cb(C);R=c;u=D;return R|0}function Ya(a,c,d,e,g,i,k,l){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;aa=u;u=u+592|0;Z=aa+48|0;$=aa+32|0;_=aa+16|0;Y=aa;W=aa+80|0;X=aa+64|0;I=a+272|0;J=f[I>>2]|0;V=f[a+88>>2]|0;K=(h[V+63>>0]|0)<<8|(h[V+64>>0]|0);V=b[V+17>>0]|0;L=V&255;if(!(V<<24>>24)){u=aa;return 1}M=(l|0)==0;N=k+-1|0;O=N<<4;P=l+-1|0;Q=e<<1;R=a+92|0;S=a+116|0;T=a+164|0;U=a+268|0;V=a+212|0;H=(g&1|0)==0;G=(i&1|0)==0;F=a+288|0;E=a+284|0;D=0;g=0;d=0;i=1;do{if(!M){B=f[c+(D<<2)>>2]|0;C=0;while(1){A=C&1;m=(A|0)==0;z=(A<<5^32)+-16|0;A=(A<<1^2)+-1|0;x=m?k:-1;a=m?0:N;if((a|0)!=(x|0)){y=G|(C|0)!=(P|0);w=m?B:B+O|0;while(1){if((i|0)==1)i=bb(R,S)|0|512;v=i&7;i=i>>>3;n=h[1539+v>>0]|0;m=0;do{r=(bb(R,T)|0)+d|0;s=r-J|0;t=s>>31;d=t&r|s&~t;if((f[I>>2]|0)>>>0<=d>>>0){f[Y>>2]=866;f[Y+4>>2]=910;f[Y+8>>2]=1497;vc(W,812,Y)|0;Ub(W)|0}f[X+(m<<2)>>2]=j[(f[U>>2]|0)+(d<<1)>>1];m=m+1|0}while(m>>>0>>0);t=H|(a|0)!=(N|0);r=0;s=w;while(1){q=y|(r|0)==0;n=r<<1;m=(bb(R,V)|0)+g|0;o=m-K|0;p=o>>31;p=p&m|o&~p;if(t){if(q){g=h[1547+(v<<2)+n>>0]|0;m=p*3|0;if((f[F>>2]|0)>>>0<=m>>>0){f[_>>2]=866;f[_+4>>2]=910;f[_+8>>2]=1497;vc(W,812,_)|0;Ub(W)|0}o=(f[E>>2]|0)+(m<<1)|0;f[s>>2]=(j[o>>1]|0)<<16|f[X+(g<<2)>>2];f[s+4>>2]=(j[o+4>>1]|0)<<16|(j[o+2>>1]|0)}o=s+8|0;m=(bb(R,V)|0)+p|0;p=m-K|0;g=p>>31;g=g&m|p&~g;if(q){m=h[(n|1)+(1547+(v<<2))>>0]|0;n=g*3|0;if((f[F>>2]|0)>>>0<=n>>>0){f[Z>>2]=866;f[Z+4>>2]=910;f[Z+8>>2]=1497;vc(W,812,Z)|0;Ub(W)|0}q=(f[E>>2]|0)+(n<<1)|0;f[o>>2]=(j[q>>1]|0)<<16|f[X+(m<<2)>>2];f[s+12>>2]=(j[q+4>>1]|0)<<16|(j[q+2>>1]|0)}}else{if(q){g=h[1547+(v<<2)+n>>0]|0;m=p*3|0;if((f[F>>2]|0)>>>0<=m>>>0){f[$>>2]=866;f[$+4>>2]=910;f[$+8>>2]=1497;vc(W,812,$)|0;Ub(W)|0}q=(f[E>>2]|0)+(m<<1)|0;f[s>>2]=(j[q>>1]|0)<<16|f[X+(g<<2)>>2];f[s+4>>2]=(j[q+4>>1]|0)<<16|(j[q+2>>1]|0)}p=(bb(R,V)|0)+p|0;q=p-K|0;g=q>>31;g=g&p|q&~g}r=r+1|0;if((r|0)==2)break;else s=s+e|0}a=A+a|0;if((a|0)==(x|0))break;else w=w+z|0}}C=C+1|0;if((C|0)==(l|0))break;else B=B+Q|0}}D=D+1|0}while((D|0)!=(L|0));u=aa;return 1}function Za(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=a;j=b;k=j;h=c;n=d;i=n;if(!k){g=(e|0)!=0;if(!i){if(g){f[e>>2]=(l>>>0)%(h>>>0);f[e+4>>2]=0}n=0;e=(l>>>0)/(h>>>0)>>>0;return (I=n,e)|0}else{if(!g){n=0;e=0;return (I=n,e)|0}f[e>>2]=a|0;f[e+4>>2]=b&0;n=0;e=0;return (I=n,e)|0}}g=(i|0)==0;do if(h){if(!g){g=(_(i|0)|0)-(_(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;n=0;e=0;return (I=n,e)|0}g=h-1|0;if(g&h|0){i=(_(h|0)|0)+33-(_(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(e|0){f[e>>2]=g&l;f[e+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (I=o,p)|0}else{p=ic(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (I=o,p)|0}}else{if(g){if(e|0){f[e>>2]=(k>>>0)%(h>>>0);f[e+4>>2]=0}o=0;p=(k>>>0)/(h>>>0)>>>0;return (I=o,p)|0}if(!l){if(e|0){f[e>>2]=0;f[e+4>>2]=(k>>>0)%(i>>>0)}o=0;p=(k>>>0)/(i>>>0)>>>0;return (I=o,p)|0}g=i-1|0;if(!(g&i)){if(e|0){f[e>>2]=a|0;f[e+4>>2]=g&k|b&0}o=0;p=k>>>((ic(i|0)|0)>>>0);return (I=o,p)|0}g=(_(i|0)|0)-(_(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;f[e+4>>2]=j|b&0;o=0;p=0;return (I=o,p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=c|0|0;l=n|d&0;k=Gc(m|0,l|0,-1,-1)|0;c=I;j=i;i=0;do{d=j;j=g>>>31|j<<1;g=i|g<<1;d=a<<1|d>>>31|0;n=a>>>31|b<<1|0;Cc(k|0,c|0,d|0,n|0)|0;p=I;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Cc(d|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=I;h=h-1|0}while((h|0)!=0);k=j;j=0}h=0;if(e|0){f[e>>2]=a;f[e+4>>2]=b}o=(g|0)>>>31|(k|h)<<1|(h<<1|g>>>31)&0|j;p=(g<<1|0>>>31)&-2|i;return (I=o,p)|0}function _a(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=a+4|0;l=f[m>>2]|0;c=l&-8;i=a+c|0;if(!(l&3)){if(b>>>0<256){a=0;return a|0}if(c>>>0>=(b+4|0)>>>0?(c-b|0)>>>0<=f[1264]<<1>>>0:0)return a|0;a=0;return a|0}if(c>>>0>=b>>>0){c=c-b|0;if(c>>>0<=15)return a|0;k=a+b|0;f[m>>2]=l&1|b|2;f[k+4>>2]=c|3;m=k+c+4|0;f[m>>2]=f[m>>2]|1;Va(k,c);return a|0}if((i|0)==(f[1150]|0)){k=(f[1147]|0)+c|0;c=k-b|0;d=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}f[m>>2]=l&1|b|2;f[d+4>>2]=c|1;f[1150]=d;f[1147]=c;return a|0}if((i|0)==(f[1149]|0)){e=(f[1146]|0)+c|0;if(e>>>0>>0){a=0;return a|0}c=e-b|0;d=l&1;if(c>>>0>15){l=a+b|0;k=l+c|0;f[m>>2]=d|b|2;f[l+4>>2]=c|1;f[k>>2]=c;d=k+4|0;f[d>>2]=f[d>>2]&-2;d=l}else{f[m>>2]=d|e|2;d=a+e+4|0;f[d>>2]=f[d>>2]|1;d=0;c=0}f[1146]=c;f[1149]=d;return a|0}d=f[i+4>>2]|0;if(d&2|0){a=0;return a|0}j=(d&-8)+c|0;if(j>>>0>>0){a=0;return a|0}k=j-b|0;e=d>>>3;do if(d>>>0<256){d=f[i+8>>2]|0;c=f[i+12>>2]|0;if((c|0)==(d|0)){f[1144]=f[1144]&~(1<>2]=c;f[c+8>>2]=d;break}}else{h=f[i+24>>2]|0;c=f[i+12>>2]|0;do if((c|0)==(i|0)){e=i+16|0;d=e+4|0;c=f[d>>2]|0;if(!c){c=f[e>>2]|0;if(!c){e=0;break}else g=e}else g=d;while(1){e=c+20|0;d=f[e>>2]|0;if(d|0){c=d;g=e;continue}d=c+16|0;e=f[d>>2]|0;if(!e)break;else{c=e;g=d}}f[g>>2]=0;e=c}else{e=f[i+8>>2]|0;f[e+12>>2]=c;f[c+8>>2]=e;e=c}while(0);if(h|0){c=f[i+28>>2]|0;d=4880+(c<<2)|0;if((i|0)==(f[d>>2]|0)){f[d>>2]=e;if(!e){f[1145]=f[1145]&~(1<>2]|0)!=(i|0)&1)<<2)>>2]=e;if(!e)break}f[e+24>>2]=h;c=i+16|0;d=f[c>>2]|0;if(d|0){f[e+16>>2]=d;f[d+24>>2]=e}c=f[c+4>>2]|0;if(c|0){f[e+20>>2]=c;f[c+24>>2]=e}}}while(0);c=l&1;if(k>>>0<16){f[m>>2]=j|c|2;m=a+j+4|0;f[m>>2]=f[m>>2]|1;return a|0}else{l=a+b|0;f[m>>2]=c|b|2;f[l+4>>2]=k|3;m=l+k+4|0;f[m>>2]=f[m>>2]|1;Va(l,k);return a|0}return 0}function $a(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+592|0;o=p+56|0;j=p+40|0;m=p+72|0;l=p;n=p+68|0;f[l>>2]=40;tb(a,b,l)|0;h=(f[l+4>>2]|0)>>>e;i=(f[l+8>>2]|0)>>>e;l=l+32|0;d=f[l+4>>2]|0;do switch(f[l>>2]|0){case 0:{if(!d)l=8;else k=14;break}case 1:{if(!d)k=13;else k=14;break}case 2:{if(!d)k=13;else k=14;break}case 3:{if(!d)k=13;else k=14;break}case 4:{if(!d)k=13;else k=14;break}case 5:{if(!d)k=13;else k=14;break}case 6:{if(!d)k=13;else k=14;break}case 7:{if(!d)k=13;else k=14;break}case 8:{if(!d)k=13;else k=14;break}case 9:{if(!d)l=8;else k=14;break}case 10:{if(!d)l=8;else k=14;break}default:k=14}while(0);if((k|0)==13)l=16;else if((k|0)==14){f[j>>2]=866;f[j+4>>2]=2672;f[j+8>>2]=1251;vc(m,812,j)|0;Ub(m)|0;l=0}f[n>>2]=c;k=gb(a,b)|0;b=g+e|0;do if(b>>>0>e>>>0){if(!k){d=c;while(1){d=d+(X(X((h+3|0)>>>2,l)|0,(i+3|0)>>>2)|0)|0;e=e+1|0;if((e|0)==(b|0))break;else{i=i>>>1;h=h>>>1}}f[n>>2]=d;break}else{a=i;d=c}while(1){i=X((h+3|0)>>>2,l)|0;j=X(i,(a+3|0)>>>2)|0;if(!(e>>>0>15|j>>>0<8)?(f[k>>2]|0)==519686845:0){wb(k,n,j,i,e)|0;d=f[n>>2]|0}d=d+j|0;f[n>>2]=d;e=e+1|0;if((e|0)==(b|0))break;else{a=a>>>1;h=h>>>1}}}while(0);if(!k){u=p;return}if((f[k>>2]|0)!=519686845){u=p;return}cb(k);if(!(k&7)){Nb(k,0,0,1,0)|0;u=p;return}else{f[o>>2]=866;f[o+4>>2]=2506;f[o+8>>2]=1232;vc(m,812,o)|0;Ub(m)|0;u=p;return}}function ab(a){a=a|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=u;u=u+576|0;j=q;g=q+64|0;p=q+16|0;e=a+88|0;c=f[e>>2]|0;o=(h[c+39>>0]|0)<<8|(h[c+40>>0]|0);m=a+236|0;i=a+240|0;d=f[i>>2]|0;if((d|0)!=(o|0)){if(d>>>0<=o>>>0){do if((f[a+244>>2]|0)>>>0>>0){if(fb(m,o,(d+1|0)==(o|0),4,0)|0){c=f[i>>2]|0;break}b[a+248>>0]=1;p=0;u=q;return p|0}else c=d;while(0);Ib((f[m>>2]|0)+(c<<2)|0,0,o-c<<2|0)|0;c=f[e>>2]|0}f[i>>2]=o}n=a+92|0;d=(f[a+4>>2]|0)+((h[c+34>>0]|0)<<8|(h[c+33>>0]|0)<<16|(h[c+35>>0]|0))|0;c=(h[c+37>>0]|0)<<8|(h[c+36>>0]|0)<<16|(h[c+38>>0]|0);if(!c){p=0;u=q;return p|0}f[n>>2]=d;f[a+96>>2]=d;f[a+104>>2]=c;f[a+100>>2]=d+c;f[a+108>>2]=0;f[a+112>>2]=0;k=p+20|0;f[p>>2]=0;f[p+4>>2]=0;f[p+8>>2]=0;f[p+12>>2]=0;b[p+16>>0]=0;l=p+24|0;f[p+44>>2]=0;f[k>>2]=0;f[k+4>>2]=0;f[k+8>>2]=0;f[k+12>>2]=0;f[k+16>>2]=0;b[k+20>>0]=0;if(Pa(n,p)|0?Pa(n,l)|0:0){if(!(f[i>>2]|0)){f[j>>2]=866;f[j+4>>2]=910;f[j+8>>2]=1497;vc(g,812,j)|0;Ub(g)|0}if(!o)c=1;else{j=0;k=0;d=f[m>>2]|0;e=0;a=0;c=0;g=0;i=0;while(1){j=(bb(n,p)|0)+j&31;i=(bb(n,l)|0)+i&63;g=(bb(n,p)|0)+g&31;c=(bb(n,p)|0)+c|0;a=(bb(n,l)|0)+a&63;e=(bb(n,p)|0)+e&31;f[d>>2]=i<<5|j<<11|g|c<<27|a<<21|e<<16;k=k+1|0;if(k>>>0>=o>>>0){c=1;break}else{d=d+4|0;c=c&31}}}}else c=0;Cb(p+24|0);Cb(p);p=c;u=q;return p|0}function bb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;s=u;u=u+576|0;m=s+48|0;o=s+32|0;n=s+16|0;l=s;q=s+64|0;p=f[b+20>>2]|0;r=a+20|0;k=f[r>>2]|0;if((k|0)<24){i=a+4|0;c=f[i>>2]|0;e=f[a+8>>2]|0;d=c>>>0>>0;if((k|0)<16){if(d){g=(h[c>>0]|0)<<8;c=c+1|0}else g=0;if(c>>>0>>0){e=h[c>>0]|0;c=c+1|0}else e=0;f[i>>2]=c;f[r>>2]=k+16;d=16;c=e|g}else{if(d){f[i>>2]=c+1;c=h[c>>0]|0}else c=0;f[r>>2]=k+8;d=24}i=a+16|0;e=f[i>>2]|c<>2]=e}else{e=a+16|0;i=e;e=f[e>>2]|0}g=(e>>>16)+1|0;do if(g>>>0<=(f[p+16>>2]|0)>>>0){d=f[(f[p+168>>2]|0)+(e>>>(32-(f[p+8>>2]|0)|0)<<2)>>2]|0;if((d|0)==-1){f[l>>2]=866;f[l+4>>2]=3253;f[l+8>>2]=1393;vc(q,812,l)|0;Ub(q)|0}c=d&65535;d=d>>>16;if((f[b+8>>2]|0)>>>0<=c>>>0){f[n>>2]=866;f[n+4>>2]=909;f[n+8>>2]=1497;vc(q,812,n)|0;Ub(q)|0}if((h[(f[b+4>>2]|0)+c>>0]|0|0)!=(d|0)){f[o>>2]=866;f[o+4>>2]=3257;f[o+8>>2]=1410;vc(q,812,o)|0;Ub(q)|0}}else{d=f[p+20>>2]|0;while(1){c=d+-1|0;if(g>>>0>(f[p+28+(c<<2)>>2]|0)>>>0)d=d+1|0;else break}c=(e>>>(32-d|0))+(f[p+96+(c<<2)>>2]|0)|0;if(c>>>0<(f[b>>2]|0)>>>0){c=j[(f[p+176>>2]|0)+(c<<1)>>1]|0;break}f[m>>2]=866;f[m+4>>2]=3275;f[m+8>>2]=1348;vc(q,812,m)|0;Ub(q)|0;r=0;u=s;return r|0}while(0);f[i>>2]=f[i>>2]<>2]=(f[r>>2]|0)-d;r=c;u=s;return r|0}function cb(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+576|0;j=k+48|0;h=k+32|0;g=k+16|0;e=k;i=k+64|0;f[a>>2]=0;c=a+284|0;d=f[c>>2]|0;if(d|0){if(!(d&7))Nb(d,0,0,1,0)|0;else{f[e>>2]=866;f[e+4>>2]=2506;f[e+8>>2]=1232;vc(i,812,e)|0;Ub(i)|0}f[c>>2]=0;f[a+288>>2]=0;f[a+292>>2]=0}b[a+296>>0]=0;c=a+268|0;d=f[c>>2]|0;if(d|0){if(!(d&7))Nb(d,0,0,1,0)|0;else{f[g>>2]=866;f[g+4>>2]=2506;f[g+8>>2]=1232;vc(i,812,g)|0;Ub(i)|0}f[c>>2]=0;f[a+272>>2]=0;f[a+276>>2]=0}b[a+280>>0]=0;c=a+252|0;d=f[c>>2]|0;if(d|0){if(!(d&7))Nb(d,0,0,1,0)|0;else{f[h>>2]=866;f[h+4>>2]=2506;f[h+8>>2]=1232;vc(i,812,h)|0;Ub(i)|0}f[c>>2]=0;f[a+256>>2]=0;f[a+260>>2]=0}b[a+264>>0]=0;c=a+236|0;d=f[c>>2]|0;if(!d){j=a+248|0;b[j>>0]=0;j=a+212|0;Cb(j);j=a+188|0;Cb(j);j=a+164|0;Cb(j);j=a+140|0;Cb(j);j=a+116|0;Cb(j);u=k;return}if(!(d&7))Nb(d,0,0,1,0)|0;else{f[j>>2]=866;f[j+4>>2]=2506;f[j+8>>2]=1232;vc(i,812,j)|0;Ub(i)|0}f[c>>2]=0;f[a+240>>2]=0;f[a+244>>2]=0;j=a+248|0;b[j>>0]=0;j=a+212|0;Cb(j);j=a+188|0;Cb(j);j=a+164|0;Cb(j);j=a+140|0;Cb(j);j=a+116|0;Cb(j);u=k;return}function db(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;f[a>>2]=b;break a}case 10:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;d=a;f[d>>2]=b;f[d+4>>2]=((b|0)<0)<<31>>31;break a}case 11:{d=(f[c>>2]|0)+(4-1)&~(4-1);b=f[d>>2]|0;f[c>>2]=d+4;d=a;f[d>>2]=b;f[d+4>>2]=0;break a}case 12:{d=(f[c>>2]|0)+(8-1)&~(8-1);b=d;e=f[b>>2]|0;b=f[b+4>>2]|0;f[c>>2]=d+8;d=a;f[d>>2]=e;f[d+4>>2]=b;break a}case 13:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;d=(d&65535)<<16>>16;e=a;f[e>>2]=d;f[e+4>>2]=((d|0)<0)<<31>>31;break a}case 14:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;e=a;f[e>>2]=d&65535;f[e+4>>2]=0;break a}case 15:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;d=(d&255)<<24>>24;e=a;f[e>>2]=d;f[e+4>>2]=((d|0)<0)<<31>>31;break a}case 16:{e=(f[c>>2]|0)+(4-1)&~(4-1);d=f[e>>2]|0;f[c>>2]=e+4;e=a;f[e>>2]=d&255;f[e+4>>2]=0;break a}case 17:{e=(f[c>>2]|0)+(8-1)&~(8-1);g=+p[e>>3];f[c>>2]=e+8;p[a>>3]=g;break a}case 18:{e=(f[c>>2]|0)+(8-1)&~(8-1);g=+p[e>>3];f[c>>2]=e+8;p[a>>3]=g;break a}default:break a}while(0);while(0);return}function eb(a){a=a|0;var c=0,e=0,g=0,i=0,j=0,k=0,l=0,m=0,n=0;n=u;u=u+560|0;i=n;g=n+40|0;m=n+16|0;e=f[a+88>>2]|0;k=(h[e+55>>0]|0)<<8|(h[e+56>>0]|0);l=a+92|0;c=(f[a+4>>2]|0)+((h[e+50>>0]|0)<<8|(h[e+49>>0]|0)<<16|(h[e+51>>0]|0))|0;e=(h[e+53>>0]|0)<<8|(h[e+52>>0]|0)<<16|(h[e+54>>0]|0);if(!e){m=0;u=n;return m|0}f[l>>2]=c;f[a+96>>2]=c;f[a+104>>2]=e;f[a+100>>2]=c+e;f[a+108>>2]=0;f[a+112>>2]=0;f[m+20>>2]=0;f[m>>2]=0;f[m+4>>2]=0;f[m+8>>2]=0;f[m+12>>2]=0;b[m+16>>0]=0;a:do if(Pa(l,m)|0){j=a+268|0;e=a+272|0;c=f[e>>2]|0;if((c|0)!=(k|0)){if(c>>>0<=k>>>0){do if((f[a+276>>2]|0)>>>0>>0)if(fb(j,k,(c+1|0)==(k|0),2,0)|0){c=f[e>>2]|0;break}else{b[a+280>>0]=1;c=0;break a}while(0);Ib((f[j>>2]|0)+(c<<1)|0,0,k-c<<1|0)|0}f[e>>2]=k}if(!k){f[i>>2]=866;f[i+4>>2]=910;f[i+8>>2]=1497;vc(g,812,i)|0;Ub(g)|0;c=1;break}e=0;a=0;g=0;c=f[j>>2]|0;while(1){j=bb(l,m)|0;g=j+g&255;a=(bb(l,m)|0)+a&255;d[c>>1]=a<<8|g;e=e+1|0;if(e>>>0>=k>>>0){c=1;break}else c=c+2|0}}else c=0;while(0);Cb(m);m=c;u=n;return m|0}function fb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+576|0;m=p+48|0;j=p+32|0;h=p+16|0;g=p;l=p+64|0;n=p+60|0;k=a+4|0;o=a+8|0;if((f[k>>2]|0)>>>0>(f[o>>2]|0)>>>0){f[g>>2]=866;f[g+4>>2]=2123;f[g+8>>2]=845;vc(l,812,g)|0;Ub(l)|0}if((2147418112/(d>>>0)|0)>>>0<=b>>>0){f[h>>2]=866;f[h+4>>2]=2124;f[h+8>>2]=885;vc(l,812,h)|0;Ub(l)|0}g=f[o>>2]|0;if(g>>>0>=b>>>0){o=1;u=p;return o|0}if(c?(i=b+-1|0,(i&b|0)!=0):0){b=i>>>16|i;b=b>>>8|b;b=b>>>4|b;b=b>>>2|b;b=(b>>>1|b)+1|0;if(!b){b=0;c=10}else c=9}else c=9;if((c|0)==9)if(b>>>0<=g>>>0)c=10;if((c|0)==10){f[j>>2]=866;f[j+4>>2]=2133;f[j+8>>2]=933;vc(l,812,j)|0;Ub(l)|0}i=X(b,d)|0;if(!e){g=Gb(f[a>>2]|0,i,n,1)|0;if(!g)b=0;else{f[a>>2]=g;c=20}}else{h=Db(i,n)|0;if(!h)b=0;else{Ia[e&0](h,f[a>>2]|0,f[k>>2]|0);g=f[a>>2]|0;do if(g|0)if(!(g&7)){Nb(g,0,0,1,0)|0;break}else{f[m>>2]=866;f[m+4>>2]=2506;f[m+8>>2]=1232;vc(l,812,m)|0;Ub(l)|0;break}while(0);f[a>>2]=h;c=20}}if((c|0)==20){g=f[n>>2]|0;if(g>>>0>i>>>0)b=(g>>>0)/(d>>>0)|0;f[o>>2]=b;b=1}o=b;u=p;return o|0}function gb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;o=u;u=u+528|0;m=o;j=o+16|0;if((a|0)==0|c>>>0<62){p=0;u=o;return p|0}k=Db(300,0)|0;if(!k){p=0;u=o;return p|0}f[k>>2]=519686845;f[k+4>>2]=0;f[k+8>>2]=0;l=k+88|0;d=k+136|0;e=k+160|0;g=k+184|0;h=k+208|0;i=k+232|0;n=k+252|0;f[n>>2]=0;f[n+4>>2]=0;f[n+8>>2]=0;b[n+12>>0]=0;n=k+268|0;f[n>>2]=0;f[n+4>>2]=0;f[n+8>>2]=0;b[n+12>>0]=0;n=k+284|0;f[n>>2]=0;f[n+4>>2]=0;f[n+8>>2]=0;b[n+12>>0]=0;n=l;p=n+44|0;do{f[n>>2]=0;n=n+4|0}while((n|0)<(p|0));b[l+44>>0]=0;f[d>>2]=0;f[d+4>>2]=0;f[d+8>>2]=0;f[d+12>>2]=0;f[d+16>>2]=0;b[d+20>>0]=0;f[e>>2]=0;f[e+4>>2]=0;f[e+8>>2]=0;f[e+12>>2]=0;f[e+16>>2]=0;b[e+20>>0]=0;f[g>>2]=0;f[g+4>>2]=0;f[g+8>>2]=0;f[g+12>>2]=0;f[g+16>>2]=0;b[g+20>>0]=0;f[h>>2]=0;f[h+4>>2]=0;f[h+8>>2]=0;f[h+12>>2]=0;f[h+16>>2]=0;b[h+20>>0]=0;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;f[i+12>>2]=0;b[i+16>>0]=0;if(xb(k,a,c)|0){p=k;u=o;return p|0}cb(k);if(!(k&7)){Nb(k,0,0,1,0)|0;p=0;u=o;return p|0}else{f[m>>2]=866;f[m+4>>2]=2506;f[m+8>>2]=1232;vc(j,812,m)|0;Ub(j)|0;p=0;u=o;return p|0}return 0}function hb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0;i=u;u=u+576|0;g=i+40|0;e=i+56|0;j=i;f[j>>2]=40;tb(a,b,j)|0;d=(((f[j+4>>2]|0)>>>c)+3|0)>>>2;b=(((f[j+8>>2]|0)>>>c)+3|0)>>>2;c=j+32|0;a=f[c+4>>2]|0;do switch(f[c>>2]|0){case 0:{if(!a)a=8;else h=14;break}case 1:{if(!a)h=13;else h=14;break}case 2:{if(!a)h=13;else h=14;break}case 3:{if(!a)h=13;else h=14;break}case 4:{if(!a)h=13;else h=14;break}case 5:{if(!a)h=13;else h=14;break}case 6:{if(!a)h=13;else h=14;break}case 7:{if(!a)h=13;else h=14;break}case 8:{if(!a)h=13;else h=14;break}case 9:{if(!a)a=8;else h=14;break}case 10:{if(!a)a=8;else h=14;break}default:h=14}while(0);if((h|0)==13)a=16;else if((h|0)==14){f[g>>2]=866;f[g+4>>2]=2672;f[g+8>>2]=1251;vc(e,812,g)|0;Ub(e)|0;a=0}j=X(X(b,d)|0,a)|0;u=i;return j|0}function ib(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0;e=u;u=u+576|0;d=e+40|0;c=e+56|0;g=e;f[g>>2]=40;tb(a,b,g)|0;b=g+32|0;a=f[b+4>>2]|0;do switch(f[b>>2]|0){case 0:{if(!a){g=8;u=e;return g|0}else a=14;break}case 1:{if(!a)a=13;else a=14;break}case 2:{if(!a)a=13;else a=14;break}case 3:{if(!a)a=13;else a=14;break}case 4:{if(!a)a=13;else a=14;break}case 5:{if(!a)a=13;else a=14;break}case 6:{if(!a)a=13;else a=14;break}case 7:{if(!a)a=13;else a=14;break}case 8:{if(!a)a=13;else a=14;break}case 9:{if(!a){g=8;u=e;return g|0}else a=14;break}case 10:{if(!a){g=8;u=e;return g|0}else a=14;break}default:a=14}while(0);if((a|0)==13){g=16;u=e;return g|0}else if((a|0)==14){f[d>>2]=866;f[d+4>>2]=2672;f[d+8>>2]=1251;vc(c,812,d)|0;Ub(c)|0;g=0;u=e;return g|0}return 0}function jb(a,c,d,e,g,i,j){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0;n=f[a+88>>2]|0;l=(h[n+12>>0]<<8|h[n+13>>0])>>>j;m=(h[n+14>>0]<<8|h[n+15>>0])>>>j;l=((l>>>0>1?l:1)+3|0)>>>2;m=((m>>>0>1?m:1)+3|0)>>>2;n=n+18|0;j=b[n>>0]|0;j=X(l,j<<24>>24==0|j<<24>>24==9?8:16)|0;if(i)if((i&3|0)==0&j>>>0<=i>>>0)j=i;else{g=0;return g|0}if((X(j,m)|0)>>>0>g>>>0){g=0;return g|0}i=(l+1|0)>>>1;k=(m+1|0)>>>1;if(!d){g=0;return g|0}f[a+92>>2]=c;f[a+96>>2]=c;f[a+104>>2]=d;f[a+100>>2]=c+d;f[a+108>>2]=0;f[a+112>>2]=0;switch(b[n>>0]|0){case 0:{if(!(Ra(a,e,g,j,l,m,i,k)|0)){g=0;return g|0}break}case 4:case 6:case 5:case 3:case 2:{if(!(Ua(a,e,g,j,l,m,i,k)|0)){g=0;return g|0}break}case 9:{if(!(Ya(a,e,g,j,l,m,i,k)|0)){g=0;return g|0}break}case 8:case 7:{if(!(Sa(a,e,g,j,l,m,i,k)|0)){g=0;return g|0}break}default:{g=0;return g|0}}g=1;return g|0}function kb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0;if((d|0)>=8192)return va(a|0,c|0,d|0)|0;h=a|0;g=a+d|0;if((a&3)==(c&3)){while(a&3){if(!d)return h|0;b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0;d=d-1|0}d=g&-4|0;e=d-64|0;while((a|0)<=(e|0)){f[a>>2]=f[c>>2];f[a+4>>2]=f[c+4>>2];f[a+8>>2]=f[c+8>>2];f[a+12>>2]=f[c+12>>2];f[a+16>>2]=f[c+16>>2];f[a+20>>2]=f[c+20>>2];f[a+24>>2]=f[c+24>>2];f[a+28>>2]=f[c+28>>2];f[a+32>>2]=f[c+32>>2];f[a+36>>2]=f[c+36>>2];f[a+40>>2]=f[c+40>>2];f[a+44>>2]=f[c+44>>2];f[a+48>>2]=f[c+48>>2];f[a+52>>2]=f[c+52>>2];f[a+56>>2]=f[c+56>>2];f[a+60>>2]=f[c+60>>2];a=a+64|0;c=c+64|0}while((a|0)<(d|0)){f[a>>2]=f[c>>2];a=a+4|0;c=c+4|0}}else{d=g-4|0;while((a|0)<(d|0)){b[a>>0]=b[c>>0]|0;b[a+1>>0]=b[c+1>>0]|0;b[a+2>>0]=b[c+2>>0]|0;b[a+3>>0]=b[c+3>>0]|0;a=a+4|0;c=c+4|0}}while((a|0)<(g|0)){b[a>>0]=b[c>>0]|0;a=a+1|0;c=c+1|0}return h|0}function lb(a){a=a|0;var b=0,c=0,d=0,e=0;e=a+92|0;d=a+88|0;c=f[d>>2]|0;b=(f[a+4>>2]|0)+((h[c+68>>0]|0)<<8|(h[c+67>>0]|0)<<16|(h[c+69>>0]|0))|0;c=(h[c+65>>0]|0)<<8|(h[c+66>>0]|0);if(!c){e=0;return e|0}f[e>>2]=b;f[a+96>>2]=b;f[a+104>>2]=c;f[a+100>>2]=b+c;f[a+108>>2]=0;f[a+112>>2]=0;if(!(Pa(e,a+116|0)|0)){e=0;return e|0}b=f[d>>2]|0;do if(!((h[b+39>>0]|0)<<8|(h[b+40>>0]|0))){if(!((h[b+55>>0]|0)<<8|(h[b+56>>0]|0))){e=0;return e|0}}else{if(!(Pa(e,a+140|0)|0)){e=0;return e|0}if(Pa(e,a+188|0)|0){b=f[d>>2]|0;break}else{e=0;return e|0}}while(0);if((h[b+55>>0]|0)<<8|(h[b+56>>0]|0)|0){if(!(Pa(e,a+164|0)|0)){e=0;return e|0}if(!(Pa(e,a+212|0)|0)){e=0;return e|0}}e=1;return e|0}function mb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;m=u;u=u+48|0;k=m+16|0;g=m;e=m+32|0;i=a+28|0;d=f[i>>2]|0;f[e>>2]=d;j=a+20|0;d=(f[j>>2]|0)-d|0;f[e+4>>2]=d;f[e+8>>2]=b;f[e+12>>2]=c;d=d+c|0;h=a+60|0;f[g>>2]=f[h>>2];f[g+4>>2]=e;f[g+8>>2]=2;g=Ic(Aa(146,g|0)|0)|0;a:do if((d|0)!=(g|0)){b=2;while(1){if((g|0)<0)break;d=d-g|0;o=f[e+4>>2]|0;n=g>>>0>o>>>0;e=n?e+8|0:e;b=(n<<31>>31)+b|0;o=g-(n?o:0)|0;f[e>>2]=(f[e>>2]|0)+o;n=e+4|0;f[n>>2]=(f[n>>2]|0)-o;f[k>>2]=f[h>>2];f[k+4>>2]=e;f[k+8>>2]=b;g=Ic(Aa(146,k|0)|0)|0;if((d|0)==(g|0)){l=3;break a}}f[a+16>>2]=0;f[i>>2]=0;f[j>>2]=0;f[a>>2]=f[a>>2]|32;if((b|0)==2)c=0;else c=c-(f[e+4>>2]|0)|0}else l=3;while(0);if((l|0)==3){o=f[a+44>>2]|0;f[a+16>>2]=o+(f[a+48>>2]|0);f[i>>2]=o;f[j>>2]=o}u=m;return c|0}function nb(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0;do if(!(Sc(a,f[c+8>>2]|0,g)|0)){h=a+8|0;if(!(Sc(a,f[c>>2]|0,g)|0)){j=f[h>>2]|0;Fa[f[(f[j>>2]|0)+24>>2]&3](j,c,d,e,g);break}a=c+32|0;if((f[c+16>>2]|0)!=(d|0)?(i=c+20|0,(f[i>>2]|0)!=(d|0)):0){f[a>>2]=e;e=c+44|0;if((f[e>>2]|0)==4)break;a=c+52|0;b[a>>0]=0;k=c+53|0;b[k>>0]=0;h=f[h>>2]|0;Ka[f[(f[h>>2]|0)+20>>2]&3](h,c,d,d,1,g);if(b[k>>0]|0)if(!(b[a>>0]|0)){a=3;j=11}else a=3;else{a=4;j=11}if((j|0)==11){f[i>>2]=d;k=c+40|0;f[k>>2]=(f[k>>2]|0)+1;if((f[c+36>>2]|0)==1?(f[c+24>>2]|0)==2:0)b[c+54>>0]=1}f[e>>2]=a;break}if((e|0)==1)f[a>>2]=1}else jc(0,c,d,e);while(0);return}function ob(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=u;u=u+224|0;m=r+120|0;n=r+80|0;p=r;q=r+136|0;e=n;g=e+40|0;do{f[e>>2]=0;e=e+4|0}while((e|0)<(g|0));f[m>>2]=f[d>>2];if((Oa(0,c,m,p,n)|0)<0)d=-1;else{if((f[a+76>>2]|0)>-1)o=td(a)|0;else o=0;d=f[a>>2]|0;l=d&32;if((b[a+74>>0]|0)<1)f[a>>2]=d&-33;e=a+48|0;if(!(f[e>>2]|0)){g=a+44|0;h=f[g>>2]|0;f[g>>2]=q;i=a+28|0;f[i>>2]=q;j=a+20|0;f[j>>2]=q;f[e>>2]=80;k=a+16|0;f[k>>2]=q+80;d=Oa(a,c,m,p,n)|0;if(h){Ea[f[a+36>>2]&7](a,0,0)|0;d=(f[j>>2]|0)==0?-1:d;f[g>>2]=h;f[e>>2]=0;f[k>>2]=0;f[i>>2]=0;f[j>>2]=0}}else d=Oa(a,c,m,p,n)|0;e=f[a>>2]|0;f[a>>2]=e|l;if(o|0)sd(a);d=(e&32|0)==0?d:-1}u=r;return d|0}function pb(a,c,e,g){a=a|0;c=c|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=u;u=u+64|0;n=p;m=f[a>>2]|0;o=a+(f[m+-8>>2]|0)|0;m=f[m+-4>>2]|0;f[n>>2]=e;f[n+4>>2]=a;f[n+8>>2]=c;f[n+12>>2]=g;a=n+16|0;c=n+20|0;g=n+24|0;h=n+28|0;i=n+32|0;j=n+40|0;k=a;l=k+36|0;do{f[k>>2]=0;k=k+4|0}while((k|0)<(l|0));d[a+36>>1]=0;b[a+38>>0]=0;a:do if(Sc(m,e,0)|0){f[n+48>>2]=1;Ka[f[(f[m>>2]|0)+20>>2]&3](m,n,o,o,1,0);a=(f[g>>2]|0)==1?o:0}else{Fa[f[(f[m>>2]|0)+24>>2]&3](m,n,o,1,0);switch(f[n+36>>2]|0){case 0:{a=(f[j>>2]|0)==1&(f[h>>2]|0)==1&(f[i>>2]|0)==1?f[c>>2]|0:0;break a}case 1:break;default:{a=0;break a}}if((f[g>>2]|0)!=1?!((f[j>>2]|0)==0&(f[h>>2]|0)==1&(f[i>>2]|0)==1):0){a=0;break}a=f[a>>2]|0}while(0);u=p;return a|0}function qb(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;j=u;u=u+544|0;h=j+16|0;b=j;e=j+32|0;g=a+8|0;c=f[g>>2]|0;if((c+-1|0)>>>0>=8192){f[b>>2]=866;f[b+4>>2]=3006;f[b+8>>2]=1257;vc(e,812,b)|0;Ub(e)|0}f[a>>2]=c;d=a+20|0;b=f[d>>2]|0;if(!b){b=Db(180,0)|0;if(!b)b=0;else{i=b+164|0;f[i>>2]=0;f[i+4>>2]=0;f[i+8>>2]=0;f[i+12>>2]=0}f[d>>2]=b;i=f[a>>2]|0}else i=c;if(!(f[g>>2]|0)){f[h>>2]=866;f[h+4>>2]=910;f[h+8>>2]=1497;vc(e,812,h)|0;Ub(e)|0;h=f[a>>2]|0}else h=i;e=f[a+4>>2]|0;if(h>>>0>16){c=h;d=0}else{a=0;a=Qa(b,i,e,a)|0;u=j;return a|0}while(1){g=d+1|0;if(c>>>0>3){c=c>>>1;d=g}else break}a=d+2+((g|0)!=32&1<>>0>>0&1)|0;a=(a>>>0<11?a:11)&255;a=Qa(b,i,e,a)|0;u=j;return a|0}function rb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=(f[a>>2]|0)+1794895138|0;h=Tc(f[a+8>>2]|0,o)|0;e=Tc(f[a+12>>2]|0,o)|0;g=Tc(f[a+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=c-(h<<2)|0,e>>>0>>0&g>>>0>>0):0)?((g|e)&3|0)==0:0){n=e>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;e=Tc(f[a+(g<<2)>>2]|0,o)|0;g=Tc(f[a+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&e>>>0<(c-g|0)>>>0)){e=0;break a}if(b[a+(g+e)>>0]|0){e=0;break a}e=_b(d,a+g|0)|0;if(!e)break;e=(e|0)<0;if((h|0)==1){e=0;break a}else{l=e?l:k;h=e?j:h-j|0}}e=i+m|0;g=Tc(f[a+(e<<2)>>2]|0,o)|0;e=Tc(f[a+(e+1<<2)>>2]|0,o)|0;if(e>>>0>>0&g>>>0<(c-e|0)>>>0)e=(b[a+(e+g)>>0]|0)==0?a+e|0:0;else e=0}else e=0;while(0);return e|0}function sb(a){a=a|0;var b=0,c=0,d=0,e=0,g=0,h=0,i=0,j=0;i=u;u=u+576|0;g=i+48|0;h=i+32|0;d=i+16|0;c=i;e=i+64|0;b=f[a+168>>2]|0;do if(b|0){j=f[b+-4>>2]|0;b=b+-8|0;if(!((j|0)!=0?(j|0)==(~f[b>>2]|0):0)){f[c>>2]=866;f[c+4>>2]=651;f[c+8>>2]=1579;vc(e,812,c)|0;Ub(e)|0}if(!(b&7)){Nb(b,0,0,1,0)|0;break}else{f[d>>2]=866;f[d+4>>2]=2506;f[d+8>>2]=1232;vc(e,812,d)|0;Ub(e)|0;break}}while(0);b=f[a+176>>2]|0;if(!b){u=i;return}j=f[b+-4>>2]|0;b=b+-8|0;if(!((j|0)!=0?(j|0)==(~f[b>>2]|0):0)){f[h>>2]=866;f[h+4>>2]=651;f[h+8>>2]=1579;vc(e,812,h)|0;Ub(e)|0}if(!(b&7)){Nb(b,0,0,1,0)|0;u=i;return}else{f[g>>2]=866;f[g+4>>2]=2506;f[g+8>>2]=1232;vc(e,812,g)|0;Ub(e)|0;u=i;return}}function tb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if(!((a|0)!=0&c>>>0>73&(d|0)!=0)){d=0;return d|0}if((f[d>>2]|0)!=40){d=0;return d|0}if(((h[a>>0]|0)<<8|(h[a+1>>0]|0)|0)!=18552){d=0;return d|0}if(((h[a+2>>0]|0)<<8|(h[a+3>>0]|0))>>>0<74){d=0;return d|0}if(((h[a+7>>0]|0)<<16|(h[a+6>>0]|0)<<24|(h[a+8>>0]|0)<<8|(h[a+9>>0]|0))>>>0>c>>>0){d=0;return d|0}f[d+4>>2]=(h[a+12>>0]|0)<<8|(h[a+13>>0]|0);f[d+8>>2]=(h[a+14>>0]|0)<<8|(h[a+15>>0]|0);f[d+12>>2]=h[a+16>>0];f[d+16>>2]=h[a+17>>0];c=a+18|0;e=d+32|0;f[e>>2]=h[c>>0];f[e+4>>2]=0;c=b[c>>0]|0;f[d+20>>2]=c<<24>>24==0|c<<24>>24==9?8:16;f[d+24>>2]=(h[a+26>>0]|0)<<16|(h[a+25>>0]|0)<<24|(h[a+27>>0]|0)<<8|(h[a+28>>0]|0);f[d+28>>2]=(h[a+30>>0]|0)<<16|(h[a+29>>0]|0)<<24|(h[a+31>>0]|0)<<8|(h[a+32>>0]|0);d=1;return d|0}function ub(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0;l=u;u=u+544|0;j=l+16|0;c=l;i=l+32|0;if(b>>>0>=33){f[c>>2]=866;f[c+4>>2]=3199;f[c+8>>2]=1350;vc(i,812,c)|0;Ub(i)|0}k=a+20|0;c=f[k>>2]|0;if((c|0)>=(b|0)){e=a+16|0;g=e;e=f[e>>2]|0;i=c;j=32-b|0;j=e>>>j;e=e<>2]=e;b=i-b|0;f[k>>2]=b;u=l;return j|0}e=a+4|0;g=a+8|0;d=a+16|0;do{a=f[e>>2]|0;if((a|0)==(f[g>>2]|0))a=0;else{f[e>>2]=a+1;a=h[a>>0]|0}c=c+8|0;f[k>>2]=c;if((c|0)>=33){f[j>>2]=866;f[j+4>>2]=3208;f[j+8>>2]=1366;vc(i,812,j)|0;Ub(i)|0;c=f[k>>2]|0}a=a<<32-c|f[d>>2];f[d>>2]=a}while((c|0)<(b|0));j=32-b|0;j=a>>>j;i=a<>2]=i;b=c-b|0;f[k>>2]=b;u=l;return j|0}function vb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;h=c&255;e=(d|0)!=0;a:do if(e&(a&3|0)!=0){g=c&255;while(1){if((b[a>>0]|0)==g<<24>>24){i=6;break a}a=a+1|0;d=d+-1|0;e=(d|0)!=0;if(!(e&(a&3|0)!=0)){i=5;break}}}else i=5;while(0);if((i|0)==5)if(e)i=6;else d=0;b:do if((i|0)==6){g=c&255;if((b[a>>0]|0)!=g<<24>>24){e=X(h,16843009)|0;c:do if(d>>>0>3)while(1){h=f[a>>2]^e;if((h&-2139062144^-2139062144)&h+-16843009|0)break;a=a+4|0;d=d+-4|0;if(d>>>0<=3){i=11;break c}}else i=11;while(0);if((i|0)==11)if(!d){d=0;break}while(1){if((b[a>>0]|0)==g<<24>>24)break b;a=a+1|0;d=d+-1|0;if(!d){d=0;break}}}}while(0);return (d|0?a:0)|0}function wb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var g=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+528|0;l=m;k=m+16|0;i=f[a+88>>2]|0;j=(h[i+70+(e<<2)+1>>0]|0)<<16|(h[i+70+(e<<2)>>0]|0)<<24|(h[i+70+(e<<2)+2>>0]|0)<<8|(h[i+70+(e<<2)+3>>0]|0);g=e+1|0;if(g>>>0<(h[i+16>>0]|0)>>>0)g=(h[i+70+(g<<2)+1>>0]|0)<<16|(h[i+70+(g<<2)>>0]|0)<<24|(h[i+70+(g<<2)+2>>0]|0)<<8|(h[i+70+(g<<2)+3>>0]|0);else g=f[a+8>>2]|0;if(g>>>0>j>>>0){k=a+4|0;k=f[k>>2]|0;k=k+j|0;l=g-j|0;l=jb(a,k,l,b,c,d,e)|0;u=m;return l|0}f[l>>2]=866;f[l+4>>2]=3694;f[l+8>>2]=1508;vc(k,812,l)|0;Ub(k)|0;k=a+4|0;k=f[k>>2]|0;k=k+j|0;l=g-j|0;l=jb(a,k,l,b,c,d,e)|0;u=m;return l|0}function xb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;if(((!((b|0)==0|c>>>0<74)?((h[b>>0]|0)<<8|(h[b+1>>0]|0)|0)==18552:0)?((h[b+2>>0]|0)<<8|(h[b+3>>0]|0))>>>0>=74:0)?((h[b+7>>0]|0)<<16|(h[b+6>>0]|0)<<24|(h[b+8>>0]|0)<<8|(h[b+9>>0]|0))>>>0<=c>>>0:0){d=a+88|0;f[d>>2]=b;f[a+4>>2]=b;f[a+8>>2]=c;if(!(lb(a)|0)){e=0;return e|0}b=f[d>>2]|0;if((h[b+39>>0]|0)<<8|(h[b+40>>0]|0)){if(ab(a)|0?Xa(a)|0:0){b=f[d>>2]|0;e=11}}else e=11;if((e|0)==11){if(!((h[b+55>>0]|0)<<8|(h[b+56>>0]|0))){e=1;return e|0}if(eb(a)|0?Wa(a)|0:0){e=1;return e|0}}e=0;return e|0}f[a+88>>2]=0;e=0;return e|0}function yb(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,i=0,j=0,k=0,l=0;l=u;u=u+528|0;i=l;g=l+16|0;if(!b){k=0;u=l;return k|0}if(b>>>0<=16){k=ub(a,b)|0;u=l;return k|0}j=ub(a,b+-16|0)|0;k=a+20|0;b=f[k>>2]|0;if((b|0)<16){d=a+4|0;e=a+8|0;c=a+16|0;do{a=f[d>>2]|0;if((a|0)==(f[e>>2]|0))a=0;else{f[d>>2]=a+1;a=h[a>>0]|0}b=b+8|0;f[k>>2]=b;if((b|0)>=33){f[i>>2]=866;f[i+4>>2]=3208;f[i+8>>2]=1366;vc(g,812,i)|0;Ub(g)|0;b=f[k>>2]|0}a=a<<32-b|f[c>>2];f[c>>2]=a}while((b|0)<16)}else{a=a+16|0;c=a;a=f[a>>2]|0}f[c>>2]=a<<16;f[k>>2]=b+-16;k=a>>>16|j<<16;u=l;return k|0}function zb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0;e=d+16|0;g=f[e>>2]|0;if(!g)if(!(Zb(d)|0)){g=f[e>>2]|0;h=5}else e=0;else h=5;a:do if((h|0)==5){j=d+20|0;i=f[j>>2]|0;e=i;if((g-i|0)>>>0>>0){e=Ea[f[d+36>>2]&7](d,a,c)|0;break}b:do if((b[d+75>>0]|0)>-1){i=c;while(1){if(!i){h=0;g=a;break b}g=i+-1|0;if((b[a+g>>0]|0)==10)break;else i=g}e=Ea[f[d+36>>2]&7](d,a,i)|0;if(e>>>0>>0)break a;h=i;g=a+i|0;c=c-i|0;e=f[j>>2]|0}else{h=0;g=a}while(0);kb(e|0,g|0,c|0)|0;f[j>>2]=(f[j>>2]|0)+c;e=h+c|0}while(0);return e|0}function Ab(a,c,d){a=a|0;c=c|0;d=d|0;do if(a){if(c>>>0<128){b[a>>0]=c;a=1;break}d=(ld()|0)+188|0;if(!(f[f[d>>2]>>2]|0))if((c&-128|0)==57216){b[a>>0]=c;a=1;break}else{a=jd()|0;f[a>>2]=84;a=-1;break}if(c>>>0<2048){b[a>>0]=c>>>6|192;b[a+1>>0]=c&63|128;a=2;break}if(c>>>0<55296|(c&-8192|0)==57344){b[a>>0]=c>>>12|224;b[a+1>>0]=c>>>6&63|128;b[a+2>>0]=c&63|128;a=3;break}if((c+-65536|0)>>>0<1048576){b[a>>0]=c>>>18|240;b[a+1>>0]=c>>>12&63|128;b[a+2>>0]=c>>>6&63|128;b[a+3>>0]=c&63|128;a=4;break}else{a=jd()|0;f[a>>2]=84;a=-1;break}}else a=1;while(0);return a|0}function Bb(){var a=0,b=0,c=0,d=0,e=0,g=0,h=0,i=0;e=u;u=u+48|0;h=e+32|0;c=e+24|0;i=e+16|0;g=e;e=e+36|0;a=rc()|0;if(a|0?(d=f[a>>2]|0,d|0):0){a=d+48|0;b=f[a>>2]|0;a=f[a+4>>2]|0;if(!((b&-256|0)==1126902528&(a|0)==1129074247)){f[c>>2]=4168;Ac(4118,c)}if((b|0)==1126902529&(a|0)==1129074247)a=f[d+44>>2]|0;else a=d+80|0;f[e>>2]=a;d=f[d>>2]|0;a=f[d+4>>2]|0;if(Ea[f[(f[2]|0)+16>>2]&7](8,d,e)|0){i=f[e>>2]|0;i=Ha[f[(f[i>>2]|0)+8>>2]&1](i)|0;f[g>>2]=4168;f[g+4>>2]=a;f[g+8>>2]=i;Ac(4032,g)}else{f[i>>2]=4168;f[i+4>>2]=a;Ac(4077,i)}}Ac(4156,h)}function Cb(a){a=a|0;var c=0,d=0,e=0,g=0,h=0;h=u;u=u+544|0;g=h+16|0;d=h;e=h+32|0;c=f[a+20>>2]|0;do if(c|0){sb(c);if(!(c&7)){Nb(c,0,0,1,0)|0;break}else{f[d>>2]=866;f[d+4>>2]=2506;f[d+8>>2]=1232;vc(e,812,d)|0;Ub(e)|0;break}}while(0);c=a+4|0;d=f[c>>2]|0;if(!d){g=a+16|0;b[g>>0]=0;u=h;return}if(!(d&7))Nb(d,0,0,1,0)|0;else{f[g>>2]=866;f[g+4>>2]=2506;f[g+8>>2]=1232;vc(e,812,g)|0;Ub(e)|0}f[c>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0;g=a+16|0;b[g>>0]=0;u=h;return}function Db(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,g=0,h=0,i=0,j=0;j=u;u=u+560|0;i=j+32|0;h=j+16|0;c=j;g=j+48|0;e=j+44|0;d=a+3&-4;d=d|0?d:4;if(d>>>0>2147418112){f[c>>2]=866;f[c+4>>2]=2506;f[c+8>>2]=1103;vc(g,812,c)|0;Ub(g)|0;i=0;u=j;return i|0}f[e>>2]=d;a=Nb(0,d,e,1,0)|0;c=f[e>>2]|0;if(b|0)f[b>>2]=c;if(!((a|0)==0|c>>>0>>0)){if(a&7){f[i>>2]=866;f[i+4>>2]=2533;f[i+8>>2]=1156;vc(g,812,i)|0;Ub(g)|0}}else{f[h>>2]=866;f[h+4>>2]=2506;f[h+8>>2]=1129;vc(g,812,h)|0;Ub(g)|0;a=0}i=a;u=j;return i|0}function Eb(a){a=a|0;var c=0,d=0,e=0,g=0,h=0,i=0;i=u;u=u+544|0;h=i+16|0;e=i;g=i+32|0;f[a>>2]=0;c=a+4|0;d=f[c>>2]|0;if(d|0){if(!(d&7))Nb(d,0,0,1,0)|0;else{f[e>>2]=866;f[e+4>>2]=2506;f[e+8>>2]=1232;vc(g,812,e)|0;Ub(g)|0}f[c>>2]=0;f[a+8>>2]=0;f[a+12>>2]=0}b[a+16>>0]=0;a=a+20|0;c=f[a>>2]|0;if(!c){u=i;return}sb(c);if(!(c&7))Nb(c,0,0,1,0)|0;else{f[h>>2]=866;f[h+4>>2]=2506;f[h+8>>2]=1232;vc(g,812,h)|0;Ub(g)|0}f[a>>2]=0;u=i;return}function Fb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=u;u=u+128|0;g=m+124|0;l=m;h=l;i=604;j=h+124|0;do{f[h>>2]=f[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));if((c+-1|0)>>>0>2147483646)if(!c){a=g;c=1;k=4}else{c=jd()|0;f[c>>2]=75;c=-1}else k=4;if((k|0)==4){k=-2-a|0;k=c>>>0>k>>>0?k:c;f[l+48>>2]=k;g=l+20|0;f[g>>2]=a;f[l+44>>2]=a;c=a+k|0;a=l+16|0;f[a>>2]=c;f[l+28>>2]=c;c=ob(l,d,e)|0;if(k){l=f[g>>2]|0;b[l+(((l|0)==(f[a>>2]|0))<<31>>31)>>0]=0}}u=m;return c|0}function Gb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0,j=0,k=0;k=u;u=u+560|0;j=k+32|0;g=k+16|0;e=k;h=k+48|0;i=k+44|0;if(a&7|0){f[e>>2]=866;f[e+4>>2]=2506;f[e+8>>2]=1210;vc(h,812,e)|0;Ub(h)|0;j=0;u=k;return j|0}if(b>>>0>2147418112){f[g>>2]=866;f[g+4>>2]=2506;f[g+8>>2]=1103;vc(h,812,g)|0;Ub(h)|0;j=0;u=k;return j|0}f[i>>2]=b;a=Nb(a,b,i,d,0)|0;if(c|0)f[c>>2]=f[i>>2];if(a&7|0){f[j>>2]=866;f[j+4>>2]=2558;f[j+8>>2]=1156;vc(h,812,j)|0;Ub(h)|0}j=a;u=k;return j|0}function Hb(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0;do if(!(Sc(a,f[c+8>>2]|0,g)|0)){if(Sc(a,f[c>>2]|0,g)|0){a=c+32|0;if((f[c+16>>2]|0)!=(d|0)?(h=c+20|0,(f[h>>2]|0)!=(d|0)):0){f[a>>2]=e;f[h>>2]=d;e=c+40|0;f[e>>2]=(f[e>>2]|0)+1;if((f[c+36>>2]|0)==1?(f[c+24>>2]|0)==2:0)b[c+54>>0]=1;f[c+44>>2]=4;break}if((e|0)==1)f[a>>2]=1}}else jc(0,c,d,e);while(0);return}function Ib(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0,h=0,i=0;h=a+d|0;c=c&255;if((d|0)>=67){while(a&3){b[a>>0]=c;a=a+1|0}e=h&-4|0;g=e-64|0;i=c|c<<8|c<<16|c<<24;while((a|0)<=(g|0)){f[a>>2]=i;f[a+4>>2]=i;f[a+8>>2]=i;f[a+12>>2]=i;f[a+16>>2]=i;f[a+20>>2]=i;f[a+24>>2]=i;f[a+28>>2]=i;f[a+32>>2]=i;f[a+36>>2]=i;f[a+40>>2]=i;f[a+44>>2]=i;f[a+48>>2]=i;f[a+52>>2]=i;f[a+56>>2]=i;f[a+60>>2]=i;a=a+64|0}while((a|0)<(e|0)){f[a>>2]=i;a=a+4|0}}while((a|0)<(h|0)){b[a>>0]=c;a=a+1|0}return h-d|0}function Jb(a,c,d,e,g){a=a|0;c=c|0;d=d|0;e=e|0;g=g|0;var h=0,i=0,j=0,k=0;b[c+53>>0]=1;do if((f[c+4>>2]|0)==(e|0)){b[c+52>>0]=1;e=c+16|0;h=f[e>>2]|0;j=c+54|0;k=c+48|0;i=c+24|0;a=c+36|0;if(!h){f[e>>2]=d;f[i>>2]=g;f[a>>2]=1;if(!((f[k>>2]|0)==1&(g|0)==1))break;b[j>>0]=1;break}if((h|0)!=(d|0)){f[a>>2]=(f[a>>2]|0)+1;b[j>>0]=1;break}a=f[i>>2]|0;if((a|0)==2){f[i>>2]=g;a=g}if((f[k>>2]|0)==1&(a|0)==1)b[j>>0]=1}while(0);return}function Kb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0,h=0;h=u;u=u+64|0;e=h;if(!(Sc(a,b,0)|0))if((b|0)!=0?(g=pb(b,32,16,0)|0,(g|0)!=0):0){b=e+4|0;d=b+52|0;do{f[b>>2]=0;b=b+4|0}while((b|0)<(d|0));f[e>>2]=g;f[e+8>>2]=a;f[e+12>>2]=-1;f[e+48>>2]=1;La[f[(f[g>>2]|0)+28>>2]&3](g,e,f[c>>2]|0,1);if((f[e+24>>2]|0)==1){f[c>>2]=f[e+16>>2];b=1}else b=0}else b=0;else b=1;u=h;return b|0}function Lb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,i=0,j=0,k=0,l=0;l=u;u=u+16|0;j=l;k=c&255;b[j>>0]=k;e=a+16|0;g=f[e>>2]|0;if(!g)if(!(Zb(a)|0)){g=f[e>>2]|0;i=4}else d=-1;else i=4;do if((i|0)==4){i=a+20|0;e=f[i>>2]|0;if(e>>>0>>0?(d=c&255,(d|0)!=(b[a+75>>0]|0)):0){f[i>>2]=e+1;b[e>>0]=k;break}if((Ea[f[a+36>>2]&7](a,j,1)|0)==1)d=h[j>>0]|0;else d=-1}while(0);u=l;return d|0}function Mb(a,c){a=a|0;c=c|0;var d=0,e=0,g=0,h=0,i=0,j=0,k=0;j=a&255;d=a&255;if((f[c+76>>2]|0)>=0?(td(c)|0)!=0:0){if((d|0)!=(b[c+75>>0]|0)?(h=c+20|0,i=f[h>>2]|0,i>>>0<(f[c+16>>2]|0)>>>0):0){f[h>>2]=i+1;b[i>>0]=j}else d=Lb(c,a)|0;sd(c)}else k=3;do if((k|0)==3){if((d|0)!=(b[c+75>>0]|0)?(e=c+20|0,g=f[e>>2]|0,g>>>0<(f[c+16>>2]|0)>>>0):0){f[e>>2]=g+1;b[g>>0]=j;break}d=Lb(c,a)|0}while(0);return d|0}function Nb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;do if(!a){b=Ma(b)|0;if(c){if(!b)a=0;else a=uc(b)|0;f[c>>2]=a}}else{if(!b){Ta(a);if(!c){b=0;break}f[c>>2]=0;b=0;break}if(d){b=Sb(a,b)|0;a=(b|0)==0?a:b}else b=0;if(c){e=uc(a)|0;f[c>>2]=e}}while(0);return b|0}function Ob(a){a=a|0;var c=0,d=0,e=0;e=a;a:do if(!(e&3))d=4;else{c=e;while(1){if(!(b[a>>0]|0)){a=c;break a}a=a+1|0;c=a;if(!(c&3)){d=4;break}}}while(0);if((d|0)==4){while(1){c=f[a>>2]|0;if(!((c&-2139062144^-2139062144)&c+-16843009))a=a+4|0;else break}if((c&255)<<24>>24)do a=a+1|0;while((b[a>>0]|0)!=0)}return a-e|0}function Pb(a,b){a=+a;b=b|0;var c=0,d=0,e=0;p[s>>3]=a;c=f[s>>2]|0;d=f[s+4>>2]|0;e=zc(c|0,d|0,52)|0;switch(e&2047){case 0:{if(a!=0.0){a=+Pb(a*18446744073709551616.0,b);c=(f[b>>2]|0)+-64|0}else c=0;f[b>>2]=c;break}case 2047:break;default:{f[b>>2]=(e&2047)+-1022;f[s>>2]=c;f[s+4>>2]=d&-2146435073|1071644672;a=+p[s>>3]}}return +a}function Qb(a,c){a=a|0;c=c|0;var d=0,e=0;e=0;while(1){if((h[2140+e>>0]|0)==(a|0)){a=2;break}d=e+1|0;if((d|0)==87){d=2228;e=87;a=5;break}else e=d}if((a|0)==2)if(!e)d=2228;else{d=2228;a=5}if((a|0)==5)while(1){do{a=d;d=d+1|0}while((b[a>>0]|0)!=0);e=e+-1|0;if(!e)break;else a=5}return ed(d,f[c+20>>2]|0)|0}function Rb(a,c,d){a=a|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&a>>>0>4294967295){while(1){e=mc(a|0,c|0,10,0)|0;d=d+-1|0;b[d>>0]=e&255|48;e=a;a=Uc(a|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=I}c=a}else c=a;if(c)while(1){d=d+-1|0;b[d>>0]=(c>>>0)%10|0|48;if(c>>>0<10)break;else c=(c>>>0)/10|0}return d|0}function Sb(a,b){a=a|0;b=b|0;var c=0,d=0;if(!a){b=Ma(b)|0;return b|0}if(b>>>0>4294967231){b=jd()|0;f[b>>2]=12;b=0;return b|0}c=_a(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(c|0){b=c+8|0;return b|0}c=Ma(b)|0;if(!c){b=0;return b|0}d=f[a+-4>>2]|0;d=(d&-8)-((d&3|0)==0?8:4)|0;kb(c|0,a|0,(d>>>0>>0?d:b)|0)|0;Ta(a);b=c;return b|0}function Tb(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;var g=0,h=0,i=0;a=c+16|0;g=f[a>>2]|0;h=c+36|0;i=c+24|0;do if(g){if((g|0)!=(d|0)){f[h>>2]=(f[h>>2]|0)+1;f[i>>2]=2;b[c+54>>0]=1;break}if((f[i>>2]|0)==2)f[i>>2]=e}else{f[a>>2]=d;f[i>>2]=e;f[h>>2]=1}while(0);return}function Ub(a){a=a|0;var c=0,d=0,e=0,g=0;e=f[119]|0;if((f[e+76>>2]|0)>-1)g=td(e)|0;else g=0;do if((Mc(a,e)|0)<0)a=1;else{if((b[e+75>>0]|0)!=10?(c=e+20|0,d=f[c>>2]|0,d>>>0<(f[e+16>>2]|0)>>>0):0){f[c>>2]=d+1;b[d>>0]=10;a=0;break}a=(Lb(e,10)|0)<0}while(0);if(g|0)sd(e);return a<<31>>31|0}function Vb(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;if(Sc(a,f[b+8>>2]|0,g)|0)Jb(0,b,c,d,e);else{a=f[a+8>>2]|0;Ka[f[(f[a>>2]|0)+20>>2]&3](a,b,c,d,e,g)}return}function Wb(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0,g=0;g=u;u=u+256|0;f=g;if((c|0)>(d|0)&(e&73728|0)==0){e=c-d|0;Ib(f|0,b|0,(e>>>0<256?e:256)|0)|0;if(e>>>0>255){b=c-d|0;do{Nc(a,f,256);e=e+-256|0}while(e>>>0>255);e=b&255}Nc(a,f,e)}u=g;return}function Xb(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Sc(a,f[b+8>>2]|0,0)|0)Tb(0,b,c,d);else{a=f[a+8>>2]|0;La[f[(f[a>>2]|0)+28>>2]&3](a,b,c,d)}return}function Yb(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0,g=0;e=u;u=u+32|0;g=e;d=e+20|0;f[g>>2]=f[a+60>>2];f[g+4>>2]=0;f[g+8>>2]=b;f[g+12>>2]=d;f[g+16>>2]=c;if((Ic(xa(140,g|0)|0)|0)<0){f[d>>2]=-1;a=-1}else a=f[d>>2]|0;u=e;return a|0}function Zb(a){a=a|0;var c=0,d=0;c=a+74|0;d=b[c>>0]|0;b[c>>0]=d+255|d;c=f[a>>2]|0;if(!(c&8)){f[a+8>>2]=0;f[a+4>>2]=0;d=f[a+44>>2]|0;f[a+28>>2]=d;f[a+20>>2]=d;f[a+16>>2]=d+(f[a+48>>2]|0);a=0}else{f[a>>2]=c|32;a=-1}return a|0}function _b(a,c){a=a|0;c=c|0;var d=0,e=0;d=b[a>>0]|0;e=b[c>>0]|0;if(d<<24>>24==0?1:d<<24>>24!=e<<24>>24)a=e;else{do{a=a+1|0;c=c+1|0;d=b[a>>0]|0;e=b[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));a=e}return (d&255)-(a&255)|0}function $b(a,c,d){a=a|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+32|0;e=g;f[a+36>>2]=1;if((f[a>>2]&64|0)==0?(f[e>>2]=f[a+60>>2],f[e+4>>2]=21523,f[e+8>>2]=g+16,na(54,e|0)|0):0)b[a+75>>0]=-1;e=mb(a,c,d)|0;u=g;return e|0}function ac(a){a=a|0;var b=0,c=0;c=a+15&-16|0;b=f[r>>2]|0;a=b+c|0;if((c|0)>0&(a|0)<(b|0)|(a|0)<0){da()|0;ra(12);return -1}f[r>>2]=a;if((a|0)>(ca()|0)?(ba()|0)==0:0){f[r>>2]=b;ra(12);return -1}return b|0}function bc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;e=X(c,b)|0;c=(b|0)==0?0:c;if((f[d+76>>2]|0)>-1){g=(td(d)|0)==0;a=zb(a,e,d)|0;if(!g)sd(d)}else a=zb(a,e,d)|0;if((a|0)!=(e|0))c=(a>>>0)/(b>>>0)|0;return c|0}function cc(a,b,c,d,e,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;g=g|0;if(Sc(a,f[b+8>>2]|0,g)|0)Jb(0,b,c,d,e);return}function dc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if(Sc(a,f[b+8>>2]|0,0)|0)Tb(0,b,c,d);return}function ec(a){a=a|0;var c=0,d=0,e=0;d=f[a>>2]|0;e=(b[d>>0]|0)+-48|0;if(e>>>0<10){c=0;do{c=e+(c*10|0)|0;d=d+1|0;f[a>>2]=d;e=(b[d>>0]|0)+-48|0}while(e>>>0<10)}else c=0;return c|0}function fc(){var a=0,b=0;a=rc()|0;if((a|0?(b=f[a>>2]|0,b|0):0)?(a=b+48|0,(f[a>>2]&-256|0)==1126902528?(f[a+4>>2]|0)==1129074247:0):0)Jc(f[b+12>>2]|0);Jc($c()|0)}function gc(a,c,d,e){a=a|0;c=c|0;d=d|0;e=e|0;if(!((a|0)==0&(c|0)==0))do{d=d+-1|0;b[d>>0]=h[2122+(a&15)>>0]|0|e;a=zc(a|0,c|0,4)|0;c=I}while(!((a|0)==0&(c|0)==0));return d|0}function hc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=u;u=u+16|0;d=e;f[d>>2]=f[c>>2];a=Ea[f[(f[a>>2]|0)+16>>2]&7](a,b,d)|0;if(a)f[c>>2]=f[d>>2];u=e;return a&1|0}function ic(a){a=a|0;var c=0;c=b[w+(a&255)>>0]|0;if((c|0)<8)return c|0;c=b[w+(a>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=b[w+(a>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (b[w+(a>>>24)>>0]|0)+24|0}function jc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;if((f[b+4>>2]|0)==(c|0)?(e=b+28|0,(f[e>>2]|0)!=1):0)f[e>>2]=d;return}function kc(a,c,d){a=a|0;c=c|0;d=d|0;if(!((a|0)==0&(c|0)==0))do{d=d+-1|0;b[d>>0]=a&7|48;a=zc(a|0,c|0,3)|0;c=I}while(!((a|0)==0&(c|0)==0));return d|0}function lc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=a+20|0;e=f[d>>2]|0;a=(f[a+16>>2]|0)-e|0;a=a>>>0>c>>>0?c:a;kb(e|0,b|0,a|0)|0;f[d>>2]=(f[d>>2]|0)+a;return c|0}function mc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,g=0;g=u;u=u+16|0;e=g|0;Za(a,b,c,d,e)|0;u=g;return (I=f[e+4>>2]|0,f[e>>2]|0)|0}function nc(a,b){a=a|0;b=b|0;var c=0,d=0;d=u;u=u+48|0;c=d;f[c>>2]=40;tb(a,b,c)|0;u=d;return f[c+32>>2]|0}function oc(a,b){a=a|0;b=b|0;var c=0,d=0;d=u;u=u+48|0;c=d;f[c>>2]=40;tb(a,b,c)|0;u=d;return f[c+12>>2]|0}function pc(a,b){a=a|0;b=b|0;var c=0,d=0;d=u;u=u+48|0;c=d;f[c>>2]=40;tb(a,b,c)|0;u=d;return f[c+8>>2]|0}function qc(a,b){a=a|0;b=b|0;var c=0,d=0;d=u;u=u+48|0;c=d;f[c>>2]=40;tb(a,b,c)|0;u=d;return f[c+4>>2]|0}function rc(){var a=0,b=0;a=u;u=u+16|0;if(!(ua(5136,2)|0)){b=ma(f[1285]|0)|0;u=a;return b|0}else Ac(4307,a);return 0}function sc(a){a=a|0;var b=0,c=0;b=u;u=u+16|0;c=b;a=pd(f[a+60>>2]|0)|0;f[c>>2]=a;a=Ic(qa(6,c|0)|0)|0;u=b;return a|0}function tc(a){a=a|0;var b=0;b=u;u=u+16|0;Ta(a);if(!(oa(f[1285]|0,0)|0)){u=b;return}else Ac(4406,b)}function uc(a){a=a|0;var b=0;if(!a)return 0;else{b=f[a+-4>>2]|0;a=b&3;return ((a|0)==1?0:(b&-8)-((a|0)==0?8:4)|0)|0}return 0}function vc(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=u;u=u+16|0;e=d;f[e>>2]=c;c=Yc(a,b,e)|0;u=d;return c|0}function wc(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Ka[a&3](b|0,c|0,d|0,e|0,f|0,g|0)}function xc(){var a=0;a=u;u=u+16|0;if(!(wa(5140,6)|0)){u=a;return}else Ac(4356,a)}function yc(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){I=b<>>32-c;return a<>>c;return a>>>c|(b&(1<>>c-32|0}function Ac(a,b){a=a|0;b=b|0;var c=0;c=u;u=u+16|0;f[c>>2]=b;b=f[26]|0;ob(b,a,c)|0;Mb(10,b)|0;sa()}function Bc(){}function Cc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (I=d,a-c>>>0|0)|0}function Dc(a,b){a=a|0;b=b|0;if(!b)b=0;else b=rb(f[b>>2]|0,f[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Ec(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Fa[a&3](b|0,c|0,d|0,e|0,f|0)}function Fc(a){a=+a;var b=0;p[s>>3]=a;b=f[s>>2]|0;I=f[s+4>>2]|0;return b|0}function Gc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (I=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function Hc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;La[a&3](b|0,c|0,d|0,e|0)}function Ic(a){a=a|0;var b=0;if(a>>>0>4294963200){b=jd()|0;f[b>>2]=0-a;a=-1}return a|0}function Jc(a){a=a|0;var b=0;b=u;u=u+16|0;Ja[a&3]();Ac(4459,b)}function Kc(a){a=a|0;if(!a)a=0;else a=(pb(a,32,88,0)|0)!=0;return a&1|0}function Lc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ea[a&7](b|0,c|0,d|0)|0}function Mc(a,b){a=a|0;b=b|0;var c=0;c=Ob(a)|0;return ((bc(a,1,c,b)|0)!=(c|0))<<31>>31|0}function Nc(a,b,c){a=a|0;b=b|0;c=c|0;if(!(f[a>>2]&32))zb(b,c,a)|0;return}function Oc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Ia[a&0](b|0,c|0,d|0)}function Pc(a){a=a|0;var b=0;b=u;u=u+a|0;u=u+15&-16;return b|0}function Qc(a){a=a|0;var b=0;b=(ld()|0)+188|0;return Qb(a,f[b>>2]|0)|0}function Rc(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Ab(a,b,0)|0;return a|0}function Sc(a,b,c){a=a|0;b=b|0;c=c|0;return (a|0)==(b|0)|0}function Tc(a,b){a=a|0;b=b|0;var c=0;c=Vc(a|0)|0;return ((b|0)==0?a:c)|0}function Uc(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Za(a,b,c,d,0)|0}function Vc(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function Wc(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;$(6)}function Xc(a,b){a=a|0;b=b|0;if(!x){x=a;y=b}}function Yc(a,b,c){a=a|0;b=b|0;c=c|0;return Fb(a,2147483647,b,c)|0}function Zc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;$(1)}function _c(a){a=a|0;sd(a);nd(a);return}function $c(){var a=0;a=f[182]|0;f[182]=a+0;return a|0}function ad(a){a=a|0;ta(a|0)|0;fc()}function bd(a,b){a=a|0;b=b|0;return Ha[a&1](b|0)|0}function cd(a,b){a=a|0;b=b|0;u=a;v=b}function dd(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;$(7)}function ed(a,b){a=a|0;b=b|0;return Dc(a,b)|0}function fd(a,b){a=a|0;b=b|0;Ga[a&7](b|0)}function gd(a,b,c){a=a|0;b=b|0;c=c|0;$(0);return 0}function hd(a,b){a=+a;b=b|0;return +(+Pb(a,b))}function id(a,b,c){a=a|0;b=b|0;c=c|0;$(4)}function jd(){return (ld()|0)+64|0}function kd(a){a=a|0;Ja[a&3]()}function ld(){return xd()|0}function md(a){a=a|0;u=a}function nd(a){a=a|0;Ta(a);return}function od(a){a=a|0;I=a}function pd(a){a=a|0;return a|0}function qd(){return 5072}function rd(a){a=a|0;$(3);return 0}function sd(a){a=a|0;return}function td(a){a=a|0;return 0}function ud(){return I|0}function vd(){return u|0}function wd(a){a=a|0;$(2)}function xd(){return 232}function yd(){$(5)} - -// EMSCRIPTEN_END_FUNCS -var Ea=[gd,mb,Yb,$b,lc,Kb,gd,gd];var Fa=[Zc,Hb,nb,Zc];var Ga=[wd,sd,_c,sd,sd,_c,tc,wd];var Ha=[rd,sc];var Ia=[id];var Ja=[yd,Bb,xc,yd];var Ka=[Wc,cc,Vb,Wc];var La=[dd,dc,Xb,dd];return{stackSave:vd,_i64Subtract:Cc,_crn_get_bytes_per_block:ib,setThrew:Xc,dynCall_viii:Oc,_bitshift64Lshr:zc,_bitshift64Shl:yc,dynCall_viiii:Hc,setTempRet0:od,_crn_decompress:$a,_memset:Ib,_sbrk:ac,_memcpy:kb,stackAlloc:Pc,_crn_get_height:pc,dynCall_vi:fd,getTempRet0:ud,_crn_get_levels:oc,_crn_get_uncompressed_size:hb,_i64Add:Gc,dynCall_iiii:Lc,_emscripten_get_global_libc:qd,dynCall_ii:bd,___udivdi3:Uc,_llvm_bswap_i32:Vc,dynCall_viiiii:Ec,___cxa_can_catch:hc,_free:Ta,runPostSets:Bc,dynCall_viiiiii:wc,establishStackSpace:cd,___uremdi3:mc,___cxa_is_pointer_type:Kc,stackRestore:md,_malloc:Ma,_emscripten_replace_memory:Da,dynCall_v:kd,_crn_get_width:qc,_crn_get_dxt_format:nc}}) - - -// EMSCRIPTEN_END_ASM -(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var stackSave=Module["stackSave"]=asm["stackSave"];var getTempRet0=Module["getTempRet0"]=asm["getTempRet0"];var _memset=Module["_memset"]=asm["_memset"];var setThrew=Module["setThrew"]=asm["setThrew"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var setTempRet0=Module["setTempRet0"]=asm["setTempRet0"];var _crn_decompress=Module["_crn_decompress"]=asm["_crn_decompress"];var _crn_get_bytes_per_block=Module["_crn_get_bytes_per_block"]=asm["_crn_get_bytes_per_block"];var _sbrk=Module["_sbrk"]=asm["_sbrk"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var stackAlloc=Module["stackAlloc"]=asm["stackAlloc"];var _crn_get_height=Module["_crn_get_height"]=asm["_crn_get_height"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _crn_get_levels=Module["_crn_get_levels"]=asm["_crn_get_levels"];var _crn_get_uncompressed_size=Module["_crn_get_uncompressed_size"]=asm["_crn_get_uncompressed_size"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=asm["_emscripten_get_global_libc"];var ___udivdi3=Module["___udivdi3"]=asm["___udivdi3"];var _llvm_bswap_i32=Module["_llvm_bswap_i32"]=asm["_llvm_bswap_i32"];var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var _free=Module["_free"]=asm["_free"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var establishStackSpace=Module["establishStackSpace"]=asm["establishStackSpace"];var ___uremdi3=Module["___uremdi3"]=asm["___uremdi3"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var stackRestore=Module["stackRestore"]=asm["stackRestore"];var _malloc=Module["_malloc"]=asm["_malloc"];var _emscripten_replace_memory=Module["_emscripten_replace_memory"]=asm["_emscripten_replace_memory"];var _crn_get_width=Module["_crn_get_width"]=asm["_crn_get_width"];var _crn_get_dxt_format=Module["_crn_get_dxt_format"]=asm["_crn_get_dxt_format"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_viii=Module["dynCall_viii"]=asm["dynCall_viii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=Module["stackAlloc"];Runtime.stackSave=Module["stackSave"];Runtime.stackRestore=Module["stackRestore"];Runtime.establishStackSpace=Module["establishStackSpace"];Runtime.setTempRet0=Module["setTempRet0"];Runtime.getTempRet0=Module["getTempRet0"];Module["asm"]=asm;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"])run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(Module["_main"]&&shouldRunNow)Module["callMain"](args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status,implicit){if(implicit&&Module["noExitRuntime"]){return}if(Module["noExitRuntime"]){}else{ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(Module["onExit"])Module["onExit"](status)}if(ENVIRONMENT_IS_NODE){process["exit"](status)}Module["quit"](status,new ExitStatus(status))}Module["exit"]=Module.exit=exit;var abortDecorators=[];function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){Module.print(what);Module.printErr(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}Module["noExitRuntime"]=true;run() - -export default Module; diff --git a/Source/ThirdParty/msc_basis_transcoder.wasm b/Source/ThirdParty/msc_basis_transcoder.wasm new file mode 100644 index 00000000000..059d5e051cf Binary files /dev/null and b/Source/ThirdParty/msc_basis_transcoder.wasm differ diff --git a/Source/WorkersES6/transcodeCRNToDXT.js b/Source/WorkersES6/transcodeCRNToDXT.js deleted file mode 100644 index a6b756ffe48..00000000000 --- a/Source/WorkersES6/transcodeCRNToDXT.js +++ /dev/null @@ -1,140 +0,0 @@ -import CompressedTextureBuffer from "../Core/CompressedTextureBuffer.js"; -import defined from "../Core/defined.js"; -import PixelFormat from "../Core/PixelFormat.js"; -import RuntimeError from "../Core/RuntimeError.js"; -import crunch from "../ThirdParty/crunch.js"; -import createTaskProcessorWorker from "./createTaskProcessorWorker.js"; - -// Modified from texture-tester -// See: -// https://github.com/toji/texture-tester/blob/master/js/webgl-texture-util.js -// http://toji.github.io/texture-tester/ - -/** - * @license - * - * Copyright (c) 2014, Brandon Jones. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -// Taken from crnlib.h -var CRN_FORMAT = { - cCRNFmtInvalid: -1, - - cCRNFmtDXT1: 0, - // cCRNFmtDXT3 is not currently supported when writing to CRN - only DDS. - cCRNFmtDXT3: 1, - cCRNFmtDXT5: 2, - - // Crunch supports more formats than this, but we can't use them here. -}; - -// Mapping of Crunch formats to DXT formats. -var DXT_FORMAT_MAP = {}; -DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT1] = PixelFormat.RGB_DXT1; -DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT3] = PixelFormat.RGBA_DXT3; -DXT_FORMAT_MAP[CRN_FORMAT.cCRNFmtDXT5] = PixelFormat.RGBA_DXT5; - -var dst; -var dxtData; -var cachedDstSize = 0; - -// Copy an array of bytes into or out of the emscripten heap. -function arrayBufferCopy(src, dst, dstByteOffset, numBytes) { - var i; - var dst32Offset = dstByteOffset / 4; - var tail = numBytes % 4; - var src32 = new Uint32Array(src.buffer, 0, (numBytes - tail) / 4); - var dst32 = new Uint32Array(dst.buffer); - for (i = 0; i < src32.length; i++) { - dst32[dst32Offset + i] = src32[i]; - } - for (i = numBytes - tail; i < numBytes; i++) { - dst[dstByteOffset + i] = src[i]; - } -} - -/** - * @private - */ -function transcodeCRNToDXT(arrayBuffer, transferableObjects) { - // Copy the contents of the arrayBuffer into emscriptens heap. - var srcSize = arrayBuffer.byteLength; - var bytes = new Uint8Array(arrayBuffer); - var src = crunch._malloc(srcSize); - arrayBufferCopy(bytes, crunch.HEAPU8, src, srcSize); - - // Determine what type of compressed data the file contains. - var crnFormat = crunch._crn_get_dxt_format(src, srcSize); - var format = DXT_FORMAT_MAP[crnFormat]; - if (!defined(format)) { - throw new RuntimeError("Unsupported compressed format."); - } - - // Gather basic metrics about the DXT data. - var levels = crunch._crn_get_levels(src, srcSize); - var width = crunch._crn_get_width(src, srcSize); - var height = crunch._crn_get_height(src, srcSize); - - // Determine the size of the decoded DXT data. - var dstSize = 0; - var i; - for (i = 0; i < levels; ++i) { - dstSize += PixelFormat.compressedTextureSizeInBytes( - format, - width >> i, - height >> i - ); - } - - // Allocate enough space on the emscripten heap to hold the decoded DXT data - // or reuse the existing allocation if a previous call to this function has - // already acquired a large enough buffer. - if (cachedDstSize < dstSize) { - if (defined(dst)) { - crunch._free(dst); - } - dst = crunch._malloc(dstSize); - dxtData = new Uint8Array(crunch.HEAPU8.buffer, dst, dstSize); - cachedDstSize = dstSize; - } - - // Decompress the DXT data from the Crunch file into the allocated space. - crunch._crn_decompress(src, srcSize, dst, dstSize, 0, levels); - - // Release the crunch file data from the emscripten heap. - crunch._free(src); - - // Mipmaps are unsupported, so copy the level 0 texture - // When mipmaps are supported, a copy will still be necessary as dxtData is a view on the heap. - var length = PixelFormat.compressedTextureSizeInBytes(format, width, height); - - // Get a copy of the 0th mip level. dxtData will exceed length when there are more mip levels. - // Equivalent to dxtData.slice(0, length), which is not supported in IE11 - var level0DXTDataView = dxtData.subarray(0, length); - var level0DXTData = new Uint8Array(length); - level0DXTData.set(level0DXTDataView, 0); - - transferableObjects.push(level0DXTData.buffer); - return new CompressedTextureBuffer(format, width, height, level0DXTData); -} -export default createTaskProcessorWorker(transcodeCRNToDXT); diff --git a/Source/WorkersES6/transcodeKTX2.js b/Source/WorkersES6/transcodeKTX2.js new file mode 100644 index 00000000000..21898e0a200 --- /dev/null +++ b/Source/WorkersES6/transcodeKTX2.js @@ -0,0 +1,47 @@ +/* global require */ +import defined from "../Core/defined.js"; +import parseKTX2 from "../Scene/parseKTX2.js"; + +import createTaskProcessorWorker from "./createTaskProcessorWorker.js"; + +var transcoderModule; + +function transcode(parameters) { + var ktx2Buffer = parameters.ktx2Buffer; + var supportedTargetFormats = parameters.supportedTargetFormats; + return parseKTX2(ktx2Buffer, supportedTargetFormats, transcoderModule); +} + +function initWorker(compiledModule) { + transcoderModule = compiledModule; + transcoderModule.initTranscoders(); + + self.onmessage = createTaskProcessorWorker(transcode); + self.postMessage(true); +} + +function transcodeKTX2(event) { + var data = event.data; + + // Expect the first message to be to load a web assembly module + var wasmConfig = data.webAssemblyConfig; + if (defined(wasmConfig)) { + // Require and compile WebAssembly module, or use fallback if not supported + return require([wasmConfig.modulePath], function (mscBasisTranscoder) { + if (defined(wasmConfig.wasmBinaryFile)) { + if (!defined(mscBasisTranscoder)) { + mscBasisTranscoder = self.MSC_TRANSCODER; + } + + mscBasisTranscoder(wasmConfig).then(function (compiledModule) { + initWorker(compiledModule); + }); + } else { + return mscBasisTranscoder().then(function (transcoder) { + initWorker(transcoder); + }); + } + }); + } +} +export default transcodeKTX2; diff --git a/Specs/Core/loadCRNSpec.js b/Specs/Core/loadCRNSpec.js deleted file mode 100644 index f06ff27dfe9..00000000000 --- a/Specs/Core/loadCRNSpec.js +++ /dev/null @@ -1,538 +0,0 @@ -import { loadCRN } from "../../Source/Cesium.js"; -import { PixelFormat } from "../../Source/Cesium.js"; -import { Request } from "../../Source/Cesium.js"; -import { RequestErrorEvent } from "../../Source/Cesium.js"; -import { RequestScheduler } from "../../Source/Cesium.js"; -import { Resource } from "../../Source/Cesium.js"; - -describe("Core/loadCRN", function () { - var validCompressed = new Uint8Array([ - 72, - 120, - 0, - 74, - 227, - 123, - 0, - 0, - 0, - 138, - 92, - 167, - 0, - 4, - 0, - 4, - 1, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 74, - 0, - 0, - 22, - 0, - 1, - 0, - 0, - 96, - 0, - 0, - 12, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 29, - 0, - 0, - 108, - 0, - 0, - 0, - 137, - 0, - 10, - 96, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 4, - 9, - 130, - 0, - 0, - 0, - 0, - 0, - 0, - 109, - 4, - 0, - 0, - 198, - 96, - 128, - 0, - 0, - 0, - 0, - 0, - 26, - 80, - 0, - 0, - 6, - 96, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 51, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 128, - 1, - 152, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - ]); - var validCompressedMipmap = new Uint8Array([ - 72, - 120, - 0, - 82, - 183, - 141, - 0, - 0, - 0, - 148, - 151, - 24, - 0, - 4, - 0, - 4, - 3, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 82, - 0, - 0, - 22, - 0, - 1, - 0, - 0, - 104, - 0, - 0, - 12, - 0, - 1, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 29, - 0, - 0, - 116, - 0, - 0, - 0, - 145, - 0, - 0, - 0, - 146, - 0, - 0, - 0, - 147, - 0, - 130, - 97, - 0, - 0, - 0, - 0, - 0, - 4, - 35, - 37, - 0, - 3, - 48, - 0, - 0, - 0, - 0, - 0, - 0, - 8, - 200, - 0, - 198, - 96, - 128, - 0, - 0, - 0, - 0, - 0, - 26, - 80, - 0, - 0, - 6, - 96, - 0, - 0, - 0, - 0, - 0, - 0, - 16, - 0, - 51, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 128, - 1, - 152, - 0, - 0, - 0, - 0, - 0, - 0, - 4, - 0, - 0, - 0, - ]); - var fakeXHR; - - beforeEach(function () { - fakeXHR = jasmine.createSpyObj("XMLHttpRequest", [ - "send", - "open", - "setRequestHeader", - "abort", - "getAllResponseHeaders", - ]); - fakeXHR.simulateLoad = function (response) { - fakeXHR.simulateHttpResponse(200, response); - }; - fakeXHR.simulateError = function () { - fakeXHR.response = ""; - if (typeof fakeXHR.onerror === "function") { - fakeXHR.onerror(); - } - }; - fakeXHR.simulateHttpResponse = function (statusCode, response) { - fakeXHR.status = statusCode; - fakeXHR.response = response; - if (typeof fakeXHR.onload === "function") { - fakeXHR.onload(); - } - }; - - spyOn(window, "XMLHttpRequest").and.returnValue(fakeXHR); - }); - - it("throws with no url", function () { - expect(function () { - loadCRN(); - }).toThrowDeveloperError(); - }); - - it("creates and sends request without any custom headers", function () { - var testUrl = "http://example.invalid/testuri"; - loadCRN(testUrl); - - expect(fakeXHR.open).toHaveBeenCalledWith("GET", testUrl, true); - expect(fakeXHR.setRequestHeader).not.toHaveBeenCalled(); - expect(fakeXHR.send).toHaveBeenCalled(); - }); - - it("creates and sends request with custom headers with Resource", function () { - var testUrl = "http://example.invalid/testuri"; - var resource = new Resource({ - url: testUrl, - headers: { - Accept: "application/json", - "Cache-Control": "no-cache", - }, - }); - - loadCRN(resource); - - expect(fakeXHR.open).toHaveBeenCalledWith("GET", testUrl, true); - expect(fakeXHR.setRequestHeader.calls.count()).toEqual(2); - expect(fakeXHR.setRequestHeader).toHaveBeenCalledWith( - "Accept", - "application/json" - ); - expect(fakeXHR.setRequestHeader).toHaveBeenCalledWith( - "Cache-Control", - "no-cache" - ); - expect(fakeXHR.send).toHaveBeenCalled(); - }); - - it("returns a promise that rejects when the request errors", function () { - var testUrl = "http://example.invalid/testuri"; - var promise = loadCRN(testUrl); - - expect(promise).toBeDefined(); - - var resolvedValue; - var rejectedError; - promise.then( - function (value) { - resolvedValue = value; - }, - function (error) { - rejectedError = error; - } - ); - - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeUndefined(); - - fakeXHR.simulateError(); - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeInstanceOf(RequestErrorEvent); - expect(rejectedError.statusCode).toBeUndefined(); - expect(rejectedError.response).toBeUndefined(); - }); - - it("returns a promise that rejects when the request results in an HTTP error code", function () { - var testUrl = "http://example.invalid/testuri"; - var promise = loadCRN(testUrl); - - expect(promise).toBeDefined(); - - var resolvedValue; - var rejectedError; - promise.then( - function (value) { - resolvedValue = value; - }, - function (error) { - rejectedError = error; - } - ); - - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeUndefined(); - - var error = "some error"; - fakeXHR.simulateHttpResponse(404, error); - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeInstanceOf(RequestErrorEvent); - expect(rejectedError.statusCode).toEqual(404); - expect(rejectedError.response).toEqual(error); - }); - - it("returns a promise that resolves with undefined when statusCode is 204", function () { - var testUrl = "http://example.invalid/testuri"; - var promise = loadCRN(testUrl); - - expect(promise).toBeDefined(); - - var resolved = false; - var resolvedValue; - var rejectedError; - promise.then( - function (value) { - resolved = true; - resolvedValue = value; - }, - function (error) { - rejectedError = error; - } - ); - - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeUndefined(); - - fakeXHR.simulateHttpResponse(204); - expect(resolved).toBe(true); - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeUndefined(); - }); - - it("returns a promise that resolves to a compressed texture when the request loads", function () { - var testUrl = "http://example.invalid/testuri"; - var promise = loadCRN(testUrl); - - expect(promise).toBeDefined(); - - var resolvedValue; - var rejectedError; - var newPromise = promise.then( - function (value) { - resolvedValue = value; - }, - function (error) { - rejectedError = error; - } - ); - - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeUndefined(); - - var response = validCompressed.buffer; - fakeXHR.simulateLoad(response); - - return newPromise.then(function () { - expect(resolvedValue).toBeDefined(); - expect(resolvedValue.width).toEqual(4); - expect(resolvedValue.height).toEqual(4); - expect( - PixelFormat.isCompressedFormat(resolvedValue.internalFormat) - ).toEqual(true); - expect(resolvedValue.bufferView).toBeDefined(); - expect(rejectedError).toBeUndefined(); - }); - }); - - it("returns a promise that resolves to a compressed texture containing the first mip level of the original texture", function () { - var testUrl = "http://example.invalid/testuri"; - var promise = loadCRN(testUrl); - - expect(promise).toBeDefined(); - - var resolvedValue; - var rejectedError; - var newPromise = promise.then( - function (value) { - resolvedValue = value; - }, - function (error) { - rejectedError = error; - } - ); - - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeUndefined(); - - var response = validCompressedMipmap.buffer; - fakeXHR.simulateLoad(response); - - return newPromise.then(function () { - expect(resolvedValue).toBeDefined(); - expect(resolvedValue.width).toEqual(4); - expect(resolvedValue.height).toEqual(4); - expect( - PixelFormat.isCompressedFormat(resolvedValue.internalFormat) - ).toEqual(true); - expect(resolvedValue.bufferView).toBeDefined(); - expect(rejectedError).toBeUndefined(); - }); - }); - - it("returns undefined if the request is throttled", function () { - var oldMaximumRequests = RequestScheduler.maximumRequests; - RequestScheduler.maximumRequests = 0; - - var promise = loadCRN( - new Resource({ - url: "http://example.invalid/testuri", - request: new Request({ - throttle: true, - }), - }) - ); - expect(promise).toBeUndefined(); - - RequestScheduler.maximumRequests = oldMaximumRequests; - }); -}); diff --git a/Specs/Core/loadKTXSpec.js b/Specs/Core/loadKTX2Spec.js similarity index 90% rename from Specs/Core/loadKTXSpec.js rename to Specs/Core/loadKTX2Spec.js index 661bc66bab2..08e199f6167 100644 --- a/Specs/Core/loadKTXSpec.js +++ b/Specs/Core/loadKTX2Spec.js @@ -1,4 +1,4 @@ -import { loadKTX } from "../../Source/Cesium.js"; +import { loadKTX2 } from "../../Source/Cesium.js"; import { PixelFormat } from "../../Source/Cesium.js"; import { Request } from "../../Source/Cesium.js"; import { RequestErrorEvent } from "../../Source/Cesium.js"; @@ -6,7 +6,7 @@ import { RequestScheduler } from "../../Source/Cesium.js"; import { Resource } from "../../Source/Cesium.js"; import { RuntimeError } from "../../Source/Cesium.js"; -describe("Core/loadKTX", function () { +describe("Core/loadKTX2", function () { var validCompressed = new Uint8Array([ 171, 75, @@ -632,13 +632,13 @@ describe("Core/loadKTX", function () { it("throws with no url", function () { expect(function () { - loadKTX(); + loadKTX2(); }).toThrowDeveloperError(); }); it("creates and sends request without any custom headers", function () { var testUrl = "http://example.invalid/testuri"; - loadKTX(testUrl); + loadKTX2(testUrl); expect(fakeXHR.open).toHaveBeenCalledWith("GET", testUrl, true); expect(fakeXHR.setRequestHeader).not.toHaveBeenCalled(); @@ -647,7 +647,7 @@ describe("Core/loadKTX", function () { it("returns a promise that rejects when the request errors", function () { var testUrl = "http://example.invalid/testuri"; - var promise = loadKTX(testUrl); + var promise = loadKTX2(testUrl); expect(promise).toBeDefined(); @@ -674,7 +674,7 @@ describe("Core/loadKTX", function () { it("returns a promise that rejects when the request results in an HTTP error code", function () { var testUrl = "http://example.invalid/testuri"; - var promise = loadKTX(testUrl); + var promise = loadKTX2(testUrl); expect(promise).toBeDefined(); @@ -702,7 +702,7 @@ describe("Core/loadKTX", function () { it("returns a promise that resolves with undefined when the status code is 204", function () { var testUrl = "http://example.invalid/testuri"; - var promise = loadKTX(testUrl); + var promise = loadKTX2(testUrl); expect(promise).toBeDefined(); @@ -730,7 +730,7 @@ describe("Core/loadKTX", function () { it("returns a promise that resolves to an uncompressed texture when the request loads", function () { var testUrl = "http://example.invalid/testuri"; - var promise = loadKTX(testUrl); + var promise = loadKTX2(testUrl); expect(promise).toBeDefined(); @@ -762,7 +762,7 @@ describe("Core/loadKTX", function () { it("returns a promise that resolves to an uncompressed texture containing all mip levels of the original texture", function () { var testUrl = "http://example.invalid/testuri"; - var promise = loadKTX(testUrl); + var promise = loadKTX2(testUrl); expect(promise).toBeDefined(); @@ -795,7 +795,7 @@ describe("Core/loadKTX", function () { it("returns a promise that resolves to a compressed texture when the request loads", function () { var testUrl = "http://example.invalid/testuri"; - var promise = loadKTX(testUrl); + var promise = loadKTX2(testUrl); expect(promise).toBeDefined(); @@ -827,7 +827,7 @@ describe("Core/loadKTX", function () { it("returns a promise that resolves to a compressed texture containing the all mip levels of the original texture", function () { var testUrl = "http://example.invalid/testuri"; - var promise = loadKTX(testUrl); + var promise = loadKTX2(testUrl); expect(promise).toBeDefined(); @@ -862,7 +862,7 @@ describe("Core/loadKTX", function () { var invalidKTX = new Uint8Array(validCompressed); invalidKTX[0] = 0; - var promise = loadKTX(invalidKTX.buffer); + var promise = loadKTX2(invalidKTX.buffer); var resolvedValue; var rejectedError; @@ -880,35 +880,12 @@ describe("Core/loadKTX", function () { expect(rejectedError.message).toEqual("Invalid KTX file."); }); - it("cannot parse KTX buffer with invalid endianness", function () { - var reinterprestBuffer = new Uint32Array(validCompressed.buffer); - var invalidKTX = new Uint32Array(reinterprestBuffer); - invalidKTX[3] = 0x01020304; - - var promise = loadKTX(invalidKTX.buffer); - - var resolvedValue; - var rejectedError; - promise.then( - function (value) { - resolvedValue = value; - }, - function (error) { - rejectedError = error; - } - ); - - expect(resolvedValue).toBeUndefined(); - expect(rejectedError).toBeInstanceOf(RuntimeError); - expect(rejectedError.message).toEqual("File is the wrong endianness."); - }); - - it("cannot parse KTX buffer with invalid internal format", function () { + it("cannot parse KTX2 buffer with invalid internal format", function () { var reinterprestBuffer = new Uint32Array(validCompressed.buffer); var invalidKTX = new Uint32Array(reinterprestBuffer); invalidKTX[7] = 0; - var promise = loadKTX(invalidKTX.buffer); + var promise = loadKTX2(invalidKTX.buffer); var resolvedValue; var rejectedError; @@ -928,12 +905,12 @@ describe("Core/loadKTX", function () { ); }); - it("cannot parse KTX buffer with compressed texture and invalid type", function () { + it("cannot parse KTX2 buffer with compressed texture and invalid type", function () { var reinterprestBuffer = new Uint32Array(validCompressed.buffer); var invalidKTX = new Uint32Array(reinterprestBuffer); invalidKTX[4] = 15; - var promise = loadKTX(invalidKTX.buffer); + var promise = loadKTX2(invalidKTX.buffer); var resolvedValue; var rejectedError; @@ -958,7 +935,7 @@ describe("Core/loadKTX", function () { var invalidKTX = new Uint32Array(reinterprestBuffer); invalidKTX[5] = 15; - var promise = loadKTX(invalidKTX.buffer); + var promise = loadKTX2(invalidKTX.buffer); var resolvedValue; var rejectedError; @@ -978,12 +955,12 @@ describe("Core/loadKTX", function () { ); }); - it("cannot parse KTX buffer with uncompressed texture and base format is not the same as format", function () { + it("cannot parse KTX2 buffer with uncompressed texture and base format is not the same as format", function () { var reinterprestBuffer = new Uint32Array(validUncompressed.buffer); var invalidKTX = new Uint32Array(reinterprestBuffer); invalidKTX[8] = invalidKTX[6] + 1; - var promise = loadKTX(invalidKTX.buffer); + var promise = loadKTX2(invalidKTX.buffer); var resolvedValue; var rejectedError; @@ -1008,7 +985,7 @@ describe("Core/loadKTX", function () { var invalidKTX = new Uint32Array(reinterprestBuffer); invalidKTX[11] = 15; - var promise = loadKTX(invalidKTX.buffer); + var promise = loadKTX2(invalidKTX.buffer); var resolvedValue; var rejectedError; @@ -1031,7 +1008,7 @@ describe("Core/loadKTX", function () { var invalidKTX = new Uint32Array(reinterprestBuffer); invalidKTX[12] = 15; - var promise = loadKTX(invalidKTX.buffer); + var promise = loadKTX2(invalidKTX.buffer); var resolvedValue; var rejectedError; @@ -1054,7 +1031,7 @@ describe("Core/loadKTX", function () { var cubemapKTX = new Uint32Array(reinterprestBuffer); cubemapKTX[13] = 6; - var promise = loadKTX(cubemapKTX.buffer); + var promise = loadKTX2(cubemapKTX.buffer); promise.then(function (value) { expect(value).toBeDefined(); @@ -1065,7 +1042,7 @@ describe("Core/loadKTX", function () { var oldMaximumRequests = RequestScheduler.maximumRequests; RequestScheduler.maximumRequests = 0; - var promise = loadKTX( + var promise = loadKTX2( new Resource({ url: "http://example.invalid/testuri", request: new Request({ diff --git a/Specs/Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx b/Specs/Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx deleted file mode 100644 index 7a8880d0411..00000000000 Binary files a/Specs/Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx and /dev/null differ diff --git a/Specs/Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2 b/Specs/Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2 new file mode 100644 index 00000000000..c14cbedb3e9 Binary files /dev/null and b/Specs/Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2 differ diff --git a/Specs/Data/Images/Green4x4.crn b/Specs/Data/Images/Green4x4.crn deleted file mode 100644 index d32561e1af3..00000000000 Binary files a/Specs/Data/Images/Green4x4.crn and /dev/null differ diff --git a/Specs/Data/Images/Green4x4.ktx b/Specs/Data/Images/Green4x4.ktx deleted file mode 100644 index b251f62c3f5..00000000000 Binary files a/Specs/Data/Images/Green4x4.ktx and /dev/null differ diff --git a/Specs/Data/Images/Green4x4.ktx2 b/Specs/Data/Images/Green4x4.ktx2 new file mode 100644 index 00000000000..84ea605d76f Binary files /dev/null and b/Specs/Data/Images/Green4x4.ktx2 differ diff --git a/Specs/Data/Images/Green4x4DXT1.ktx b/Specs/Data/Images/Green4x4DXT1.ktx deleted file mode 100644 index 7d013e8d2e9..00000000000 Binary files a/Specs/Data/Images/Green4x4DXT1.ktx and /dev/null differ diff --git a/Specs/Data/Images/Green4x4ETC1.ktx b/Specs/Data/Images/Green4x4ETC1.ktx deleted file mode 100644 index d3d1123c090..00000000000 Binary files a/Specs/Data/Images/Green4x4ETC1.ktx and /dev/null differ diff --git a/Specs/Data/Images/Green4x4PVR.ktx b/Specs/Data/Images/Green4x4PVR.ktx deleted file mode 100644 index c6fe6296866..00000000000 Binary files a/Specs/Data/Images/Green4x4PVR.ktx and /dev/null differ diff --git a/Specs/Data/Images/Green64x64_Basis255.ktx2 b/Specs/Data/Images/Green64x64_Basis255.ktx2 new file mode 100644 index 00000000000..062275fd40d Binary files /dev/null and b/Specs/Data/Images/Green64x64_Basis255.ktx2 differ diff --git a/Specs/Data/Images/Green64x64_UASTC.ktx2 b/Specs/Data/Images/Green64x64_UASTC.ktx2 new file mode 100644 index 00000000000..94e9e906efc Binary files /dev/null and b/Specs/Data/Images/Green64x64_UASTC.ktx2 differ diff --git a/Specs/Data/Models/Box-Textured-CRN-Binary/CesiumTexturedBoxTest.glb b/Specs/Data/Models/Box-Textured-CRN-Binary/CesiumTexturedBoxTest.glb deleted file mode 100644 index 7e988e8b021..00000000000 Binary files a/Specs/Data/Models/Box-Textured-CRN-Binary/CesiumTexturedBoxTest.glb and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-CRN-Embedded/CesiumTexturedBoxTest.gltf b/Specs/Data/Models/Box-Textured-CRN-Embedded/CesiumTexturedBoxTest.gltf deleted file mode 100644 index fa3a353d192..00000000000 --- a/Specs/Data/Models/Box-Textured-CRN-Embedded/CesiumTexturedBoxTest.gltf +++ /dev/null @@ -1,276 +0,0 @@ -{ - "accessors": { - "accessor_21": { - "bufferView": "bufferView_1", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5123, - "count": 36, - "type": "SCALAR" - }, - "accessor_23": { - "bufferView": "bufferView_0", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 0.5, - 0.5, - 0.5 - ], - "min": [ - -0.5, - -0.5, - -0.5 - ], - "type": "VEC3" - }, - "accessor_25": { - "bufferView": "bufferView_0", - "byteOffset": 288, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 1, - 1, - 1 - ], - "min": [ - -1, - -1, - -1 - ], - "type": "VEC3" - }, - "accessor_27": { - "bufferView": "bufferView_0", - "byteOffset": 576, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 6, - 1 - ], - "min": [ - 0, - 0 - ], - "type": "VEC2" - } - }, - "animations": {}, - "asset": { - "generator": "collada2gltf@", - "premultipliedAlpha": true, - "profile": { - "api": "WebGL", - "version": "1.0.2" - }, - "version": "1.0" - }, - "bufferViews": { - "bufferView_0": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 768, - "byteOffset": 0, - "target": 34962 - }, - "bufferView_1": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 72, - "byteOffset": 768, - "target": 34963 - } - }, - "buffers": { - "CesiumTexturedBoxTest": { - "type": "arraybuffer", - "byteLength": 840, - "uri": "data:application/octet-stream;base64,AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAADAQAAAAAAAAKBAAAAAAAAAwED+/38/AACgQP7/fz8AAIBAAAAAAAAAoEAAAAAAAACAQAAAgD8AAKBAAACAPwAAAEAAAAAAAACAPwAAAAAAAABAAACAPwAAgD8AAIA/AABAQAAAAAAAAIBAAAAAAAAAQEAAAIA/AACAQAAAgD8AAEBAAAAAAAAAAEAAAAAAAABAQAAAgD8AAABAAACAPwAAAAAAAAAAAAAAAP7/fz8AAIA/AAAAAAAAgD/+/38/AAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUA" - } - }, - "images": { - "Image0001": { - "name": "Image0001", - "uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=", - "extras": { - "compressedImage3DTiles": { - "crunch": { - "uri": "data:image/crn;base64,SHgASvv9AAAFlRpEAIAAgAEBAAAAAAAAAAAAAAAAAAAAAABKAAC4AE8AAQIAASsAdAAAAAAAAAAAAAAAAAAAAAAAfQACLQAAAqoAgnAA0wxAxABM1vqhQR4PUQKytgIE4wGEEIIKAL7+GiFANAMaDWRm8ENz89/XXoAAISoXJZtVe3l4rbbF7curHPHoJCSQ0CIAAAEBY0beiq4JVXxed+SQIAAACxESaN1oA9c9CS3aVe2qkwrehDP/ze+bpWAFYklTaqqCb0KqBA7+55nw0ZYedBoAABoAIbauOQlkKCAQAAAAAsMsP/OPmOZ2z0mW5s+abbQAZppmemfv989/372AAMZsANtQQQUAUCt8JR7jEnnvtIma6DnKZIAEAWBgEoCAgA2I8sRAWMZ4DI9A9MPeNheAVzYPjtAb2D0Bz5sG0BAEAAWAsFtC3dTu6uFXBRdhbp4eWAjYCUoK0BYNNWG9Sgb8gVkgVjZTRCgwC6BSjSzkJkyIiItYldwXRaPWBh0I5Z9RsEAbchXcDPgHAKaFOFjHv+r1rWtZ/vIEz+oD+fu8Dt/a6a1rWLB1AOQLmr1rWqsBGBlIwbYGEcs47rFP004GOFHx2gO1gEBYg7LWPmeUCYgWEIbFd6EGOX146KId3s6WwEeg63YM9QFZ1DAGGgooAsU6ACwFuXy9PCkeOYwwCGzeT0hCwhS3LBoFKcXwDIVfa6vl9T7jqeA449vxfs+/+7Pzx+JW9AAG3m1QwgxRQABeX6Qhl7InpDEQRAEFdBCGglO4iAFGIwQhgIgudQl0qcq8qMqCoCfEChpBCDADfcB3CBMzKys2na1WzVtTZ8ywPkBTg/4B0mBREm2AAABfSDC8bnWouLmguCitlpS3qpduH5nYo/AuZvlVte5cnZc9c5SRCGa8AAPgAOBRaFjsvQc/o5XPe+EHC5rr8+5HdjNk52uhsy9LwAAAAAAKgAiuKMqubSqaZX00/owxhoAFhs9+jAm7F0fd5pyO2WKeQAAANAB10e5qr7y2uI9GGgAAAAgACWDHgzWzerutty7vAC8B0Zsyrvbd39M2wu+ILDhI8mNJXJ3QAAAABxAlVfs8fxh2YjqnTxgAI7nb3epejAAAAAAB1k8vTem//1Zky9Vm5a64wsI19t+p9aNkKdNFLRq7X4cGlS54qxPXAKx+yCc636HiVrHISRhYTyKXfN6drc8AysbVW0MgOF3218sP4Q2yzRFVT/3Ox4r4aEMunXywVobH/QQ81Hpnq3/x8MWjk93Ba1gAAAhYc5qsPn02EPNqx8z8Ps4bP5OrP/zQ44N0fEgs+aedyHL9fezU8m52bYNABsijLD2LBbetzfp1l6LvFhtvO4dmXVz8/ch2wA5Xe6l3FLupd9tveFEln5btr6m9Dr/tyenLQzxgHlGVyy1S1tPd/Oat/e+HPv17yHL3ZGKLnSTUoaKs0sbqpr3eHHhtdAvdnDbwYO9eHlr70evJokZVMNvltY++zm3VPjBP31EGdalm9i0vv+5te/XpqV/tRZMAH7IpoprMibLvbkk59P7QT1VEGdnR+8tHDQneIUdDsfPN6TJTxZLWmKn1zgAAADzBk10anTk8fyfZjtq/XXdfPbT6Z7WmFtqeKZA9RwSan9aGFn3wgBv9oInjk4uL25FNEkwuW3MgmY+GHMal4vZ/1E/QAAAAAUrbmeEU3f49vrq44xIB0qhkuU6OTY3nDWAAAAAAAABwAC2kcmpPVVPqjBeAAH3RTsliMqWYPNMMxBUAAAAACTAkb/GXY35+jg9qv4HXgoAIAAdKoZLn5E46f4bN+SaTgj5ZZ12ayJ7SYADwROsUGBZ6n+VelzR+nwkjF+8AAAAAHgAAGrngJavn/MB9K8HIe8+XlYpl1fkxDb0E5Y4CgAAAAA==" - } - } - } - } - }, - "materials": { - "Effect-Texture": { - "name": "Texture", - "technique": "technique0", - "values": { - "diffuse": "texture_Image0001", - "shininess": 256, - "specular": [ - 0.20000000298023224, - 0.20000000298023224, - 0.20000000298023224, - 1 - ] - } - } - }, - "meshes": { - "Geometry-mesh002": { - "name": "Mesh", - "primitives": [ - { - "attributes": { - "NORMAL": "accessor_25", - "POSITION": "accessor_23", - "TEXCOORD_0": "accessor_27" - }, - "indices": "accessor_21", - "material": "Effect-Texture", - "mode": 4 - } - ] - } - }, - "nodes": { - "rootNode": { - "children": [], - "meshes": [ - "Geometry-mesh002" - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - } - }, - "programs": { - "program_0": { - "attributes": [ - "a_normal", - "a_position", - "a_texcoord0" - ], - "fragmentShader": "CesiumTexturedBoxTest0FS", - "vertexShader": "CesiumTexturedBoxTest0VS" - } - }, - "samplers": { - "sampler_0": { - "magFilter": 9729, - "minFilter": 9729, - "wrapS": 10497, - "wrapT": 10497 - } - }, - "scene": "defaultScene", - "scenes": { - "defaultScene": { - "nodes": [ - "rootNode" - ] - } - }, - "shaders": { - "CesiumTexturedBoxTest0FS": { - "type": 35632, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0KdW5pZm9ybSBzYW1wbGVyMkQgdV9kaWZmdXNlOw0KdW5pZm9ybSB2ZWM0IHVfc3BlY3VsYXI7DQp1bmlmb3JtIGZsb2F0IHVfc2hpbmluZXNzOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzMgbm9ybWFsID0gbm9ybWFsaXplKHZfbm9ybWFsKTsNCnZlYzQgY29sb3IgPSB2ZWM0KDAuLCAwLiwgMC4sIDAuKTsNCnZlYzQgZGlmZnVzZSA9IHZlYzQoMC4sIDAuLCAwLiwgMS4pOw0KdmVjNCBzcGVjdWxhcjsNCmRpZmZ1c2UgPSB0ZXh0dXJlMkQodV9kaWZmdXNlLCB2X3RleGNvb3JkMCk7DQpzcGVjdWxhciA9IHVfc3BlY3VsYXI7DQpkaWZmdXNlLnh5eiAqPSBtYXgoZG90KG5vcm1hbCx2ZWMzKDAuLDAuLDEuKSksIDAuKTsNCmNvbG9yLnh5eiArPSBkaWZmdXNlLnh5ejsNCmNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBkaWZmdXNlLmEsIGRpZmZ1c2UuYSk7DQpnbF9GcmFnQ29sb3IgPSBjb2xvcjsNCn0NCg==" - }, - "CesiumTexturedBoxTest0VS": { - "type": 35633, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KYXR0cmlidXRlIHZlYzMgYV9wb3NpdGlvbjsNCmF0dHJpYnV0ZSB2ZWMzIGFfbm9ybWFsOw0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdW5pZm9ybSBtYXQzIHVfbm9ybWFsTWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsNCmF0dHJpYnV0ZSB2ZWMyIGFfdGV4Y29vcmQwOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzQgcG9zID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFfcG9zaXRpb24sMS4wKTsNCnZfbm9ybWFsID0gdV9ub3JtYWxNYXRyaXggKiBhX25vcm1hbDsNCnZfdGV4Y29vcmQwID0gYV90ZXhjb29yZDA7DQpnbF9Qb3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHBvczsNCn0NCg==" - } - }, - "skins": {}, - "techniques": { - "technique0": { - "attributes": { - "a_normal": "normal", - "a_position": "position", - "a_texcoord0": "texcoord0" - }, - "parameters": { - "diffuse": { - "type": 35678 - }, - "modelViewMatrix": { - "semantic": "MODELVIEW", - "type": 35676 - }, - "normal": { - "semantic": "NORMAL", - "type": 35665 - }, - "normalMatrix": { - "semantic": "MODELVIEWINVERSETRANSPOSE", - "type": 35675 - }, - "position": { - "semantic": "POSITION", - "type": 35665 - }, - "projectionMatrix": { - "semantic": "PROJECTION", - "type": 35676 - }, - "shininess": { - "type": 5126 - }, - "specular": { - "type": 35666 - }, - "texcoord0": { - "semantic": "TEXCOORD_0", - "type": 35664 - } - }, - "program": "program_0", - "states": { - "enable": [ - 2929, - 2884 - ] - }, - "uniforms": { - "u_diffuse": "diffuse", - "u_modelViewMatrix": "modelViewMatrix", - "u_normalMatrix": "normalMatrix", - "u_projectionMatrix": "projectionMatrix", - "u_shininess": "shininess", - "u_specular": "specular" - } - } - }, - "textures": { - "texture_Image0001": { - "format": 6408, - "internalFormat": 6408, - "sampler": "sampler_0", - "source": "Image0001", - "target": 3553, - "type": 5121 - } - }, - "cameras": {}, - "extensionsUsed": [] -} diff --git a/Specs/Data/Models/Box-Textured-CRN/CesiumTexturedBoxTest.gltf b/Specs/Data/Models/Box-Textured-CRN/CesiumTexturedBoxTest.gltf deleted file mode 100644 index 23be67a6fef..00000000000 --- a/Specs/Data/Models/Box-Textured-CRN/CesiumTexturedBoxTest.gltf +++ /dev/null @@ -1,276 +0,0 @@ -{ - "accessors": { - "accessor_21": { - "bufferView": "bufferView_1", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5123, - "count": 36, - "type": "SCALAR" - }, - "accessor_23": { - "bufferView": "bufferView_0", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 0.5, - 0.5, - 0.5 - ], - "min": [ - -0.5, - -0.5, - -0.5 - ], - "type": "VEC3" - }, - "accessor_25": { - "bufferView": "bufferView_0", - "byteOffset": 288, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 1, - 1, - 1 - ], - "min": [ - -1, - -1, - -1 - ], - "type": "VEC3" - }, - "accessor_27": { - "bufferView": "bufferView_0", - "byteOffset": 576, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 6, - 1 - ], - "min": [ - 0, - 0 - ], - "type": "VEC2" - } - }, - "animations": {}, - "asset": { - "generator": "collada2gltf@", - "premultipliedAlpha": true, - "profile": { - "api": "WebGL", - "version": "1.0.2" - }, - "version": "1.0" - }, - "bufferViews": { - "bufferView_0": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 768, - "byteOffset": 0, - "target": 34962 - }, - "bufferView_1": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 72, - "byteOffset": 768, - "target": 34963 - } - }, - "buffers": { - "CesiumTexturedBoxTest": { - "type": "arraybuffer", - "byteLength": 840, - "uri": "data:application/octet-stream;base64,AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAADAQAAAAAAAAKBAAAAAAAAAwED+/38/AACgQP7/fz8AAIBAAAAAAAAAoEAAAAAAAACAQAAAgD8AAKBAAACAPwAAAEAAAAAAAACAPwAAAAAAAABAAACAPwAAgD8AAIA/AABAQAAAAAAAAIBAAAAAAAAAQEAAAIA/AACAQAAAgD8AAEBAAAAAAAAAAEAAAAAAAABAQAAAgD8AAABAAACAPwAAAAAAAAAAAAAAAP7/fz8AAIA/AAAAAAAAgD/+/38/AAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUA" - } - }, - "images": { - "Image0001": { - "name": "Image0001", - "uri": "Image0001.png", - "extras": { - "compressedImage3DTiles": { - "crunch": { - "uri": "Image0001-crunch.crn" - } - } - } - } - }, - "materials": { - "Effect-Texture": { - "name": "Texture", - "technique": "technique0", - "values": { - "diffuse": "texture_Image0001", - "shininess": 256, - "specular": [ - 0.20000000298023224, - 0.20000000298023224, - 0.20000000298023224, - 1 - ] - } - } - }, - "meshes": { - "Geometry-mesh002": { - "name": "Mesh", - "primitives": [ - { - "attributes": { - "NORMAL": "accessor_25", - "POSITION": "accessor_23", - "TEXCOORD_0": "accessor_27" - }, - "indices": "accessor_21", - "material": "Effect-Texture", - "mode": 4 - } - ] - } - }, - "nodes": { - "rootNode": { - "children": [], - "meshes": [ - "Geometry-mesh002" - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - } - }, - "programs": { - "program_0": { - "attributes": [ - "a_normal", - "a_position", - "a_texcoord0" - ], - "fragmentShader": "CesiumTexturedBoxTest0FS", - "vertexShader": "CesiumTexturedBoxTest0VS" - } - }, - "samplers": { - "sampler_0": { - "magFilter": 9729, - "minFilter": 9729, - "wrapS": 10497, - "wrapT": 10497 - } - }, - "scene": "defaultScene", - "scenes": { - "defaultScene": { - "nodes": [ - "rootNode" - ] - } - }, - "shaders": { - "CesiumTexturedBoxTest0FS": { - "type": 35632, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0KdW5pZm9ybSBzYW1wbGVyMkQgdV9kaWZmdXNlOw0KdW5pZm9ybSB2ZWM0IHVfc3BlY3VsYXI7DQp1bmlmb3JtIGZsb2F0IHVfc2hpbmluZXNzOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzMgbm9ybWFsID0gbm9ybWFsaXplKHZfbm9ybWFsKTsNCnZlYzQgY29sb3IgPSB2ZWM0KDAuLCAwLiwgMC4sIDAuKTsNCnZlYzQgZGlmZnVzZSA9IHZlYzQoMC4sIDAuLCAwLiwgMS4pOw0KdmVjNCBzcGVjdWxhcjsNCmRpZmZ1c2UgPSB0ZXh0dXJlMkQodV9kaWZmdXNlLCB2X3RleGNvb3JkMCk7DQpzcGVjdWxhciA9IHVfc3BlY3VsYXI7DQpkaWZmdXNlLnh5eiAqPSBtYXgoZG90KG5vcm1hbCx2ZWMzKDAuLDAuLDEuKSksIDAuKTsNCmNvbG9yLnh5eiArPSBkaWZmdXNlLnh5ejsNCmNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBkaWZmdXNlLmEsIGRpZmZ1c2UuYSk7DQpnbF9GcmFnQ29sb3IgPSBjb2xvcjsNCn0NCg==" - }, - "CesiumTexturedBoxTest0VS": { - "type": 35633, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KYXR0cmlidXRlIHZlYzMgYV9wb3NpdGlvbjsNCmF0dHJpYnV0ZSB2ZWMzIGFfbm9ybWFsOw0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdW5pZm9ybSBtYXQzIHVfbm9ybWFsTWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsNCmF0dHJpYnV0ZSB2ZWMyIGFfdGV4Y29vcmQwOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzQgcG9zID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFfcG9zaXRpb24sMS4wKTsNCnZfbm9ybWFsID0gdV9ub3JtYWxNYXRyaXggKiBhX25vcm1hbDsNCnZfdGV4Y29vcmQwID0gYV90ZXhjb29yZDA7DQpnbF9Qb3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHBvczsNCn0NCg==" - } - }, - "skins": {}, - "techniques": { - "technique0": { - "attributes": { - "a_normal": "normal", - "a_position": "position", - "a_texcoord0": "texcoord0" - }, - "parameters": { - "diffuse": { - "type": 35678 - }, - "modelViewMatrix": { - "semantic": "MODELVIEW", - "type": 35676 - }, - "normal": { - "semantic": "NORMAL", - "type": 35665 - }, - "normalMatrix": { - "semantic": "MODELVIEWINVERSETRANSPOSE", - "type": 35675 - }, - "position": { - "semantic": "POSITION", - "type": 35665 - }, - "projectionMatrix": { - "semantic": "PROJECTION", - "type": 35676 - }, - "shininess": { - "type": 5126 - }, - "specular": { - "type": 35666 - }, - "texcoord0": { - "semantic": "TEXCOORD_0", - "type": 35664 - } - }, - "program": "program_0", - "states": { - "enable": [ - 2929, - 2884 - ] - }, - "uniforms": { - "u_diffuse": "diffuse", - "u_modelViewMatrix": "modelViewMatrix", - "u_normalMatrix": "normalMatrix", - "u_projectionMatrix": "projectionMatrix", - "u_shininess": "shininess", - "u_specular": "specular" - } - } - }, - "textures": { - "texture_Image0001": { - "format": 6408, - "internalFormat": 6408, - "sampler": "sampler_0", - "source": "Image0001", - "target": 3553, - "type": 5121 - } - }, - "cameras": {}, - "extensionsUsed": [] -} diff --git a/Specs/Data/Models/Box-Textured-CRN/Image0001-crunch.crn b/Specs/Data/Models/Box-Textured-CRN/Image0001-crunch.crn deleted file mode 100644 index ff524c5fb28..00000000000 Binary files a/Specs/Data/Models/Box-Textured-CRN/Image0001-crunch.crn and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-CRN/Image0001.png b/Specs/Data/Models/Box-Textured-CRN/Image0001.png deleted file mode 100644 index 073fcf40a18..00000000000 Binary files a/Specs/Data/Models/Box-Textured-CRN/Image0001.png and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-KTX-Binary/CesiumTexturedBoxTest.glb b/Specs/Data/Models/Box-Textured-KTX-Binary/CesiumTexturedBoxTest.glb deleted file mode 100644 index ec4774259c3..00000000000 Binary files a/Specs/Data/Models/Box-Textured-KTX-Binary/CesiumTexturedBoxTest.glb and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-KTX-Embedded/CesiumTexturedBoxTest.gltf b/Specs/Data/Models/Box-Textured-KTX-Embedded/CesiumTexturedBoxTest.gltf deleted file mode 100644 index 1b59277eb68..00000000000 --- a/Specs/Data/Models/Box-Textured-KTX-Embedded/CesiumTexturedBoxTest.gltf +++ /dev/null @@ -1,282 +0,0 @@ -{ - "accessors": { - "accessor_21": { - "bufferView": "bufferView_1", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5123, - "count": 36, - "type": "SCALAR" - }, - "accessor_23": { - "bufferView": "bufferView_0", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 0.5, - 0.5, - 0.5 - ], - "min": [ - -0.5, - -0.5, - -0.5 - ], - "type": "VEC3" - }, - "accessor_25": { - "bufferView": "bufferView_0", - "byteOffset": 288, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 1, - 1, - 1 - ], - "min": [ - -1, - -1, - -1 - ], - "type": "VEC3" - }, - "accessor_27": { - "bufferView": "bufferView_0", - "byteOffset": 576, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 6, - 1 - ], - "min": [ - 0, - 0 - ], - "type": "VEC2" - } - }, - "animations": {}, - "asset": { - "generator": "collada2gltf@", - "premultipliedAlpha": true, - "profile": { - "api": "WebGL", - "version": "1.0.2" - }, - "version": "1.0" - }, - "bufferViews": { - "bufferView_0": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 768, - "byteOffset": 0, - "target": 34962 - }, - "bufferView_1": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 72, - "byteOffset": 768, - "target": 34963 - } - }, - "buffers": { - "CesiumTexturedBoxTest": { - "type": "arraybuffer", - "byteLength": 840, - "uri": "data:application/octet-stream;base64,AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAADAQAAAAAAAAKBAAAAAAAAAwED+/38/AACgQP7/fz8AAIBAAAAAAAAAoEAAAAAAAACAQAAAgD8AAKBAAACAPwAAAEAAAAAAAACAPwAAAAAAAABAAACAPwAAgD8AAIA/AABAQAAAAAAAAIBAAAAAAAAAQEAAAIA/AACAQAAAgD8AAEBAAAAAAAAAAEAAAAAAAABAQAAAgD8AAABAAACAPwAAAAAAAAAAAAAAAP7/fz8AAIA/AAAAAAAAgD/+/38/AAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUA" - } - }, - "images": { - "Image0001": { - "name": "Image0001", - "uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=", - "extras": { - "compressedImage3DTiles": { - "s3tc": { - "uri": "data:image/ktx;base64,q0tUWCAxMbsNChoKAQIDBAAAAAABAAAAAAAAAPCDAAAHGQAAgAAAAIAAAAAAAAAAAAAAAAEAAAABAAAANAAAABMAAABDUk5MSUJfRk9VUkNDAERYVDEAABcAAABLVFhvcmllbnRhdGlvbgBTPXIsVD1kAAAAIAAAHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqr73rvWqqqqqvvmu8aqqqqq++bb1v///6r75rvGqqqqqtvm28aqqqqq++bb1v////8c53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqvveutaqqqqq+ubb1v///7/b3vuVAAAAeNvWe20AAOhV2957bQCoVVXb1lttAP9VVbvOe20AVVVVu857dQBVVVXb1nttAP9VVdvee20AKlVV29Z7bQAAK1Xb3vuVAAAALfveutaqqqqgHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqtve+9aqqiryeuYb1//////b3nttAADgXvvee22AXlVVu4VbZVz9//97bXx1qAAAAFt1e21f9VVVe3V7bX1XVVVbdXttVdVVVXttW20Aqqqqe21bbaoqqqqdbVpt7////3tte3UogAAAu4VbZTV////b3nttArVVVfveW2UAAAu1+97b3v//l1vb3hvXqqiqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqq29771qqqior73nttAACAcHttu9aVCQAAe2V7dZCmqqpadXttVVdVVbxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqO2Wbdaqqqqp7bVtl8AAIANvWe20DJVVV2957dQAAAg3a3vzWqqoKq/zm2tb/////HOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqq+9661qqqqqr75rvGqqqqqvvee20AgHBcm757bVxVVVV7bVptAAgAALxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqp7bVttKIqiinu+e201VVVV29ZbZQACCTXb3vvWoKOKiNre/NaqqqoqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqvrevNaqqqqq29ZbZQDAcFy7hVtl9P3f/3ttW22qqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqruFW2Uff///29ZbZQADDTXa3vzWsIKLqBzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqq++a6xqqqqqrb3ltlAMBgWLuFW2X0/f/3WnV7bVVXVVV8bXttV1VVVbxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqnt1e21VVVXVe3V7bVVVVVW8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqr73nttVVVVVbuFW2Uff///2957bQADDSXa3vzWqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqra3vzWqqqqitvem3UAAMBgm8Z7bVRXVVVadXtt9VVVVbxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2Wyqqqqqe2373gAAAIC/93ttVVUJAP//e21VVXiAe218ZQAAAiB7dXttVVVXVbxt2WyqqqqqvG3ZbKqqqqpadXtt1VVVVbzGe20V1VVV+96bdQAAAwnb3vvWqqiqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqq+9661qqqqiq71nttcFhUV1p1e21d1VVVe21bZQAAAAC8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqqbdXttVVXV1f//W2U1JQ0N///e96wKCAD//973KoAAAN/3e21WXFhQe21abQAAAAC8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqp7bVttKqqqqrvWe20NJRXV+ubb1v///v775rrGqqqqqhzneMaqqqqqHOd4xqqqqqra3vzWqqqqqtvee22AwGBwe208TQACAAC8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2Wyqqqqqm3V7bZXVVVVbZd/3WFhQYP//3vcAAAIq///f9wAAgDh7bb73BQUJAXttfGUAAAAAvG3ZbKqqqqq8bdlsqqqqqrxt2Wyqqqqqe3V7bVXVVVV7bVtlgsAAANvee20CAwkN29771qqqqqoc53jGqqqqqhzneMaqqqqq+9661qqqqirb1nttUFhcVnttW22oiqKqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqnxte21VVVXV3/d7bVVVVVV7bVptAAAAAHttXG0AAACgWnV7bVVVVVX73nttVVVVVbxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2Wyqqqqq/sZ7bRVVVVX//3ttAAP1Vd/3e20AYFdV/I17bVRVVVV8bXttVVdVVbxt2WyqqqqqvG3ZbKqqqqpadXttVVVVVXttW22qqqqK29Z7bVVVVVXb1nttBSUVlfrm29b////+HOd4xqqqqqoc53jGqqqqqtveG6YAgMBA+517bVRXVVW8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqpbZXttVVVVhf//e21VVfUL//97bVVVqgD//1ttVVV+gF2u+kz////8e21bbaKqqKK8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2Wyqqqqqe217daAAAAB7bXt1AgAAAHxte21XVVVVvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqXa76TP////+bdTtlqqrqGr/3W21VVbUC//97bdVVqgC+93nO//3//BzneMaqqqqqHOd4xqqqqqrb1ltlwEBgYHttPF0CAAAAvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqr2+e21VVVUV//9bbbUNAgD//97/gAAAAP//3/eCAAAA///f9woAAAD//3tteMAAAHtt//8AAAIJe21bbaKILKK8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqp7bVttKioqql7Xe21VVVUV//97bTUJAgD//9/3gAAAAP//3/eqAIAA///b3lRcXFgc53jGqqqqqvvmusaqqqqq+957bXBQWFh7dXttVVdXV7xt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2Wyqqqqqe21bXQAAAED//3ttNQ0JAv//3v8qIAAA//+97wAAAEj//y+NAAAAV///Vb4AAAAJ///f96AAAAD//1tlcMCAAP3Oe21VVVVUvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqW2V7dapqGmr//1tlJQ0DAv//vfcCAAAA//8a1wAAAMD//y6NAAAAV///2tZQcHBhvvd5zv/////b3vvWqqqqqvvee21YXFxce3V7bVVVV1e8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqqcdXttVVXV1d/3e23VNQUJ///f9wAICoL//973gIAgSP//A1TgWFRXR2QATFUAqqr//wJULZVVVf//LY0AAAIB///e94CAAgD//3ttXHBAgHttO10AAAADvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqp7bVttqqoigt/3e22VNQ0B///e9wgrAAD//3znAAAASP//4ktgWFZVR2QATFUAqqriS/veWGBgYNve+taiqqio++a7xqqqqqq71nttXFxcXPvee21VVVVVvG3ZbKqqqqp8bXttVVVVVXttW22qqqoqvvd7bVXVFSX//32uAQAAAP//3vcCAIAg3vcDVIBgUFxHZABMoaioqiVcJFyqqqqqiWQDXL////++9wJUCSUV1f//vfcCAggD///f9yAAgADf93ttVlxQYHt1e21VVVdfe21bbaqqqqq8bdlsqqqqqrxt2WyqqqqqvG3ZbKqqqqq8bdlsqqqqqpxte21VVVVdvvd7bVWVNQX//x7PAQAAAP//vfcAAIAA3vcDVMBgWFRHZABUoaiqqiVcJFyoqKqqudYkXDU1NRX73rrWqqqoqr73ec7/////29Z7bVxcXFx8bXttVVdXV7xt2WyqqqqqWnV7bdXVVVUdz3ttVVVVFd/3O10JAwAA///e/wIAAALe9yNcAIBAcLGdoEP0/f//ZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZ2TgS0oqqqre9wNUAwkFNf//3vcCAAIIe23//5VVVVXf93ttVVdUWHxte21XVVVffG17bVVVVVW8bdlsqqqqqrxt2Wyqqqqq+957bVVVVVWe73ttVVXVFf//W2UJAgAA///e/woKgqDe9wNUAMBgUO2E4Uv0/f//ZWTES6qqqqplZMRLqqqqqpnOJFwVNTU1+9661qqoqqob53vGqqqqqtvee21cXFhYe21bbaKioqq8bdlsqqqqqnttW2WAAIBA3/dbbSUNAQL//97/AAAAAP//DIUAAIBA//8CVFxWVVUlXCRcqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqkJ2gQx9////e9wJUAAIBDf//3/cAAAAA//87XWDAAAA913ttVVVVVFp1e21VX1VdvG3ZbKqqqqpadXttVdVVVZt9O1Wqquo6//87ZSUJAwD//9/3AgACAv//RGQAAIBgXOfjU1xWVVUlXCRcqqqqqmVkxEuqqqqqZWTES6qqqqoCVPveYGBgYPveutaqqqqr+9661qqqqqrb3nttWFBwcHttW22oqqqonG17bVVVVdXf93ttlTUFCf//3veIAAAA//+99wCAKEi+9+JTYFhUV0hsI1T+////ZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqoZsBFT///////8DVDWVVVX//+t8AAACAf//3veoAAAA//97bVhwQIB7bVtlAAACA7xt2Wyqqqqqm31bZf//v3/f93ttlSUNAf//3vcIAAAA//863wAAAEDf/wJUcFxWVUVcJFz4////ZWTES6qqqqplZMRLqqqqqkVcJVz//7+//N4DVCUlBQ383rjWqqqqqvveutaqqqqq2957bWBgQAA8phtV///9/P//W2VV1TUL//+9vgEAAAD//773AACAIP//AlTAYFhcR2QBVKGoqqqGbARU/////2VkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqpFXARcqqqqqkhsI1S/////3vcCVA0lFdX//3vnAAAAA///3/8ooAIC//97bVZccIA8pnttVVVVVv//e21VlSUL//9e3wEAAAD//773AACAIP//AlTAcFhWSGwjVPn+//9lZMRLqqqqqmVkxEuqqqqqZWTES6qqqqpHZAFUqiqqatrWAVQJCQED29761qioqqoc53jGqqqqqn33ms4///////893/gAAgP//9/3IyiAAP//vvcAAACA//9FZACAYFBwlaBD9P3//0VcBFyqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqqGbARU/////2dk4EtKKqqq3/8CVAMJJTXe9///VVVWWf//3/cggAAA//9+594AAAD//973IAoAAP//vvcAAACA//8CVADAYFiqdAJU9P3//yVkRUyqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqT43AQ3//vx9wlfveVFZVVRzneMaqqqqqHOd4xqqqqqr73rrWqqqqqv//+94BCQ0l///e9wAAoMD//wJUAABgXlznA1RcV1VVBWxEVP////9lZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqpIbCNU/////+6E4Esff///3vcDVAADJdX//xnXAAAAAf//AlQAAAAA//++9wAACED//+JLAIBgXvjWJVxUVVVVRVwEXKqqqqplZMRLqqqqqmVkxEuqqqqqRVwEXKqqqqpFXARcqqqqqtveA1SVNSUF/Oba1v7///8c53jGqqqqqhzneMaqqqqqHOd4xqqqqqqf/y+NCmrqqjvf4kvgV1VXR2QAVIWiqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqkdkAExKKqqq/N4DVC1VVVWd7wNUAP1VVfnW4kvgV1VVR2QAVIWoqqpIbCNU/////2VkxEuqqqqqZWTES6qqqqplZMRLqqqqqoRU5WOqqqqqR2QAVKqqSioiVNrWWFRWVdve+taqqKiqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqq/Oba1r/////83gJUVlxYcEhsI1T////+ZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqolXCRc+qqqqoVb5FyqqqqqRVwlXO////+EVOVjqqqqqoZsBFT/////ZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqpIbCNU////v9rWA1SVNSUN+9661qioqqoa33zeqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqtve+tYiqqqq296IbECAAADa1iJUVVVWXEdkAFSqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqoVb5Fyqqqqqmc4DVFVV1TX73mZkCQIAALjm/Nb/////HOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqvzm2tb/////295EXFBggABwlcBL///99CVcJFyqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqRVwEXKqqqqovjeBL//9/H9veIlwlCQIAut4816qqqqr85trW/////xzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqrb3vrWqqqqqrjm/Nb/////A1T73gkllVVwlcBD///99EdkAEyqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqpEXCVc////ew6F4Uv//38f294DVDUNAwDb3hrXgoIoqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqr85trW//////revNaqoqqq294jXFhgAACZzgNUVVVXWEZcJFz////+RVwlXP////9lZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqRlwkXP////+EVOVjqqqqqkhsI1T///+/V8YDVFVV1SX73iNcJQkCANve+taiqKqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqvveutaqqqqq296IbGAAAAD83gNUVVd4gIlsAlT///u0SGwjVP////9lZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqmVkxEuqqqqqZWTES6qqqqplZMRLqqqqqoZsBFT///+/R2QBVKqqihrb3gNUVdUtAtveRmQJAAAA+t681qqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqrveOteqqqqqPOe61r/////b3sBDeIAAANrWA1RVV3gAcZ3AQ////XhHZAFUqqqqDUhsI1T////6RVwEXKqqqqplZMRLqqqqqmVkxEuqqqqqSGwjVP////9FXCVc////q0dkAFSqqqpicJWgQ///fy+61gNUVdUtAANU295gVlVV/Oba1v7////b3vrWKqqqqrjm/Nb/////HOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqtve+taqKqqqfOYa1//////85trWv/////ve0qVgAAAA294CVF+gAADb3iNUVV+AANveI1xVVeoA+94DVFVV/wDb3gNUVVX/AAJUHecAAKpV294jXFX1AgDb3uFL9QoAALKl+95YVVVV+9661qiqqqp85hrX//////zm2tb/////HOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqtve+taqqqqquOb81v/////73rrWuqqqqtve+taogqqqfOYa1//////85trW//////veutaqqqqq/Oba1v////8c53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqoc53jGqqqqqhzneMaqqqqqHOd4xqqqqqo=" - }, - "etc1": { - "uri": "data:image/ktx;base64,q0tUWCAxMbsNChoKAQIDBAAAAAABAAAAAAAAAGSNAAAHGQAAgAAAAIAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAgAADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AAN3f2Au7s4AA2NvdCfu7AETG2t0hIiIiRKbK3YEiIgAAnMXYp+7uAACcxdin7u4AAKbK3YEiIgAAxtrdISIiRCLY290Ju79EAN3f2As7uwAI2NjYA///AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgD//8AANrc3Qn7s4jEpsrdQTIgIhV3qNgCEe4AAWaq3QAAAAAAZqrdAQAAAABmqt0BAAAAAGaq3QEAAAAAZqrdAQAAAABmqt0BAAAAAGaq3QEAAAAAZqrdAQAAAABpqNgC7iEQAKbK3UECI1Ei2dzdCTu/TIjY2NgC//8AANjY2AP//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANze2A/7M4AApsrdQTIgIhVmqt0BAAAAAWaq3QEAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAABAApsrdQQIjUSLc3tgPM78ACNjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAAzNbYK+yA6Ex+t9hDf+YAAWaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAfrfYQ+a7EADM1tgrCM7EjtjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADE1dhL/IDoTGio2APfnAABZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdIQAAEADE1dhLCO/EjtjY2AP//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AAMzW2CrsgNuAaKjYA/HeAAFmqt0BAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdIQAAEACrwthKCM4AvdjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AP//wAA3d7YD/szoAB+t9hDd3gAAWaq3QEAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABpqNgHTsyAAH2u3hEVd6qEbK3eLUQATIpmqt0AAAAACGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QEAAAAAaqnYCs8QEADW3tgPM78ACtjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgD//8AAKbK3UQA6AHDZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAfr7fbAM/4QD4+PgDE/MAAPj4+AMQEQAAxtrtYAAxCD5mqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAaqzdKI4APBDY2NgD//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AP//wAA2tzdCOj/wwBmqt0BAAAAAWaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAH6+3ywMz3m/+Pj4AojMAAD4+PgDiAgAANbq7WAA4AHHZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0BAAAAAGaq3QAAABAArc3dYP+OAAzY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgD//8AAKbK3UAA4AHDZqrdAQAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QEAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QEAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAAB2ut1hIzMQAOfr/U2I7hET1+r9haoIIVVmqt0hAAAAAWaq3QEAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAQAAAABmqt0AAAAAAGqs3QgOADwQ2NjYAv//AADY2NgC//8AANjY2AL//wAA19/YC/MzoAB3qNgiAPwAAWaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAIAAaqzeDQRMiMRurt8JRESIjGyt3g1EREyIaajYB953AAhmqt0gAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGio2AJZ5oAAa63eEURMiER+rt8tR3eQiNjY2CL/8wAI2NjYAv//AADY2NgC//8AANnb3Qjw/8MAZqrdAQAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAaanYC37MgACuz+9tARfyF/j4+AMAAAAA+Pj4AwAAAAD4+PgCAAAAAM/f72VxABMjlMXnovdzAAhmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZ6vdDH8AgAC/3+9pARcyF/j4+AIAAAAA+Pj4AxEQAADt7e0g/3AAHtjY2AL//wAA2NjYAv//AADH2t0goOABgGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAACAAJ7P79ABNwGA+Pj4AoERAAD4+P8SgMwAAPz8+hGIiMzE6vHqgkyIAAj4+PgDEQAAANPj8Y9xADDvdrrdYAD3AAhmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABoqNgCcACAALvT6nYBN/zX+Pj4AyERAAD/+P8WgOQAAPv8+hGIiEzE7f3tYPGIDA/Y2NgD//8AANjY2AL//wAAtsrdIADwAO9mqt0BAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QEAAAAAfL3ebBN/64D4+PgjxMkAAPj4+AL4gIAAt8mklO7IAdtYgCgDAAAAAJaoYuWO/1AA/f78FwAOzEj4+PgCMAwAAOn8/vRzEAwAZqrdAAAAAAhmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QEAAAAAjb7edBM/yYD4+PgDAzMAAP/4/wqAhIAApsmUkf/oMhdYgCgCAAAAAGuMOkwO7w4Q2NjYA///AADY2NgC//8AAKbK3YAA8AAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAAB5rN45B/6gAOrx+GIXAQCB+Pj4AvcVAADM3LSS/IDtv1iAKAIAAAAAWIAoAgAAAABYgCgDAAAAAIObW16M7zH/+Pj/BwAZgAj4+PgD+YAAAMfb7Yz3MQicZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAAB7s9lXF//oAPHx+KMABQAA+Pj4A9AIAAC81KSS/MDtt1iAIQMAAAAAWIAoAwAAAABZiygYD4AAANjY2AP//wAA2NjYAv//AACmyt2AAPAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGqp2A8t3oAAz9/vgN8TAOn4+PgCAAsAAOv86vHoAMjMZ483YgD+AAFYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAQAKO7k5IIz/ve+Pj4A4KPAAD+//8MEHyQAHur2Tf/cQAOZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdAAAAAABmqt0AAAAAAGuq2RMe3IAA2+rxpwAXIwn4+PgDfvoAAPr7+dDogNsAZ48oIzMyAAFYgCgCAAAAAFiAKAIAAAAAWYsoGA8AAADY2NgD//8AANjY2AL//wAAtsrdIADwAH9mqt0AAAAAAGaq3QAAAAAAZqrdAQAAgACz0+J6ATf8l/j4+AIAAAAA/f78F+MwgMyEpVTD/+jMzViAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABnjzdDIzMQAOz03PcAjsSM+Pj4AgAAAAD8/f4QMfSeAHa63WAA9wAIZqrdAAAAAABmqt0AAAAAAGaq3QAAAAAAZqrdBQAAgACvz+9oARcB2/j4+AMADwAA/f78GekApMx8nUyjMzAABViAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFuLKQgPAPcA2NjYA///AADY2NgC//8AANfa3QTw/wgwZqrdAAAAAABmqt0AAAAAAHy93nATP+mA+Pj4AhARAAD4+P8GgMCRAJy8fPb+yAATWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAACEpVTHjv8QAN/v36DiDAB7+Pj4AwEAAADp/P50cxAMHmaq3QEAAAAIZqrdAAAAAABmqt0AAAAAAI2+35ATP+mA+Pj4AhARAAD///4ZoAEAAKa4g4T+6AHbWIAoAwAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABsjTwEBx8DgNjY2AL//wAA2NjYAv//AADa3N0Icf/4AHeo2CLAdwAIg7PaVxd/6ADv///hSI0AAPj4+APIQAAAxNyskvyA7bdYgCgDAAAAAFiAKAMAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAAB7m1u6jO8xAPj4/w8ACAAA+Pj4AxIcAACNvu+19xBAjmmo2AdsxgAIe73ebRd/6ETx+PiiEQEAAPj4+APIgAAAvNScsv7A7bdYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAMAAAAAja1tYP8PAMfY2NgD//8AANjY2AL//wAA2NjYA4//EADw8fEOERwA6vj4+CJCAQAA+Pj4AtljAADr7Op16ADpX2ePN0MzMgABWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAwAAAACjs4uSCM973vj4+AKIjwAA+Pj4AhGMAAD/+PhGERHJAPj4+AIDMwAA+Pj4A4iAAADq++hw6IDbg2ePKCIA/gABWIAoAwAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABZgSkLDMyAAMrKw2L/AwAB2NjYAv//AADY2NgC//8AANjY2AL//wAA7+/vIAzPCJ74+PgDyAiAAPr7+FHogOhMdZ1MozMiAAFYgCgDAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAZ48oIyMzEADE3KyTiM573v///hkAKgAA+Pj4AwAAAAD4+PgCiACAAOn75/HogMhEZZhCgTMyAAFYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWospDAcA44DY2NgD//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANzc2wxg/3EAhaZcru7uARFYgCgDAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAwAAAABiiisy7u8REKW4kuEiYgEAfZ5Uru7uARFYgCgDAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgDAACAAK29jYD/FwCD2NjYA///AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AAJy0fHL3MAC+WIAoAwAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAwAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAMAAAAAaos5LBN/y4DY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADd3twSMP8QAHWdTIIA8wAIWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAwAAAABXiSQQPwCAAMPKu4PM3wAF2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADa29gsMf+9EFmBKQvMxAAIWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFmBKQp/AIAAnb2NZPc3AdvY2NgD//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYA///AADE1LRucxC9EFmBKQvMxAAIWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWYEpCn8AgACcrHxtATcyF9jY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYA///AADM1MROMRC9EFeJJBHNRAAIWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAMAAAAAWIAoAgAAAABXiSQRReyAAJ29jWXN3zIX2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADd3twSEf8QEGuLOU33MUSOWI8oAgD3AAhYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAwAAAABYgSgDTMyAAGqLOS0Tf+hEvc29gczdAAHY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AALO7q4sxEBEAa4s6LXdxTIpujz5iAHcACFiAKAIAAAAAWIAoAwAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABYgCgCAAAAAFiAKAIAAAAAWIAoAgAAAABZgSoOdwCAAGuLKi0Xd6jEs7uriwETABHY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgD//8AANjY2AL//wAA3t/eChH/EBCdrX1h3d0TMm2NPEV90UACW4wqCUREzMhaiykZREQAAFqLKRlERAAAW4wqCUREjMxtjTwlXV8gRJ2tfWHd3SMRytHJQv8RAQHY2NgD//8AANjY2AP//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AP//wAA2NjYA///AADY2NgD//8AANjY2AP//wAA2NjYA///AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AANjY2AL//wAA2NjYAv//AADY2NgC//8AAA==" - }, - "pvrtc1": { - "uri": "data:image/ktx;base64,q0tUWCAxMbsNChoKAQIDBAAAAAABAAAAAAAAAAGMAAAHGQAAgAAAAIAAAAAAAAAAAAAAAAEAAAABAAAAIAAAABsAAABLVFhPcmllbnRhdGlvbgBTPXIsVD1kLFI9aQAAABAAAP/v/19673vv9/e/93rve+//36/teu9773///99673vv/f///3rve+/3f///eu977////39673vv3+//93rve+//+f+/eu977+v/9/9673vv/v//73vve+/+//z/e+977/7v//9773vvzv//+3vve+/+/+v/e+t87/7//z+7tnvv/+39v3rve+/v//f/eu977/////9673vv7f3//3rve++/9///eu977/7///9773vv7v/W/3vvfO/+//8/u7Z67+776f9773vv/j9/D7u2e+8uCwMAu7J77wAAQFS9stu+HgcHAb2ye+8CAAAAvbJb30CQ8PC7tru28PDw9Lu2u7b/9/v/eu977/7///9773vv/////3rve+/+//8/3b577/7/vx+7tnvzCgEAAL2yeu8eAQAAvbZ77wAAUJS9sru2/v///3vve+/+bwsAvbJ77/77//9773vv/gAAAL2ye+8AAOD0u7a8tvD0wv+7tru2AADv/7u2vLb+///8u7a7tgAAoOS9sru2MDTE+bu2u7YABc/wu7a7tvLw/w+7tru2+P7/87u2u7b+///zu7a7tg4Pzw+7tru2Pg///7u2u7by8B8Pu7a7tj4P3wC7tru2zv/8wLu2u7bw8D8Au7a7tjAA/wC7tru2AAAPD7u2u7YAAM8Au7a7tgAAAAC7tru2zv/z/Hvve+/+/+//e+977z4fPw+9tnvzDgcLA7uye+/+++r/e+987/7+/n77xnrvAgADAL2ye+8AAAAAu7b7ygBA4PC7try28PDA8Lu2u7bw/T/7u7a7tvr///+7tru28PDA8Lu2u7bA9PD0u7a7tv7/D/+7tru2/v//H7u2u7b+Pv4+vbZ7734/Pi+7tnvvABCQ8L22u7bg8ODwu7a8tj4fPx+7tnvvPh8/D7u2e+/AwKAgvba7tiDA4GC7tru2wD3N/7u2u7ay//tfu7a7tjIMMw+7tru2Lh8uALu2vLYyAAQPu7a7th4LLwC7try2AMDA4Luy///Q9PD8u7b///7//PC7tru2/P///7u2u7b+///wu7a7tv7z//+7tru2/v/AH7u2u7Y+Dy8Au7a8tv3+/wC6tru2AACg/7uy//8+DP/Pu7a7tj7///y7tru2AAAP/7u2u7b+/8//u7a7tm///wC6tru2AAACD7u2///////wura7tuDgoAC7try2QNDg+Luy///0/fz/u7b///7//////////v//DwOu///+//////v///4/Px8Frv//CgICACWu//8AABAABa4lrn5///+9tv///v///xHX//8AAAICvbL//wYHDw+9tv//+Pjw8AWu///AwAAABa7//z4///+7tv///v///937///+////e+977/8AAAC6tnvv///7/3rve+/+/ZAAvbJ77wAAoPO9tru2zMD/P7u2u7YAAC8Pu7a8tj4j/Py7tru2/v///3vve+/+///+27p77/7///9773vvf/+//3rve+/QgAAAvbZ77wAAPx+9sru2/v/8+L22e+/QwAAAu7Z77/7/Mw+7tru2Dg/w8Lu2u7b+///wu7a7tvDw/z+7tru28PA/QLu2u7ZwEAAAu7a7tgz/DAC7tru2AAAAQL22HM8+b8z/u7a7tv78P/+7tru2AAA7D7uyu7Y+H3xgu7a7tvz/MAC7tru2AAB8/7u2//9+v89Qu7a7thBUQAC7ttu+//f/8nrve+/+P///e+977//ff/9673vv9/t+/3rve+9/jw//eu977/7//v27unvv/v///3vve+/+////e+977//r//9673vv/////3rve+////f6eu977//3//d673vv/v8//3vve+/+///+e+977//v//9673vv/f///3rve+/w8MDAu7Z77wAAAQG9tty+/u9f/3vve+/+//z8u7Z77xQEPwy7tru2Ph45BLu2u7bw8MDAu7Z784AAAAC6tlzf/v8//3vve+/+////e+977/d/999673vv97///3rve+/+////e+977/7//f+9snvv/s//z3vve+/+////e+977wAAMA+7tru2Pg88D7u2u7aAwMDAurb//8DAwMC7tv//Pg8zH7u2u7Y6H/70u7a7tgAAAAC7tn7fAADP/7u2u7b+//////////7/////////AgADA7u2//8CAwMAu7b///4/FAC7tv//AAD/v7q2u7YAAAAAvbIdxwBQD/+7tru28PDA8Lu2u7bw8PDwu7a7tv78/w+7tru2PA//D7u2u7bgoKAAu7bctgAAAwO7sv//Dg/KBLu2u7YAAAAAu7a7uv7/PwC7tru2MAD/8Lu2u7b+z7zwu7a7tvDw/x+7tru28PD/w7u2u7b8/HAcu7a7tj4PDwa7tru2LgYqALu2vLYwYMDwu7a7tsDwwPC7tru2AAAHC7u2vLY+Cz8Pu7a8tvDwxLW7tru2NA4AD7u2u7Y6Dz8Gu7a7thQAFQC9trq+/Pzw9Luye/Pg8MDAu7Z77/7/3/9773vvzs8PH3vve++AwABAu7Z77wAApP+7tv//bv/vmnvve+9KlkaVe+//+z4PHw+7try2KAopALu2vLZA4OD4u7b///j+/f+7tv//AMDA4Lu2///g9PT8vbb///7///+78////j8/DwWu///+//////////7//w8Fsv//QpBDknvv//9Wl5urd+f//wYBAQAFrv//AAAwEAOqBa7o/PT8Ja577/T89PwFrnzvPh8/H7u2e+8+Hz8vvbJ773AQIAC7try2MAAgBLu2vLY+Pz8/vbJ7774/v7+9tnvvIAQgAL22u7YAQEDQu7b//wAAAIC7tp7ngMDA8Lu2///8////u7b///7//z9pvv//8Pz8/7u2///+////fd///34vLw8lrv//DgMDAAWu//++qwsLe++99woLP69773vv/v///733///8//z+e+///77//v9773vv/v/z/3vve+++Aw8LBaq99y4PPz8Frnzv/r//PyWu//8+CwsABa7//wAAAAADqozCAEDw8AWuBK4AAFBQBa4kspCQkAADrgWu8PTB/AWuBK7O/wbwBa4Erh4LCwMFrv//AgAAACWq//8gELCwBa4ErvDw8DAFrgSuAABQkCWuBbJQkJDwBa4krvD09v0FrgSu/v/P8wWuBK4AABoKBa4lsi4PDw8FrgSu/P78/AWu///w8MDABa7//z4PDw8FrgSuDh8/DwWuBK5AgAAABa7//wAAPA8FrgSucDAABAWuBK4ADc/zBa4ErsLwwAAFrgSuMAA//wWuBK7+//zzBa4Erv7//P8FrgSu/v/P/wWuBK7O/w8PBa4Erj4PADAFrgSu8PDf/wWuBK48AwADBa4ErgIPfx8FrgSu/v///wWuBK7+/wDwBa4Ern5/D/8FrgSu/v/wPwWuBK7+///8e+977/7//+9773vvf////yaye+/+/+//e+97777///9773vv9/3//3rve+/+////e+977/7/z/9773vvAAABAAWueesCAw8PBa5778DwAAAFrgSuAAAAAAWuBK4+P///Ba577/7/2fN773vvAAAAAAWuz84CAx8fBa577//9/f9673vv/f//v3rve+/+v///e+977/+/f/9673vv9//n/3rve+//////eu9779///99673vv/////3rve+/+////e+977/7/8/9773vvf////ySye+/+/9//e+977/7///9773vv///f/Xrve+/+////e+977//3//9673vv/v8AAAWuBK4AAMwJBa4Erg4PAAAFrgSuMAA/AAWuBK4wADDwBa4ErvDw8AAErgSuwAAAAwWuBK7////wBK4ErsDwwPAFrgSuwPMAAAWuBK7+////Ba4Erv7/APAFrgSuMAAA8AWuBK7A8P/wBa4ErvDw8P8FrgSu/v//PwWuBK4AAAMLJa577z6///8FrnzvAAAAAAWuBK4AAAcLBa577/7/7v9773vv7v//83vve+/+////r8p87/7///9773vvwPDwxAWuBK4wEEAABa4krv7/z/8FrgSu//78AASuBK4AC///Ba577/7/7vd773vvAABW/wWum+///57/eu977w4PPz+7tv//vn///722///w8JAAu7a8sgAAAAG8sr7v/////ka2///8/PD0Ba7//wIDDw+9sv//Lh9/v72y//8ODwkJu7a7tjAEMAC7try2AAAAwL2y3/eA4NDwu7b//yAAEAC7try2AICA4Lu2///w/Pz/u7b///7///+f6///0NCAwCWu//8AAAAABa5puv7/z////////v/89AWq//8ABQwPBa4ErjIf8/8FrgSugAAAAAWqmOsAAP//Ba4Ervr///+/9////v/////////+f78vBa7//y4LBwAjrv//bgAAAAWu3vsAAP//BK4ErgAAkKQFrgWu0PT//AWuBK78////u7b///7//z8Fsv//HgcLAgWu//8CAAAAJa7d+34fLwsjrv//DgMDAAWu//8AAJBgBa4kqtDwMGAFrgSuMAAwAAWuBK4wAAAABa4ErvD89PwFrnvv9Pz0/AWue+8ABAIPBa4ErhIEEAAFrgWu+Pz8/AWue+/8//z/Ba577wAAAAAlrmm+AFDg8AWuJa4AEAAJBa4ErgQJOw8FrgSu8PTO/wWuBK7OP88fBa4Erj4APw8FrgSuPg8jAAWuBK4AAABABa6MwgDAQMAFqnvv/P///2vCe+/+/7//e+9778Dw0PAlrnvv8Pz4/QWqfO/u76/ve+987+7///9773vv/v///wWuBK7O/wD/Ba4Erv7///8FrgSu/v/AzwWuBK7y////Ba4Erv7/D/8FrgSuzv8D/wWuBK7+//D/Ba4Erv7///8FrgSuPv8/DwWuBK7+////Ba4Erv7/wGAFrgSuPg/A/wWuBK4O/w8fBa4ErnATAA8FrgSuHx8fAASuBK7+//P/Ba4Erv/v/wAErgSuPg8PHwWuBK4YChkABa4FrgAAVf8Frnzv/v+q/3vve+8B9P7/Ba577/7/6v9773vvJAsaACWuBa4AAID0Ba577wBAgPAFrnvv9P///wWufO/8////rcp87/7/Ps9773vv/v+fr3vve+8O/8//e+977w4PDw8FrgSuPg8vAQWuBa4AAADAJa5X54Dg0PQFrnzvAAAAQAWujMKA4OD8Ba577/T9/f8Frnvv/v+vr3vvfO/8////Ba587/7/n+9773zv/v/P/3vve+/+//3Pe+977+7/P/9773vv/v/+/3vve+/+/z/ze+977//3//9673vv/P///wWyfO/+/+//e+97767///9773vv/v/7P3vve+////z+eu977/4///9773vv///933rve+////n7eu977///v79673vv//+z/3rve+//99//eu9779+//vd673vv/////3rve+/f+t//eu977/////9673vv/////3rve+8=" - } - } - } - } - }, - "materials": { - "Effect-Texture": { - "name": "Texture", - "technique": "technique0", - "values": { - "diffuse": "texture_Image0001", - "shininess": 256, - "specular": [ - 0.20000000298023224, - 0.20000000298023224, - 0.20000000298023224, - 1 - ] - } - } - }, - "meshes": { - "Geometry-mesh002": { - "name": "Mesh", - "primitives": [ - { - "attributes": { - "NORMAL": "accessor_25", - "POSITION": "accessor_23", - "TEXCOORD_0": "accessor_27" - }, - "indices": "accessor_21", - "material": "Effect-Texture", - "mode": 4 - } - ] - } - }, - "nodes": { - "rootNode": { - "children": [], - "meshes": [ - "Geometry-mesh002" - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - } - }, - "programs": { - "program_0": { - "attributes": [ - "a_normal", - "a_position", - "a_texcoord0" - ], - "fragmentShader": "CesiumTexturedBoxTest0FS", - "vertexShader": "CesiumTexturedBoxTest0VS" - } - }, - "samplers": { - "sampler_0": { - "magFilter": 9729, - "minFilter": 9729, - "wrapS": 10497, - "wrapT": 10497 - } - }, - "scene": "defaultScene", - "scenes": { - "defaultScene": { - "nodes": [ - "rootNode" - ] - } - }, - "shaders": { - "CesiumTexturedBoxTest0FS": { - "type": 35632, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0KdW5pZm9ybSBzYW1wbGVyMkQgdV9kaWZmdXNlOw0KdW5pZm9ybSB2ZWM0IHVfc3BlY3VsYXI7DQp1bmlmb3JtIGZsb2F0IHVfc2hpbmluZXNzOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzMgbm9ybWFsID0gbm9ybWFsaXplKHZfbm9ybWFsKTsNCnZlYzQgY29sb3IgPSB2ZWM0KDAuLCAwLiwgMC4sIDAuKTsNCnZlYzQgZGlmZnVzZSA9IHZlYzQoMC4sIDAuLCAwLiwgMS4pOw0KdmVjNCBzcGVjdWxhcjsNCmRpZmZ1c2UgPSB0ZXh0dXJlMkQodV9kaWZmdXNlLCB2X3RleGNvb3JkMCk7DQpzcGVjdWxhciA9IHVfc3BlY3VsYXI7DQpkaWZmdXNlLnh5eiAqPSBtYXgoZG90KG5vcm1hbCx2ZWMzKDAuLDAuLDEuKSksIDAuKTsNCmNvbG9yLnh5eiArPSBkaWZmdXNlLnh5ejsNCmNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBkaWZmdXNlLmEsIGRpZmZ1c2UuYSk7DQpnbF9GcmFnQ29sb3IgPSBjb2xvcjsNCn0NCg==" - }, - "CesiumTexturedBoxTest0VS": { - "type": 35633, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KYXR0cmlidXRlIHZlYzMgYV9wb3NpdGlvbjsNCmF0dHJpYnV0ZSB2ZWMzIGFfbm9ybWFsOw0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdW5pZm9ybSBtYXQzIHVfbm9ybWFsTWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsNCmF0dHJpYnV0ZSB2ZWMyIGFfdGV4Y29vcmQwOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzQgcG9zID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFfcG9zaXRpb24sMS4wKTsNCnZfbm9ybWFsID0gdV9ub3JtYWxNYXRyaXggKiBhX25vcm1hbDsNCnZfdGV4Y29vcmQwID0gYV90ZXhjb29yZDA7DQpnbF9Qb3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHBvczsNCn0NCg==" - } - }, - "skins": {}, - "techniques": { - "technique0": { - "attributes": { - "a_normal": "normal", - "a_position": "position", - "a_texcoord0": "texcoord0" - }, - "parameters": { - "diffuse": { - "type": 35678 - }, - "modelViewMatrix": { - "semantic": "MODELVIEW", - "type": 35676 - }, - "normal": { - "semantic": "NORMAL", - "type": 35665 - }, - "normalMatrix": { - "semantic": "MODELVIEWINVERSETRANSPOSE", - "type": 35675 - }, - "position": { - "semantic": "POSITION", - "type": 35665 - }, - "projectionMatrix": { - "semantic": "PROJECTION", - "type": 35676 - }, - "shininess": { - "type": 5126 - }, - "specular": { - "type": 35666 - }, - "texcoord0": { - "semantic": "TEXCOORD_0", - "type": 35664 - } - }, - "program": "program_0", - "states": { - "enable": [ - 2929, - 2884 - ] - }, - "uniforms": { - "u_diffuse": "diffuse", - "u_modelViewMatrix": "modelViewMatrix", - "u_normalMatrix": "normalMatrix", - "u_projectionMatrix": "projectionMatrix", - "u_shininess": "shininess", - "u_specular": "specular" - } - } - }, - "textures": { - "texture_Image0001": { - "format": 6408, - "internalFormat": 6408, - "sampler": "sampler_0", - "source": "Image0001", - "target": 3553, - "type": 5121 - } - }, - "cameras": {}, - "extensionsUsed": [] -} diff --git a/Specs/Data/Models/Box-Textured-KTX/CesiumTexturedBoxTest.gltf b/Specs/Data/Models/Box-Textured-KTX/CesiumTexturedBoxTest.gltf deleted file mode 100644 index bc2dae58897..00000000000 --- a/Specs/Data/Models/Box-Textured-KTX/CesiumTexturedBoxTest.gltf +++ /dev/null @@ -1,282 +0,0 @@ -{ - "accessors": { - "accessor_21": { - "bufferView": "bufferView_1", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5123, - "count": 36, - "type": "SCALAR" - }, - "accessor_23": { - "bufferView": "bufferView_0", - "byteOffset": 0, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 0.5, - 0.5, - 0.5 - ], - "min": [ - -0.5, - -0.5, - -0.5 - ], - "type": "VEC3" - }, - "accessor_25": { - "bufferView": "bufferView_0", - "byteOffset": 288, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 1, - 1, - 1 - ], - "min": [ - -1, - -1, - -1 - ], - "type": "VEC3" - }, - "accessor_27": { - "bufferView": "bufferView_0", - "byteOffset": 576, - "byteStride": 0, - "componentType": 5126, - "count": 24, - "max": [ - 6, - 1 - ], - "min": [ - 0, - 0 - ], - "type": "VEC2" - } - }, - "animations": {}, - "asset": { - "generator": "collada2gltf@", - "premultipliedAlpha": true, - "profile": { - "api": "WebGL", - "version": "1.0.2" - }, - "version": "1.0" - }, - "bufferViews": { - "bufferView_0": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 768, - "byteOffset": 0, - "target": 34962 - }, - "bufferView_1": { - "buffer": "CesiumTexturedBoxTest", - "byteLength": 72, - "byteOffset": 768, - "target": 34963 - } - }, - "buffers": { - "CesiumTexturedBoxTest": { - "type": "arraybuffer", - "byteLength": 840, - "uri": "data:application/octet-stream;base64,AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAL8AAAC/AAAAPwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAADAQAAAAAAAAKBAAAAAAAAAwED+/38/AACgQP7/fz8AAIBAAAAAAAAAoEAAAAAAAACAQAAAgD8AAKBAAACAPwAAAEAAAAAAAACAPwAAAAAAAABAAACAPwAAgD8AAIA/AABAQAAAAAAAAIBAAAAAAAAAQEAAAIA/AACAQAAAgD8AAEBAAAAAAAAAAEAAAAAAAABAQAAAgD8AAABAAACAPwAAAAAAAAAAAAAAAP7/fz8AAIA/AAAAAAAAgD/+/38/AAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUA" - } - }, - "images": { - "Image0001": { - "name": "Image0001", - "uri": "Image0001.png", - "extras": { - "compressedImage3DTiles": { - "s3tc": { - "uri": "Image0001-s3tc.ktx" - }, - "etc1": { - "uri": "Image0001-etc1.ktx" - }, - "pvrtc1": { - "uri": "Image0001-pvrtc1.ktx" - } - } - } - } - }, - "materials": { - "Effect-Texture": { - "name": "Texture", - "technique": "technique0", - "values": { - "diffuse": "texture_Image0001", - "shininess": 256, - "specular": [ - 0.20000000298023224, - 0.20000000298023224, - 0.20000000298023224, - 1 - ] - } - } - }, - "meshes": { - "Geometry-mesh002": { - "name": "Mesh", - "primitives": [ - { - "attributes": { - "NORMAL": "accessor_25", - "POSITION": "accessor_23", - "TEXCOORD_0": "accessor_27" - }, - "indices": "accessor_21", - "material": "Effect-Texture", - "mode": 4 - } - ] - } - }, - "nodes": { - "rootNode": { - "children": [], - "meshes": [ - "Geometry-mesh002" - ], - "matrix": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - } - }, - "programs": { - "program_0": { - "attributes": [ - "a_normal", - "a_position", - "a_texcoord0" - ], - "fragmentShader": "CesiumTexturedBoxTest0FS", - "vertexShader": "CesiumTexturedBoxTest0VS" - } - }, - "samplers": { - "sampler_0": { - "magFilter": 9729, - "minFilter": 9729, - "wrapS": 10497, - "wrapT": 10497 - } - }, - "scene": "defaultScene", - "scenes": { - "defaultScene": { - "nodes": [ - "rootNode" - ] - } - }, - "shaders": { - "CesiumTexturedBoxTest0FS": { - "type": 35632, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0KdW5pZm9ybSBzYW1wbGVyMkQgdV9kaWZmdXNlOw0KdW5pZm9ybSB2ZWM0IHVfc3BlY3VsYXI7DQp1bmlmb3JtIGZsb2F0IHVfc2hpbmluZXNzOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzMgbm9ybWFsID0gbm9ybWFsaXplKHZfbm9ybWFsKTsNCnZlYzQgY29sb3IgPSB2ZWM0KDAuLCAwLiwgMC4sIDAuKTsNCnZlYzQgZGlmZnVzZSA9IHZlYzQoMC4sIDAuLCAwLiwgMS4pOw0KdmVjNCBzcGVjdWxhcjsNCmRpZmZ1c2UgPSB0ZXh0dXJlMkQodV9kaWZmdXNlLCB2X3RleGNvb3JkMCk7DQpzcGVjdWxhciA9IHVfc3BlY3VsYXI7DQpkaWZmdXNlLnh5eiAqPSBtYXgoZG90KG5vcm1hbCx2ZWMzKDAuLDAuLDEuKSksIDAuKTsNCmNvbG9yLnh5eiArPSBkaWZmdXNlLnh5ejsNCmNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBkaWZmdXNlLmEsIGRpZmZ1c2UuYSk7DQpnbF9GcmFnQ29sb3IgPSBjb2xvcjsNCn0NCg==" - }, - "CesiumTexturedBoxTest0VS": { - "type": 35633, - "uri": "data:text/plain;base64,cHJlY2lzaW9uIGhpZ2hwIGZsb2F0Ow0KYXR0cmlidXRlIHZlYzMgYV9wb3NpdGlvbjsNCmF0dHJpYnV0ZSB2ZWMzIGFfbm9ybWFsOw0KdmFyeWluZyB2ZWMzIHZfbm9ybWFsOw0KdW5pZm9ybSBtYXQzIHVfbm9ybWFsTWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfbW9kZWxWaWV3TWF0cml4Ow0KdW5pZm9ybSBtYXQ0IHVfcHJvamVjdGlvbk1hdHJpeDsNCmF0dHJpYnV0ZSB2ZWMyIGFfdGV4Y29vcmQwOw0KdmFyeWluZyB2ZWMyIHZfdGV4Y29vcmQwOw0Kdm9pZCBtYWluKHZvaWQpIHsNCnZlYzQgcG9zID0gdV9tb2RlbFZpZXdNYXRyaXggKiB2ZWM0KGFfcG9zaXRpb24sMS4wKTsNCnZfbm9ybWFsID0gdV9ub3JtYWxNYXRyaXggKiBhX25vcm1hbDsNCnZfdGV4Y29vcmQwID0gYV90ZXhjb29yZDA7DQpnbF9Qb3NpdGlvbiA9IHVfcHJvamVjdGlvbk1hdHJpeCAqIHBvczsNCn0NCg==" - } - }, - "skins": {}, - "techniques": { - "technique0": { - "attributes": { - "a_normal": "normal", - "a_position": "position", - "a_texcoord0": "texcoord0" - }, - "parameters": { - "diffuse": { - "type": 35678 - }, - "modelViewMatrix": { - "semantic": "MODELVIEW", - "type": 35676 - }, - "normal": { - "semantic": "NORMAL", - "type": 35665 - }, - "normalMatrix": { - "semantic": "MODELVIEWINVERSETRANSPOSE", - "type": 35675 - }, - "position": { - "semantic": "POSITION", - "type": 35665 - }, - "projectionMatrix": { - "semantic": "PROJECTION", - "type": 35676 - }, - "shininess": { - "type": 5126 - }, - "specular": { - "type": 35666 - }, - "texcoord0": { - "semantic": "TEXCOORD_0", - "type": 35664 - } - }, - "program": "program_0", - "states": { - "enable": [ - 2929, - 2884 - ] - }, - "uniforms": { - "u_diffuse": "diffuse", - "u_modelViewMatrix": "modelViewMatrix", - "u_normalMatrix": "normalMatrix", - "u_projectionMatrix": "projectionMatrix", - "u_shininess": "shininess", - "u_specular": "specular" - } - } - }, - "textures": { - "texture_Image0001": { - "format": 6408, - "internalFormat": 6408, - "sampler": "sampler_0", - "source": "Image0001", - "target": 3553, - "type": 5121 - } - }, - "cameras": {}, - "extensionsUsed": [] -} diff --git a/Specs/Data/Models/Box-Textured-KTX/Image0001-etc1.ktx b/Specs/Data/Models/Box-Textured-KTX/Image0001-etc1.ktx deleted file mode 100644 index b5672fe6068..00000000000 Binary files a/Specs/Data/Models/Box-Textured-KTX/Image0001-etc1.ktx and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-KTX/Image0001-pvrtc1.ktx b/Specs/Data/Models/Box-Textured-KTX/Image0001-pvrtc1.ktx deleted file mode 100644 index f67b26e4931..00000000000 Binary files a/Specs/Data/Models/Box-Textured-KTX/Image0001-pvrtc1.ktx and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-KTX/Image0001-s3tc.ktx b/Specs/Data/Models/Box-Textured-KTX/Image0001-s3tc.ktx deleted file mode 100644 index ae4d0f4eebc..00000000000 Binary files a/Specs/Data/Models/Box-Textured-KTX/Image0001-s3tc.ktx and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-KTX/Image0001.png b/Specs/Data/Models/Box-Textured-KTX/Image0001.png deleted file mode 100644 index 073fcf40a18..00000000000 Binary files a/Specs/Data/Models/Box-Textured-KTX/Image0001.png and /dev/null differ diff --git a/Specs/Data/Models/Box-Textured-KTX2-Basis/CesiumTexturedBoxTest.gltf b/Specs/Data/Models/Box-Textured-KTX2-Basis/CesiumTexturedBoxTest.gltf new file mode 100644 index 00000000000..3b71938950b --- /dev/null +++ b/Specs/Data/Models/Box-Textured-KTX2-Basis/CesiumTexturedBoxTest.gltf @@ -0,0 +1,210 @@ +{ + "asset": { + "generator": "COLLADA2GLTF", + "version": "2.0" + }, + "extensionsUsed": [ + "KHR_texture_basisu" + ], + "extensionsRequired": [ + "KHR_texture_basisu" + ], + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "matrix": [ + 1, + 0, + 0, + 0, + 0, + 0, + -1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + { + "mesh": 0 + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "NORMAL": 1, + "POSITION": 2, + "TEXCOORD_0": 3 + }, + "indices": 0, + "mode": 4, + "material": 0 + } + ], + "name": "Mesh" + } + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 36, + "max": [ + 23 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1, + 1, + 1 + ], + "min": [ + -1, + -1, + -1 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 288, + "componentType": 5126, + "count": 24, + "max": [ + 0.5, + 0.5, + 0.5 + ], + "min": [ + -0.5, + -0.5, + -0.5 + ], + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 6, + 1 + ], + "min": [ + 0, + 0 + ], + "type": "VEC2" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "roughnessFactor": 1 + }, + "name": "Texture", + "emissiveFactor": [ + 0, + 0, + 0 + ], + "alphaMode": "OPAQUE", + "doubleSided": false + } + ], + "textures": [ + { + "sampler": 0, + "source": 0 + } + ], + "images": [ + { + "mimeType": "image/ktx2", + "name": "cesium_logo", + "bufferView": 3 + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9986, + "wrapS": 10497, + "wrapT": 10497 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 72, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 72, + "byteLength": 576, + "byteStride": 12, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 648, + "byteLength": 192, + "byteStride": 8, + "target": 34962 + }, + { + "buffer": 0, + "byteOffset": 840, + "byteLength": 6381 + } + ], + "buffers": [ + { + "name": "box-textured-separate", + "byteLength": 7224, + "uri": "data:application/octet-stream;base64,AAABAAIAAwACAAEABAAFAAYABwAGAAUACAAJAAoACwAKAAkADAANAA4ADwAOAA0AEAARABIAEwASABEAFAAVABYAFwAWABUAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAL8AAAA/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAvwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAvwAAAD8AAAC/AAAAPwAAAD8AAAC/AAAAPwAAAL8AAAA/AAAAvwAAAL8AAAA/AAAAPwAAAL8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAL8AAAA/AAAAvwAAAD8AAAA/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAvwAAAL8AAAC/AAAAvwAAAD8AAAC/AAAAPwAAAL8AAAC/AAAAPwAAAD8AAAC/AADAQAAAAAAAAKBAAAAAAAAAwED+/38/AACgQP7/fz8AAIBAAAAAAAAAoEAAAAAAAACAQAAAgD8AAKBAAACAPwAAAEAAAAAAAACAPwAAAAAAAABAAACAPwAAgD8AAIA/AABAQAAAAAAAAIBAAAAAAAAAQEAAAIA/AACAQAAAgD8AAEBAAAAAAAAAAEAAAAAAAABAQAAAgD8AAABAAACAPwAAAAAAAAAAAAAAAP7/fz8AAIA/AAAAAAAAgD/+/38/q0tUWCAyMLsNChoKAAAAAAEAAACQAQAAkAEAAAAAAAAAAAAAAQAAAAEAAAABAAAAaAAAADwAAACkAAAAaAAAABABAAAAAAAAvAYAAAAAAADMBwAAAAAAACERAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAIAOACjAQIAAwMAAAAAAAAAAAAAAAA/AAAAAAAAAAAA/////0AAPw8AAAAAAAAAAP////8SAAAAS1RYb3JpZW50YXRpb24AcnUAAABJAAAAS1RYd3JpdGVyAHRva3R4IHY0LjAuYmV0YTIuNTMuZ2Y4M2QyODQ1IC8gbGlia3R4IHY0LjAuYmV0YTIuNTEuZzNhMzFkNGRhAAAAAAAAAACPALgCWgEAAAUEAAA1AQAAAAAAAAAAAAAAAAAA1gsAANYLAABLBQAAIEDkgAEYBmHgAqg8XCkJBxgEeEBBAEIw9G0WQyf6nSsDBHgAwA2CMPCTqIjn6OxVQcIHBOABCAAAABABXkrJlPgkOMUEOE2WktQUHqGOZR3iJoZgYLtF2USDkf7vP9hGdwfg1HBtd/f9SESEJKesIODr3GebAHY3AOruc3ctn/aUQzOD964ZElUyiASMEdBkW86ZVUVbFU+3eW1WLDuOQ5JsW6IJ+PaKfcsG0Oa1eTsWEei9QxJKKQSemay1phG+ztzvP80Gv4Q64d+HVZfPAAUPe8TlJPSBdUKb/gAQFA4BT21vc46TJqNpjAHwSWKVyP+MFg3pDMvXuwA4xT21J7IoVhSH5JE04bzyt3B/7OD1FIlciRtwVZrVJPiOJPcjFKxBBJDpoJYgMghdJegF1Aatj5Gfmyg+A7fQ/JCIS4ChDYwY1OJQC9kpeA8kirwH0hcTCkJPv6GbAugH5gpoYFkZAODvP/dP5ky8M54iSBSLU0QYlhWuMI3dP6KNCAbM9illsZhGsDyb7baKvoBxGKzT2F/fYB/BV7Bfq6qqqsAjCh9hoTjwJS5PAt/gFhq71ohoTdggdhs02BH4FoWPLE5ODnXMs3SkGqwH2DHXUpNz4OcHr5zi9zgb3++oewUVqjDCyjC6ItaB2Rt2BxMD2NlhOzATxJGQm7xod1jXFGo0DpywYccBGyvRKBgoBBILE4lBS9wIkEQXIG1swI5A24HNzoGhmxL2HXZw6EYakhFUOEgSOBk6y8GBwoIylWHBgHSCVBP2NUCSiXCIAmKMHTaZDiDQZJJiIMneaZGQG4iIAFsitdAQNATQEGj4gIXJglJQZRkncKCwDhgl4eA1DCQbOMUglCgEfoVH7AgIhaeBHYJLCoJqTAgO2FgYSATukGhIdEwMLKxi4B0CCovADXKRhVXGoINygTbhpBcBC8WGREBREAycqI0Z2DiwLqmBhkUk8YDXuISgsBo2DuysHk7qiefpcsrugEMZ82HiYMw5GHNOmA9jQFEUhXVXTKsoA7OYSi4GOhoSGwZGcblw4ArP2HGHSwoLsyGYOFHBE6oh+DMEiYbWEPSGYOAaz7jCL1BQTBxwMhdZONnhjgvEhFMOKH0Uc0n0UdoTPi/RF+2OSHzGQRsoNrQHcgqqdSJVe30sruGBHYZmCkQO2kARkHjEwAVuKEhMFKvWQrFgFQwFCyYrqWR0BYf1NCDRGQq4Hrid4EhzdFOaGNVhgLoGhsOYzGXePM80kk4nR3aD3QYNATFoAx2JKNpv0CgsCiZrUoOFQk3srGQFhdrwLxQGjdC10CAQMsiekGmnZ+/RzZZGMEg4AuTQ+sAhIAcbLAzawjsihS4arQn2Ji4EnZbJAJuBnoiwowui2YGtE8TWtXi5pJ5x4ItL6/kCfSsM2efwvpuVCYfY2TjjAm0Wt/iAH+MOz/i0yEV7IhJf4xvWAzWoZA21bn+Cx1rn/cm0DOXAKt+X+Uvr48Y//6v1+erCDfv+t3f6uhPWLVbjCoUgQDGIXmxQWPgCHxb3tYoqB3ZssFBUo4LVG9c83DCQCZseJAgagh5kIzJEtEZGp7NLJIkRkkwXPb27ds3IyczBVR9kCv1LGzRIAm1HkP/Rfko+l1E8IoOnrxGs3/0IyZFlvl+qFIOFGjjU6tMyhn0+lbtyNYi/4N98VRC8wAfecnWLcVYe839vX+fEEGhv4D3bZ9zjAy/X2ndxfvpH/DVEXjUV/PZVuNG2u7v7eyJaE2zQCguFAzd4d1LWqqpaS3FC4SN+hs94gxZEQ8BGaK21bYuI+7d89X/8cZ1eql6c3353/6c/XPz908vpDb+2+WHbAAFBXAGN4wjj+G81KlQMzPdxTnq9wYFsrlFYKSig4iBNTq6M0RvcEMw2gWtit3octwM2XOEJWxiTMqXbPSK8zcD+H4EHENRGFUDn7f97ZDcHS8JRSCEUirWtYCvViuNgcdQ6dexUx4qjzghSKEcgQBIICQnk2M3P//vyhXiQ9gkhwPGnJnsSMU1ylVwkkS167NkTyRFyimxNSJQ9ZC25QRKhpiLKQUKkkC1rtiJZs5Y9NT1ImuQOZcsFygUiyVYkS26QAxSiSSZLDpBQlpwhS5Yi2UK2XCGS3CJkjRygLG0OkCKphAiVLOUMOUH4I/U8eJ5CU7bHBX7f3+/3/t61d97ZNO+Y5Z136e195+19553et3eZ9533AwQ8oKhEgSg6c+8bYEB+si6mqx4trCxptY6VfS4QAKuNclxwslEzG8V6XQKK2QCrf1V0R2w84mFrxihwkR7Ec+O+KT5RCAlDDetbe/4QUy7riw8RAnKk1p8Qa/3xNRAspCJfcbPumJ24GlK48NqiQqyjrew64uIIra/gudQAcYfe2cv9L8XZEEJxrUA8FPRkMToy6ys0GRIgcoAyLbKb2yOniSEsDVqksr2JMgbl5f7b9xj2zX202c1CX8tb932u72RvZ9D0WM3c7e5EMRnAWWjNl+JgyCDWWiGybuPKTaMzdyjsqjPn0KSO1iaRjZXarqi0v5MjdP2JK49pEntHpaG42AoEKZSpD0fHDpJVLugRilaaNGr/8vAnsj1wXtDf15YxoIIAiKQWuDR4e+eSFUuLn9PokjRC7ByN8gkXyi9ABKBdJO47g91MPxi2qCWRnlPJPJuIZA/82ty5b8UGETQZFcK68QeXTm0YRG8nz6MDIVrNYuVIlCtMKzhAGExLfLynOwxtHlEMo+jzSZYngkEXdqVHsUQDaSFsN+SboawYd3nyykfF9y0EN6OYOwqlR3IIDFr/aP39HYEXREP09zhvuxIMLlwfRY8E4kBY/wTztZGTG6N8KEJcMXOA0sMaAqO0eKhpOXqfV2RDlJHG4cF61hmDe5tb0aGAIAg+6vHyzoJ37CM0wWThJtE4wFecP6QToCxvLFsjDuQT5fCke6t2mSHcxrmBiwYgPwg8MjUDyZfzpAU2ZzGJ0oGGCQUIQssNLUh+0A4j9t6xOIQPp5ZRApgyBP2np9DP3KSxc4jCYYtYL+ckAC3uaPOJEf0gHqJMNVfagsb5y/6IaURECIXAF1VXUhIFuT6744LhIjq8xf8hAPWhpY9vMUBDyIfob2koWiDch7vIYPwC/l1TqCiTHZy/SJ0tprmCACzteR4bO1SEfhi98g+8MoSHqxsRATfhLeM3BzoSgxi3gJ5FcN6iBAhAK1a/ilASimKOWoPGfU0uDB/ha5bVW6Ik0adf2gF+gr7FFFcQgKUfNIeWJkMxlGmaJkOlpiaRITxcWoAJCoTLDvK5Wa3dOAeviehJ/pqeLZLL+P+Vu3nP3s+vk6lIUw4DpxTevyJWkk4kAOn18v568Im9Iddkxv1og2tdhJ8xiDsFj/j6j7VkWlSG6J0Abq1junAbhYh+XsXY3FoXPF+sR1ZagbkmDUuCNQnnryYgyCVi/LnvD0LYGmLNr6PfbzUgR+Kp1vXrzjMNIjWZjQPOP+vCWWKywMVa2bh+j9/8honnV0+hNm1CGd4YUIKLEspkUMfumdmgVfpoJgMqYNoDT2Ghsr5MhUa0ShnaFgCveXYZJiL4rvLlFyJXrBz/mS8rPe1bwpO5z4zp/VgIeWb7Q5V4gbvrm2F8nfDU1dz7vX/jl9GjlN54cNCuKUN4CnuTAZklSmXhVL517CBl6eaWHWnKlD2Ml8JEnb3MdnuYwez7Uxkaw1zrAH6bn0mWgLictDUbZagPMgqFEVkXMXdrP2wxgC3H2QYpvEz3/INQxsteTUxYIjS+Rg4AmvWDhjujwDPrSWEG8/N7yOgRWmTGlZkGD4MmRhikIERUOG+0C4247jwfJpZRIDGOlbJj7YAt69kIuOx4XvChc6UyKG2zQeKvns4thhM6Iuh9IRksJaeTKI5yAlfcZQNgwEkFBhEVzGbs0Ijrzh8Pe5TxB5nGqW4WcoHQHuexuYguSICosn3EIPqnyaJAokZvd8BdZlkDMSwRtNdPc4Hhih4mplbtusU2/PPo3/ddi7SrSqF5/Koix6bAfF4FA3h3eUECRBXwiEH0A7NoUalBE/3BTz0MSi9GIAVRYrR8tV+G8GXNwSGLiELVm3DAuQegk4FIUrhCY87NKGozvQ6GEzmiQIJKUhivcCW2yMLNEB2G1E0EqcJoVaB7yhDGNYeyQxYVGmXhNPI9dJCyrOaBdDoxQeOos8UMjn5jMjKA6m7WibBwU5HBruIIY98VPzHxw0XaU3hZZakhitLJccPG3EQ6tjmiw5/unwVRYtZBmMHRD5ZRILGko3xsPngQmqMYfpCiRiRaqX/YQyO+cJjbDjISoHpbcCJM/0fEtfNsV4rlriJyM/0OJnqVopUDL80Vhn52ZBHkwIgOr/opyCWi5fzDChrxhfPHSkYyMoDGqW/ukkJodoebQnTBVKbqyWQMot9ZFgH43D8ngptWFNhi1QTDnrxNIlh16Jbb0E4jyqLowkhXbWG5KwsLpkB0GBYuK5hoVH3wjEH0U2cRgOo10R+34EEoSXvRgBTMhMbldPfbyxDGlw7HN8yCUD/bvBPhwWXEJAy+CsFyocLMDDoY7uKIHgHXXrBtv+4kYLkTMwxOBoJS5MtyCtcMYXxpOT5nFqAsKd93PXSQssDvn+47MUfpqCeLGYx+pxmbLDwNOTikMGsgnioqJL5OANuFla4lnH7iI+8t+GXVOw0lYqGSYHFez8wyGJ5m8sPPAd13fgAG51uCWuWofTCDJO0zX0hidXoNqbqEAAOW6twWXQL5h1Qsucy1uJhB+q3IF6tK/63z1aJSuaVpCHfxsgE4Pa1ypBaekjX74NhRZbbbJIDZ7oTWEIklpx/jpjQkGjraZOKyQSzqyWUqNO6G7QukaStDWvbxcyeK1dyTdA7Y/v5Pynr+pRM0tqJuZ4rKhd93ZkncA6Whut72B7fIRXWIWVhRGAp/JTZmvB+cnC7SqJK9XAnpatRg8rXdMGDPJpDIYxl3mqgLT8WnMzN0krWH+EBj+kiR5WQwLDIJRp+SDrz0g+YBwRDHy0+tQbkfOtbGSjIZ7IYpw+SFl3Z2XfQzpWJrzTLyZdcYu3K3WSh94VEJwW3lBkMWgEHUiJ4QFVW34ZCySoTDeIXHp9BTMkfAeQvnP2UvA1SvfueEaCh9/UdTr043S+8XON5bpVdLpkPmwEwVhJfDceFimIVHDfxf/MkHYBfhfI+pmiVgbtGF97uJufDEsJBBZciIaDiw/woDjo+/SWuIVA50U7cD8GYYFODxAjgVo3oLwauLRk2Y8NaCzsN4BJ4xbWaAc0QzDJuzIwBbJwOnRmRhkJNzB9hyXisKI3sBNMZR5UToB7WaIaGXCM592y488Umz82G/eDYkw7w9Scwoi32cQm0dFRqNmW5urAC8ZVUUJOxTYPMbe7XyxEiuE5CObEBSueftvp5wuCJ1eIgQgIp6M89IhmhVOMbNXOR6Mhj6TBXDfwVQo1EOKkdC2NJtRZFByQLdaPmMOLpbifsiyky6p2Z/W1FhIyI63E/8VgC+2PaRMwpCPJSFUfiGMIKU3zl0CnKI0bYAOp1KiX5Cn6sZE7Kq6KJw4P3jZBCO4l7ox9AOTU93ZTB4vk2gKAFvAbvKd/ipD2jSCOlLo6gc4OesZIC4X8jHlc75MpRD4wD781ymIFyz2hVFA/AYs0DLKpxPpg0i2pC57UK0DnBe8qMgxKuwOf4273tkQ2kHA+i95FMQtnS99qKgU9iboDTy3hPevIb/u94QzBobHs1G0TkKF56PwoARC7ITZk6IhrLQfvTaQAKUnt4U9BLxhdmfF+fihQMZLYUEJqS4cSQubC+FGaRutF9/PO/XypOhGNpDq363+CBq6BFg3dOOgqWG2V4Ylm9/l0c8YrhkEhjXnmLlaJy7v7CXYRB7dmNmIX6/TwyG2rTITM6/khzbNAG4ps11Ago2IrvPSoR0wf1V+GnYyrB4LamWeiSsdtcUO0flw0F0QwLEarOpt/DVxk+s9giVqZcDPv9yok2eFCiVQw4UAyr7yUKkWI5VtH1JeqspVZS1xBEZj7tjintHpovR86XIDCBJK1N4XI37wNmpk3qapulmmqb2abJ+p9hkjSkd0DVDVFhf0Sd6oDggE+9wIpcuKFAvwv6aeYD4frEYXq943cMf/PAvMxfHei/cjZv46ihfWQD/oCk4WjuK0RE622sWl+LB0FtfMXDkgeKM0LYixB39AygujtTZVg/wIoFuWCNVIm3Wo95BoLgiFWPbzxcLjiZxWgoBOWoBgQc8f5HWTLkBKHDNozCqnQQKIaGG0vc7yhf0LBLGt00xCjeKO6uNclxwslEzG8V6XfruRbPFJvMg50tJuYsCUsWjurTEv36Xf/zVW8+EZc4WmOZTmryT46Pun8rr6T/0/1WUhKGGptaR7/WSJmMHJO7RYhJ5o/CJfNZ1CSEgR2qqUXAx1vyzADFH6azIVdfGVeSTuBpSTGUV1QXEWi9XFJ0Ei4sjNC28iLXo1GqpINjJxWbBY35hyfVP4mwIGQ+5mA+eT8T+uGuz0kVvMToy02ISuSlTL74vOEiGOOhllAtFkpM4GDKj2lF8y/WeGOvh0/dpuoh7R6XhfNeLh+AsGy5W8nwjGQMqMtVZ3KJ4i5IF/mLnaJSl7Lf4ugDxgXIYueC7mFlsEOHD+4vLiuvdioNLiZUjURbTJFoNUnyjHZ50Eaw5iyUaemr1lufFb2HJNcSNo1AWpHhrG14JAaEenqIEnnsWPRLaqWEuCgnZiXhi5gBlMTaRa8gKEaEfxo5VYJtFhwJDmFYKGekIhInWAZZuLDQfskJIKIrxbgGNYBcNAGYEISV2JmoHmsxxlQgxoSlmq14ZJYALxH8UYop+7dUnCofaivJLCxDISVSc5zmoJIIc4A0hKJVSRIfF+DR77YSgUBVj3bfg5yIDPXNHSEqdVqRO5ZQ2QyuBpGRFHFgN9o0FCZgZhKh4OhGchYGnPXRCVOiKsdb1VO8uDMwCQlasQdAre920cxbISljEZqFD2JMAaANCWKxReH/2eFMnhIWyGE/+NhPZhcMTIKTF+oXz3YYF0pIWd6dw4d4opPVSGd4Y8MgVhLjQFg91yfAeIa6z6ZvhrS7EhbZ4d0YZmnMQ4mp8RocL7zmBvMRFPUt5f2Poi3UPZtPoC3FR9dOcWaEv6wyD+QX6QlxUHdQLRl/sZKjMHn0hLuppSBSKvt5/cgiSoi/ERd2e73NH9CWTvPsT+kJcfP7Nvzmhr+1jDnYE+kJc1L1jpJKjr9MUr+fjoC/ERaXTrNGXPtngvAN9IS6q5aY2jr70FQZRIvpCXFTe7rwU9HXW8H9F/T1bF+JCWxwaHRdkwNuEuHgm7QzvdSEutMXurDJ4CXF5yw2Gh3EKpCUttjz2isK1LqR1N+H8fUkypIWyeL69C1fBOISwTv4+YzLJcZ/bzEJYCIty4FkoABO02xGyalYZJhR0ZrxLhqzQFY0nWVEYfOxpd0JUtW6nbiaCU/HuLESFrCgHVk9BAl2GYUJSg3DbTaQOs25NhqRQFU2deCVFBkz40V8Iqp66kFBEh4rsHoWgEBXloEYkBTm0Ih1ayIkdqrJE4cA/u4sTuRATmmKOnBsKFCUgexFisry0qB1gxvtkSAlF0XjmFUUDsBO0UJkQ0t0nGF20DhC55Y9sT4aM0A9Nz6PHrSDoFEzJ7QoRdZIFjQgxcxSi3vfcCJUhIdRDi+L0okEp6CUQFicVAoqsvXCKG0ci6vB54CjjF+3QOqbeD5cmxELDhKB38a2DmEyIlaMRGTj3DyvjinJod9X1QTAEG5FujOwhxQefcRSwKHaOyigr7v/+VrwhG8oY/dYbSaAYUMFuDyPOPP4uKe4dmTRygdt85K49I5KhtLpHPz2ypiXkxQEZ4yk/HFmLw8Aih3TlPStGRyiZPclm5np32rNHrrSyqV965mhnASbBSYi+1nNbHxC7P6r5eohJaoiLI5WqpRbbP57+Q4W1obRurOK6g4tyw6y4IhUJpR14NDYx51EbTXaqrW0hIEctIOgjsenrI55EM03Tmmmapr5R+cTH4kd1eUEIIaF2vI2liswdxf7Ns3u/62Qe+TfG/OKXjHFyDKnex1LlniU+rrZb3v6gzBUGAAAA" + } + ] +} diff --git a/Specs/Renderer/TextureSpec.js b/Specs/Renderer/TextureSpec.js index e9269a3e2c4..bcd3fc4295a 100644 --- a/Specs/Renderer/TextureSpec.js +++ b/Specs/Renderer/TextureSpec.js @@ -1,6 +1,6 @@ import { Cartesian2 } from "../../Source/Cesium.js"; import { Color } from "../../Source/Cesium.js"; -import { loadKTX } from "../../Source/Cesium.js"; +import { loadKTX2 } from "../../Source/Cesium.js"; import { PixelFormat } from "../../Source/Cesium.js"; import { Resource } from "../../Source/Cesium.js"; import { ClearCommand } from "../../Source/Cesium.js"; @@ -12,6 +12,7 @@ import { TextureMagnificationFilter } from "../../Source/Cesium.js"; import { TextureMinificationFilter } from "../../Source/Cesium.js"; import { TextureWrap } from "../../Source/Cesium.js"; import createContext from "../createContext.js"; +import { FeatureDetection } from "../../Source/Cesium.js"; import { when } from "../../Source/Cesium.js"; describe( @@ -25,9 +26,8 @@ describe( var blueOverRedFlippedImage; var red16x16Image; - var greenDXTImage; - var greenPVRImage; - var greenETC1Image; + var greenKTX2Image; + var greenBasisKTX2Image; var fs = "uniform sampler2D u_texture;" + @@ -86,18 +86,16 @@ describe( }) ); promises.push( - loadKTX("./Data/Images/Green4x4DXT1.ktx").then(function (image) { - greenDXTImage = image; - }) - ); - promises.push( - loadKTX("./Data/Images/Green4x4PVR.ktx").then(function (image) { - greenPVRImage = image; + loadKTX2("./Data/Images/Green4x4.ktx2").then(function (image) { + greenKTX2Image = image; }) ); + promises.push( - loadKTX("./Data/Images/Green4x4ETC1.ktx").then(function (image) { - greenETC1Image = image; + loadKTX2("./Data/Images/Green64x64_Basis255.ktx2").then(function ( + image + ) { + greenBasisKTX2Image = image; }) ); @@ -432,42 +430,18 @@ describe( } }); - it("draws the expected DXT compressed texture color", function () { - if (!context.s3tc) { - return; - } - - texture = new Texture({ - context: context, - pixelFormat: greenDXTImage.internalFormat, - source: { - width: greenDXTImage.width, - height: greenDXTImage.height, - arrayBufferView: greenDXTImage.bufferView, - }, - }); - - expect(texture.sizeInBytes).toBe(8); - - expect({ - context: context, - fragmentShader: fs, - uniformMap: uniformMap, - }).contextToRender([0, 255, 0, 255]); - }); - - it("draws the expected PVR compressed texture color", function () { + it("draws the expected Basis compressed texture color", function () { if (!context.pvrtc) { return; } texture = new Texture({ context: context, - pixelFormat: greenPVRImage.internalFormat, + pixelFormat: greenBasisKTX2Image.internalFormat, source: { - width: greenPVRImage.width, - height: greenPVRImage.height, - arrayBufferView: greenPVRImage.bufferView, + width: greenBasisKTX2Image.width, + height: greenBasisKTX2Image.height, + arrayBufferView: greenBasisKTX2Image.bufferView, }, }); @@ -480,18 +454,18 @@ describe( }).contextToRender([0, 255, 0, 255]); }); - it("draws the expected ETC1 compressed texture color", function () { + it("draws the expected KTX2 compressed texture color", function () { if (!context.etc1) { return; } texture = new Texture({ context: context, - pixelFormat: greenETC1Image.internalFormat, + pixelFormat: greenKTX2Image.internalFormat, source: { - width: greenETC1Image.width, - height: greenETC1Image.height, - arrayBufferView: greenETC1Image.bufferView, + width: greenKTX2Image.width, + height: greenKTX2Image.height, + arrayBufferView: greenKTX2Image.bufferView, }, }); @@ -1121,70 +1095,6 @@ describe( }).toThrowDeveloperError(); }); - it("throws when creating compressed texture when s3tc is unsupported", function () { - if (!context.s3tc) { - expect(function () { - texture = new Texture({ - context: context, - width: greenDXTImage.width, - height: greenDXTImage.height, - pixelFormat: greenDXTImage.internalFormat, - source: { - arrayBufferView: greenDXTImage.bufferView, - }, - }); - }).toThrowDeveloperError(); - } - }); - - it("throws when creating compressed texture when pvrtc is unsupported", function () { - if (!context.pvrtc) { - expect(function () { - texture = new Texture({ - context: context, - width: greenPVRImage.width, - height: greenPVRImage.height, - pixelFormat: greenPVRImage.internalFormat, - source: { - arrayBufferView: greenPVRImage.bufferView, - }, - }); - }).toThrowDeveloperError(); - } - }); - - it("throws when creating compressed texture when etc1 is unsupported", function () { - if (!context.etc1) { - expect(function () { - texture = new Texture({ - context: context, - width: greenETC1Image.width, - height: greenETC1Image.height, - pixelFormat: greenETC1Image.internalFormat, - source: { - arrayBufferView: greenETC1Image.bufferView, - }, - }); - }).toThrowDeveloperError(); - } - }); - - it("throws when creating compressed texture and the array buffer is not the right length", function () { - if (context.s3tc) { - expect(function () { - texture = new Texture({ - context: context, - width: greenDXTImage.width + 1, - height: greenDXTImage.height, - pixelFormat: greenDXTImage.internalFormat, - source: { - arrayBufferView: greenDXTImage.bufferView, - }, - }); - }).toThrowDeveloperError(); - } - }); - it("throws when creating from the framebuffer with an invalid pixel format", function () { expect(function () { texture = Texture.fromFramebuffer({ @@ -1266,14 +1176,14 @@ describe( }); it("throws when copying to a texture from the framebuffer with a compressed pixel format", function () { - if (context.s3tc) { + if (FeatureDetection.supportsBasis) { texture = new Texture({ context: context, - width: greenDXTImage.width, - height: greenDXTImage.height, - pixelFormat: greenDXTImage.internalFormat, + width: greenBasisKTX2Image.width, + height: greenBasisKTX2Image.height, + pixelFormat: greenBasisKTX2Image.internalFormat, source: { - arrayBufferView: greenDXTImage.bufferView, + arrayBufferView: greenBasisKTX2Image.bufferView, }, }); @@ -1461,14 +1371,14 @@ describe( }); it("throws when copyFrom is given a source with a compressed pixel format", function () { - if (context.s3tc) { + if (FeatureDetection.supportsBasis) { texture = new Texture({ context: context, - width: greenDXTImage.width, - height: greenDXTImage.height, - pixelFormat: greenDXTImage.internalFormat, + width: greenBasisKTX2Image.width, + height: greenBasisKTX2Image.height, + pixelFormat: greenBasisKTX2Image.internalFormat, source: { - arrayBufferView: greenDXTImage.bufferView, + arrayBufferView: greenBasisKTX2Image.bufferView, }, }); @@ -1496,14 +1406,14 @@ describe( }); it("throws when generating mipmaps with a compressed pixel format", function () { - if (context.s3tc) { + if (FeatureDetection.supportsBasis) { texture = new Texture({ context: context, - width: greenDXTImage.width, - height: greenDXTImage.height, - pixelFormat: greenDXTImage.internalFormat, + width: greenBasisKTX2Image.width, + height: greenBasisKTX2Image.height, + pixelFormat: greenBasisKTX2Image.internalFormat, source: { - arrayBufferView: greenDXTImage.bufferView, + arrayBufferView: greenBasisKTX2Image.bufferView, }, }); diff --git a/Specs/Scene/MaterialSpec.js b/Specs/Scene/MaterialSpec.js index 5ac0984a7d3..b371c464982 100644 --- a/Specs/Scene/MaterialSpec.js +++ b/Specs/Scene/MaterialSpec.js @@ -10,6 +10,7 @@ import { Resource } from "../../Source/Cesium.js"; import { Material } from "../../Source/Cesium.js"; import { MaterialAppearance } from "../../Source/Cesium.js"; import { PolylineCollection } from "../../Source/Cesium.js"; +import { FeatureDetection } from "../../Source/Cesium.js"; import { Primitive } from "../../Source/Cesium.js"; import { TextureMagnificationFilter } from "../../Source/Cesium.js"; import { TextureMinificationFilter } from "../../Source/Cesium.js"; @@ -369,13 +370,8 @@ describe( it("creates a material with an ktx compressed image uniform", function () { var compressedUrl; - var context = scene.context; - if (context.s3tc) { - compressedUrl = "./Data/Images/Green4x4DXT1.ktx"; - } else if (context.etc1) { - compressedUrl = "./Data/Images/Green4x4ETC1.ktx"; - } else if (context.pvrtc) { - compressedUrl = "./Data/Images/Green4x4PVR.ktx"; + if (FeatureDetection.supportsBasis) { + compressedUrl = "./Data/Images/Green4x4.ktx2"; } else { return; } @@ -392,25 +388,6 @@ describe( renderMaterial(material); }); - it("creates a material with an crn compressed image uniform", function () { - var context = scene.context; - if (!context.s3tc) { - return; - } - - var compressedUrl = "./Data/Images/Green4x4.crn"; - var material = new Material({ - strict: true, - fabric: { - type: "DiffuseMap", - uniforms: { - image: compressedUrl, - }, - }, - }); - renderMaterial(material); - }); - it("creates a material with a cube map uniform", function () { var material = new Material({ strict: true, diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index 5fb5e6bd56a..9ef051faa45 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -49,18 +49,8 @@ describe( "./Data/Models/Box-Textured-Separate/CesiumTexturedBoxTest.gltf"; var texturedBoxBasePathUrl = "./Data/Models/Box-Textured-BasePath/CesiumTexturedBoxTest.gltf"; - var texturedBoxKTXUrl = - "./Data/Models/Box-Textured-KTX/CesiumTexturedBoxTest.gltf"; - var texturedBoxKTXBinaryUrl = - "./Data/Models/Box-Textured-KTX-Binary/CesiumTexturedBoxTest.glb"; - var texturedBoxKTXEmbeddedUrl = - "./Data/Models/Box-Textured-KTX-Embedded/CesiumTexturedBoxTest.gltf"; - var texturedBoxCRNUrl = - "./Data/Models/Box-Textured-CRN/CesiumTexturedBoxTest.gltf"; - var texturedBoxCRNBinaryUrl = - "./Data/Models/Box-Textured-CRN-Binary/CesiumTexturedBoxTest.glb"; - var texturedBoxCRNEmbeddedUrl = - "./Data/Models/Box-Textured-CRN-Embedded/CesiumTexturedBoxTest.gltf"; + var texturedBoxKTX2Url = + "./Data/Models/Box-Textured-KTX2-Basis/CesiumTexturedBoxTest.gltf"; var texturedBoxCustomUrl = "./Data/Models/Box-Textured-Custom/CesiumTexturedBoxTest.gltf"; var texturedBoxKhrBinaryUrl = @@ -802,7 +792,7 @@ describe( return loadModel(boomBoxUrl).then(function (m) { m.scale = 20.0; // Source model is very small, so scale up a bit m.specularEnvironmentMaps = - "./Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx"; + "./Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2"; return pollToPromise(function () { scene.highDynamicRange = true; @@ -1365,67 +1355,8 @@ describe( }); }); - it("renders textured box with external KTX texture", function () { - return loadModel(texturedBoxKTXUrl, { - incrementallyLoadTextures: false, - }).then(function (m) { - verifyRender(m); - expect(Object.keys(m._rendererResources.textures).length).toBe(1); - primitives.remove(m); - }); - }); - - it("renders textured box with embedded binary KTX texture", function () { - return loadModel(texturedBoxKTXBinaryUrl, { - incrementallyLoadTextures: false, - }).then(function (m) { - verifyRender(m); - expect(Object.keys(m._rendererResources.textures).length).toBe(1); - primitives.remove(m); - }); - }); - - it("renders textured box with embedded base64 encoded KTX texture", function () { - return loadModel(texturedBoxKTXEmbeddedUrl, { - incrementallyLoadTextures: false, - }).then(function (m) { - verifyRender(m); - expect(Object.keys(m._rendererResources.textures).length).toBe(1); - primitives.remove(m); - }); - }); - - it("renders textured box with external CRN texture", function () { - if (!scene.context.s3tc) { - return; - } - return loadModel(texturedBoxCRNUrl, { - incrementallyLoadTextures: false, - }).then(function (m) { - verifyRender(m); - expect(Object.keys(m._rendererResources.textures).length).toBe(1); - primitives.remove(m); - }); - }); - - it("renders textured box with embedded binary CRN texture", function () { - if (!scene.context.s3tc) { - return; - } - return loadModel(texturedBoxCRNBinaryUrl, { - incrementallyLoadTextures: false, - }).then(function (m) { - verifyRender(m); - expect(Object.keys(m._rendererResources.textures).length).toBe(1); - primitives.remove(m); - }); - }); - - it("renders textured box with embedded base64 encoded CRN texture", function () { - if (!scene.context.s3tc) { - return; - } - return loadModel(texturedBoxCRNEmbeddedUrl, { + it("renders textured box with embedded KTX2 texture", function () { + return loadModel(texturedBoxKTX2Url, { incrementallyLoadTextures: false, }).then(function (m) { verifyRender(m); diff --git a/Specs/Scene/OctahedralProjectedCubeMapSpec.js b/Specs/Scene/OctahedralProjectedCubeMapSpec.js index 95a2c6fb4a9..3e743353401 100644 --- a/Specs/Scene/OctahedralProjectedCubeMapSpec.js +++ b/Specs/Scene/OctahedralProjectedCubeMapSpec.js @@ -14,7 +14,7 @@ describe( var octahedralMap; var environmentMapUrl = - "./Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx"; + "./Data/EnvironmentMap/kiara_6_afternoon_2k_ibl.ktx2"; var fsOctahedralMap = "uniform sampler2D projectedMap;" + "uniform vec2 textureSize;" + @@ -113,7 +113,7 @@ describe( sampleOctahedralMap(octahedralMap, directionFlipY, lod, function ( octahedralMapColor ) { - return expect(cubeMapColor).toEqualEpsilon(octahedralMapColor, 5); + return expect(cubeMapColor).toEqualEpsilon(octahedralMapColor, 7); }); }); } @@ -130,8 +130,8 @@ describe( octahedralMap.update(frameState); return octahedralMap.ready; }).then(function () { - expect(octahedralMap.texture.width).toEqual(770); - expect(octahedralMap.texture.height).toEqual(512); + expect(octahedralMap.texture.width).toEqual(1127); + expect(octahedralMap.texture.height).toEqual(750); expect(octahedralMap.maximumMipmapLevel).toEqual(5); }); }); diff --git a/gulpfile.cjs b/gulpfile.cjs index 4d8a703910a..8078a16c61b 100644 --- a/gulpfile.cjs +++ b/gulpfile.cjs @@ -73,7 +73,6 @@ var sourceFiles = [ "!Source/ThirdParty/Workers/**", "!Source/ThirdParty/google-earth-dbroot-parser.js", "!Source/ThirdParty/pako_inflate.js", - "!Source/ThirdParty/crunch.js", ]; var watchedFiles = [ @@ -125,7 +124,7 @@ function rollupWarning(message) { // Ignore eval warnings in third-party code we don't have control over if ( message.code === "EVAL" && - /(protobuf-minimal|crunch)\.js$/.test(message.loc.file) + /(protobuf-minimal)\.js$/.test(message.loc.file) ) { return; } @@ -731,7 +730,7 @@ function getMimeType(filename) { return { type: "text/plain", compress: true }; } else if (/\.(czml|topojson)$/i.test(filename)) { return { type: "application/json", compress: true }; - } else if (/\.(crn|tgz)$/i.test(filename)) { + } else if (/\.(tgz)$/i.test(filename)) { return { type: "application/octet-stream", compress: false }; } diff --git a/server.cjs b/server.cjs index 2c48004c1d4..b26260e35aa 100644 --- a/server.cjs +++ b/server.cjs @@ -46,8 +46,7 @@ { "application/json": ["czml", "json", "geojson", "topojson"], "application/wasm": ["wasm"], - "image/crn": ["crn"], - "image/ktx": ["ktx"], + "image/ktx2": ["ktx2"], "model/gltf+json": ["gltf"], "model/gltf-binary": ["bgltf", "glb"], "application/octet-stream": [ diff --git a/web.config b/web.config index 9330dbc8efc..29f8221b142 100644 --- a/web.config +++ b/web.config @@ -40,10 +40,8 @@ - - - - + +