From 568285fbe70044e2e0132017049c4607828988d0 Mon Sep 17 00:00:00 2001 From: LokeshRanjan Date: Thu, 12 Feb 2026 00:18:50 +0530 Subject: [PATCH 1/6] feat: add number/int16/base/mul --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../int16/base/mul/benchmark/benchmark.js | 95 +++++++++ .../number/int16/base/mul/docs/repl.txt | 25 +++ .../int16/base/mul/docs/types/index.d.ts | 37 ++++ .../number/int16/base/mul/docs/types/test.ts | 55 ++++++ .../number/int16/base/mul/examples/index.js | 39 ++++ .../number/int16/base/mul/lib/index.js | 51 +++++ .../@stdlib/number/int16/base/mul/lib/main.js | 28 +++ .../number/int16/base/mul/lib/polyfill.js | 132 +++++++++++++ .../number/int16/base/mul/package.json | 186 ++++++++++++++++++ .../int16/base/mul/test/fixtures/c/Makefile | 131 ++++++++++++ .../int16/base/mul/test/fixtures/c/data.json | 0 .../number/int16/base/mul/test/test.js | 77 ++++++++ .../int16/base/mul/test/test.polyfill.js | 55 ++++++ 13 files changed, 911 insertions(+) create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/package.json create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/Makefile create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/data.json create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/test/test.js create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/test/test.polyfill.js diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/benchmark/benchmark.js b/lib/node_modules/@stdlib/number/int16/base/mul/benchmark/benchmark.js new file mode 100644 index 000000000000..06d5cadfa44c --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/benchmark/benchmark.js @@ -0,0 +1,95 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var minstd = require( '@stdlib/random/base/minstd' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var format = require( '@stdlib/string/format' ); +var pkg = require( './../package.json' ).name; +var mul = require( './../lib' ); +var polyfill = require( './../lib/polyfill.js' ); + + +// MAIN // + +bench( pkg, function benchmark( b ) { + var x; + var y; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = minstd(); + y = mul( x|0, x|0 ); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s::polyfill', pkg ), function benchmark( b ) { + var x; + var y; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = minstd(); + y = polyfill( x|0, x|0 ); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); + +bench( format( '%s::naive_multiplication', pkg ), function benchmark( b ) { + var x; + var y; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + x = minstd(); + y = ( x|0 ) * ( x|0 ); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( y ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); +}); diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/docs/repl.txt b/lib/node_modules/@stdlib/number/int16/base/mul/docs/repl.txt new file mode 100644 index 000000000000..a1fec2f3be72 --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/docs/repl.txt @@ -0,0 +1,25 @@ + +{{alias}}( a, b ) + Performs C-like multiplication of two signed 16-bit integers. + + Parameters + ---------- + a: integer + Signed 16-bit integer. + + b: integer + Signed 16-bit integer. + + Returns + ------- + out: integer + Product. + + Examples + -------- + > var v = {{alias}}( -10|0, 4|0 ) + -40 + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/docs/types/index.d.ts b/lib/node_modules/@stdlib/number/int16/base/mul/docs/types/index.d.ts new file mode 100644 index 000000000000..ac3060e06c3c --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/docs/types/index.d.ts @@ -0,0 +1,37 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/** +* Performs C-like multiplication of two signed 16-bit integers. +* +* @param a - signed 16-bit integer +* @param b - signed 16-bit integer +* @returns product +* +* @example +* var v = mul( -10|0, 4|0 ); +* // returns -40 +*/ +declare function mul( a: number, b: number ): number; + + +// EXPORTS // + +export = mul; diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/docs/types/test.ts b/lib/node_modules/@stdlib/number/int16/base/mul/docs/types/test.ts new file mode 100644 index 000000000000..eb78d8de9f2d --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/docs/types/test.ts @@ -0,0 +1,55 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import mul = require( './index' ); + + +// TESTS // + +// The function returns a number... +{ + mul( -10, 4 ); // $ExpectType number +} + +// The compiler throws an error if the function is provided values other than two numbers... +{ + mul( true, 3 ); // $ExpectError + mul( false, 2 ); // $ExpectError + mul( '5', 1 ); // $ExpectError + mul( [], 1 ); // $ExpectError + mul( {}, 2 ); // $ExpectError + mul( ( x: number ): number => x, 2 ); // $ExpectError + + mul( 9, true ); // $ExpectError + mul( 9, false ); // $ExpectError + mul( 5, '5' ); // $ExpectError + mul( 8, [] ); // $ExpectError + mul( 9, {} ); // $ExpectError + mul( 8, ( x: number ): number => x ); // $ExpectError + mul( [], true ); // $ExpectError + mul( {}, false ); // $ExpectError + mul( false, '5' ); // $ExpectError + mul( {}, [] ); // $ExpectError + mul( '5', ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided insufficient arguments... +{ + mul(); // $ExpectError + mul( 3 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js b/lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js new file mode 100644 index 000000000000..da51df198e16 --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js @@ -0,0 +1,39 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory; +var INT16_MIN = require( '@stdlib/constants/int16/min' ); +var INT16_MAX = require( '@stdlib/constants/int16/max' ); +var mul = require( './../lib' ); + +var randi; +var a; +var b; +var y; +var i; + +randi = discreteUniform( INT16_MIN, INT16_MAX ); + +for ( i = 0; i < 100; i++ ) { + a = randi()|0; + b = randi()|0; + y = mul( a, b ); + console.log( '%d x %d = %d', a, b, y ); +} diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js b/lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js new file mode 100644 index 000000000000..2deb4c3a18e5 --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js @@ -0,0 +1,51 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Perform C-like multiplication of two signed 16-bit integers. +* +* @module @stdlib/number/int16/base/mul +* +* @example +* var mul = require( '@stdlib/number/int16/base/mul' ); +* +* var v = mul( -10|0, 4|0 ); +* // returns -40 +*/ + +// MODULES // + +var builtin = require( './main.js' ); +var polyfill = require( './polyfill.js' ); + + +// MAIN // + +var main; +if ( typeof builtin === 'function' ) { + main = builtin; +} else { + main = polyfill; +} + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js b/lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js new file mode 100644 index 000000000000..22d28ff7858e --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js @@ -0,0 +1,28 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MAIN // + +var mul = ( typeof Math.mul === 'function' ) ? Math.mul : null; // eslint-disable-line stdlib/no-builtin-math + + +// EXPORTS // + +module.exports = mul; diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js b/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js new file mode 100644 index 000000000000..c80503fb290e --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js @@ -0,0 +1,132 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// VARIABLES // + +// Define a mask for the least significant 8 bits (low word): 255 => 0x00ff => 0000000011111111 +var LOW_WORD_MASK = 0x00ff; // asm type annotation + + +// MAIN // + +/** +* Performs C-like multiplication of two signed 16-bit integers. +* +* ## Method +* +* - To emulate C-like multiplication without the aid of 64-bit integers, we recognize that a 16-bit integer can be split into two 8-bit bytes +* +* ```tex +* a = w_h*2^{8} + w_l +* ``` +* +* where \\( w_h \\) is the most significant 8 bits and \\( w_l \\) is the least significant 8 bits. For example, consider the maximum signed 16-bit integer \\( 2^{15}-1 \\) +* +* ```binarystring +* 0111111111111111 +* ``` +* +* The 8-bit high word is then +* +* ```binarystring +* 01111111 +* ``` +* +* and the 8-bit low word +* +* ```binarystring +* 11111111 +* ``` +* +* If we cast the high word to 16-bit precision and multiply by \\( 2^{8} \\) (equivalent to a 8-bit left shift), then the bit sequence is +* +* ```binarystring +* 0111111100000000 +* ``` +* +* Similarly, upon casting the low word to 16-bit precision, the bit sequence is +* +* ```binarystring +* 0000000011111111 +* ``` +* +* From the rules of binary addition, we recognize that adding the two 16-bit values for the high and low words will return our original value \\( 2^{15}-1 \\). +* +* - Accordingly, the multiplication of two 16-bit integers can be expressed +* +* ```tex +* \begin{align*} +* a \cdot b &= ( a_h \cdot 2^{8} + a_l) \cdot ( b_h \cdot 2^{8} + b_l) \\ +* &= a_l \cdot b_l + a_h \cdot b_l \cdot 2^{8} + a_l \cdot b_h \cdot 2^{8} + (a_h \cdot b_h) \cdot 2^{16} \\ +* &= a_l \cdot b_l + (a_h \cdot b_l + a_l \cdot b_h) \cdot 2^{8} + (a_h \cdot b_h) \cdot 2^{16} +* \end{align*} +* ``` +* +* - We note that multiplying (dividing) an integer by \\( 2^n \\) is equivalent to performing a left (right) shift of \\( n \\) bits. +* +* - Further, as we want to return an integer of the same precision, for a 16-bit integer, the return value will be modulo \\( 2^{16} \\). Stated another way, we only care about the low word of a 32-bit result. +* +* - Accordingly, the last term, being evenly divisible by \\( 2^{16} \\), drops from the equation leaving the remaining two terms as the remainder. +* +* ```tex +* a \cdot b = a_l \cdot b_l + (a_h \cdot b_l + a_l \cdot b_h) << 8 +* ``` +* +* - Lastly, the second term in the above equation contributes to the middle bits and may cause the product to "overflow". However, we can disregard overflow bits due to modulo arithmetic, as discussed earlier with regard to the term involving the partial product of high bytes. +* +* @param {integer16} a - integer +* @param {integer16} b - integer +* @returns {integer16} product +* +* @example +* var v = mul( -10, 4 ); +* // returns -40 +*/ +function mul( a, b ) { + var lbits; + var mbits; + var ha; + var hb; + var la; + var lb; + + a |= 0; // asm type annotation + b |= 0; // asm type annotation + + // Isolate the most significant 8-bits: + hb = ( b>>>8 )>>>0; // asm type annotation + ha = ( a>>>8 )>>>0; // asm type annotation + + // Isolate the least significant 8 bits: + la = ( a & LOW_WORD_MASK )>>>0; // asm type annotation + lb = ( b & LOW_WORD_MASK )>>>0; // asm type annotation + + // Shift by zero (`>>>0`) sets the sign on the high part of the low word (i.e., "mid-bits"): + lbits = ( la*lb )>>>0; // asm type annotation; no integer overflow possible + mbits = ( ((ha*lb) + (la*hb))<<8 )>>>0; // asm type annotation; possible integer overflow + + // The final `|0` converts from an "unsigned integer" (possible integer overflow during sum) to a signed integer: + return ( lbits + mbits )|0; // asm type annotation +} + + +// EXPORTS // + +module.exports = mul; diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/package.json b/lib/node_modules/@stdlib/number/int16/base/mul/package.json new file mode 100644 index 000000000000..fcead7a1bc4e --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/package.json @@ -0,0 +1,186 @@ +{ + "name": "@stdlib/number/int16/base/mul", + "version": "0.0.0", + "description": "Perform C-like multiplication of two signed 16-bit integers.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "stdmath", + "mathematics", + "math", + "multiplication", + "multiply", + "mult", + "integer", + "int", + "int16", + "16-bit", + "16bit", + "long", + "emulate", + "emulation" + ], + "__stdlib__": { + "scaffold": { + "$schema": "math/base@v1.0", + "base_alias": "mul", + "alias": "mul", + "pkg_desc": "perform multiplication", + "desc": "performs multiplication", + "short_desc": "multiplication", + "parameters": [ + { + "name": "x", + "desc": "first input value", + "type": { + "javascript": "number", + "jsdoc": "integer", + "c": "int16_t", + "dtype": "int16" + }, + "domain": [ + { + "min": "-infinity", + "max": "infinity" + } + ], + "rand": { + "prng": "random/base/discrete-uniform", + "parameters": [ + 0, + 10 + ] + }, + "example_values": [ + 1, + 27, + 0, + 10, + 9, + 8, + 1, + 125, + 20, + 11, + 12, + 3, + 2, + 15, + 16, + 17, + 125, + 19, + 101, + 21 + ] + }, + { + "name": "y", + "desc": "second input value", + "type": { + "javascript": "number", + "jsdoc": "integer", + "c": "int16_t", + "dtype": "int16" + }, + "domain": [ + { + "min": "-infinity", + "max": "infinity" + } + ], + "rand": { + "prng": "random/base/discrete-uniform", + "parameters": [ + 0, + 10 + ] + }, + "example_values": [ + 51, + 2, + 10, + 14, + 90, + 88, + 1, + 12, + 120, + 71, + 62, + 31, + 2, + 45, + 26, + 37, + 25, + 59, + 11, + 41 + ] + } + ], + "output_policy": "same", + "returns": { + "desc": "result", + "type": { + "javascript": "number", + "jsdoc": "integer", + "c": "int16_t", + "dtype": "int16" + } + }, + "keywords": [ + "multiplication", + "multiply", + "product" + ], + "extra_keywords": [] + } + } +} diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/Makefile b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/Makefile new file mode 100644 index 000000000000..ae61922f1f28 --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/Makefile @@ -0,0 +1,131 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +endif + +# Determine the OS: +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate [position independent code][1]: +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of C targets: +c_targets := runner.out + + +# RULES # + +#/ +# Compiles C source files. +# +# @param {string} [C_COMPILER] - C compiler +# @param {string} [CFLAGS] - C compiler flags +# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler +# @param {string} CFLAGS - C compiler flags +# @param {(string|void)} fPIC - flag indicating whether to generate position independent code +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) $(fPIC) -o $@ $< -lm + +#/ +# Generates test fixtures. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean + +#/ +# Removes generated test fixtures. +# +# @example +# make clean-fixtures +#/ +clean-fixtures: + $(QUIET) -rm -f *.json + +.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/data.json b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/data.json new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/test.js b/lib/node_modules/@stdlib/number/int16/base/mul/test/test.js new file mode 100644 index 000000000000..ae0d59b0cb9f --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/test/test.js @@ -0,0 +1,77 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var proxyquire = require( 'proxyquire' ); +var polyfill = require( './../lib/polyfill.js' ); +var mul = require( './../lib' ); + + +// FIXTURES // + +var data = require( './fixtures/c/data.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof mul, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'if an environment supports `Math.mul` (ES2015+), the main export is the built-in method', function test( t ) { + var mul = proxyquire( './../lib', { + './main.js': foo + }); + t.strictEqual( mul, foo, 'returns expected value' ); + t.end(); + + function foo() { + // No-op... + } +}); + +tape( 'if an environment does not support `Math.mul` (non-ES2015+), the main export is a polyfill', function test( t ) { + var imul = proxyquire( './../lib', { + './main.js': false + }); + t.strictEqual( imul, polyfill, 'returns expected value' ); + t.end(); +}); + +tape( 'the function emulates C-like multiplication of two signed 16-bit integers', function test( t ) { + var expected; + var actual; + var a; + var b; + var i; + + a = data.a; + b = data.b; + expected = data.expected; + for ( i = 0; i < expected.length; i++ ) { + actual = mul( a[ i ], b[ i ] ); + t.strictEqual( actual, expected[ i ], 'returns expected value. a: '+a[i]+'. b: '+b[i]+'. expected: '+expected[i]+'. actual: '+actual+'.' ); + } + t.end(); +}); diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/test.polyfill.js b/lib/node_modules/@stdlib/number/int16/base/mul/test/test.polyfill.js new file mode 100644 index 000000000000..0b3d2d310e99 --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/test/test.polyfill.js @@ -0,0 +1,55 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var mul = require( './../lib/polyfill.js' ); + + +// FIXTURES // + +var data = require( './fixtures/c/data.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof mul, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function emulates C-like multiplication of two signed 16-bit integers', function test( t ) { + var expected; + var actual; + var a; + var b; + var i; + + a = data.a; + b = data.b; + expected = data.expected; + for ( i = 0; i < expected.length; i++ ) { + actual = mul( a[ i ], b[ i ] ); + t.strictEqual( actual, expected[ i ], 'returns expected value. a: '+a[i]+'. b: '+b[i]+'. expected: '+expected[i]+'. actual: '+actual+'.' ); + } + t.end(); +}); From 525cf19c8803235ef179b4bd0db6ad1a0e44e6c8 Mon Sep 17 00:00:00 2001 From: LokeshRanjan Date: Thu, 12 Feb 2026 19:48:01 +0530 Subject: [PATCH 2/6] fix: updated return value to 16bits --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js b/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js index c80503fb290e..604d2ebfbc83 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js +++ b/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js @@ -123,7 +123,7 @@ function mul( a, b ) { mbits = ( ((ha*lb) + (la*hb))<<8 )>>>0; // asm type annotation; possible integer overflow // The final `|0` converts from an "unsigned integer" (possible integer overflow during sum) to a signed integer: - return ( lbits + mbits )|0; // asm type annotation + return ( ( (lbits + mbits) & 0xFFFF ) ^ 0x8000 ) - 0x8000; // asm type annotation } From cf5c0e6e7f48e1c99d842c4427cca51f2edb5fad Mon Sep 17 00:00:00 2001 From: LokeshRanjan Date: Thu, 12 Feb 2026 20:06:34 +0530 Subject: [PATCH 3/6] fix: updated data.json using runner.c file --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: passed - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../int16/base/mul/test/fixtures/c/data.json | 1 + .../int16/base/mul/test/fixtures/c/runner.c | 335 ++++++++++++++++++ 2 files changed, 336 insertions(+) create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/data.json b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/data.json index e69de29bb2d1..fbc37dbaeb74 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/data.json +++ b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/data.json @@ -0,0 +1 @@ +{"a":[22293,-6923,18552,19557,26976,-19822,-10800,17577,-14565,3536,-1482,8445,-8862,877,29636,27274,8893,14240,-23489,7009,-31700,-16851,-23775,19933,-22501,-6493,-24263,-25638,32696,-18465,847,22223,7381,-13368,9013,1591,-422,30982,-13598,17782,1752,17688,-6540,25658,-14201,-9670,20166,27460,-28197,29446,1703,-27129,-20172,10696,25573,-9904,-28563,-31456,-2773,-28634,-17153,30842,26358,22997,-15293,2605,-8179,17054,821,10991,2070,-30194,-4088,28299,28232,14479,-14137,15631,9173,-9566,12310,-21891,-3926,24907,21573,-11120,-17763,25779,-9808,12232,29914,5808,10308,23505,-3962,27784,-6657,20627,12072,26932,-1148,-18624,29506,27532,-23092,24972,9245,-4460,7837,-14349,18742,-12619,-3472,-17951,-20479,-14665,3698,-5473,-21653,26659,-26007,-24506,-300,17069,31767,28507,12087,-7656,16368,-8608,-13491,-17547,5536,-16751,-22782,15213,-24546,19232,-22014,16060,-27884,29497,-29326,1412,-21221,-17036,19515,15246,10259,30630,9138,17021,-26642,-23928,1323,-27642,-28187,-19356,-2529,20949,4804,16748,-29365,-22427,32766,-19378,25555,-24546,32622,-29226,24282,-28028,-32496,27725,6152,-20948,-22078,-7099,27067,20950,-9235,3439,5204,-3109,12279,-26239,2018,16861,-12827,32257,5043,24746,16239,8447,-30447,16239,21838,27876,24461,21694,31419,15977,26434,31691,10936,-181,-22023,21626,25489,-27723,9810,-16513,8484,-17752,13147,-12003,-11222,-17602,-27908,8720,-18111,9903,699,30897,-14416,3021,14369,-25345,-1870,6064,29117,-3218,-10726,22784,-4293,-32557,-10163,6453,21838,-17440,11499,-1118,-1185,-12783,13898,-20805,7983,-30090,-5638,12843,11398,9019,-10020,-20669,7149,8332,15120,-11248,15756,-19516,27584,12107,10034,-15909,2125,-27025,-15697,24731,12197,-26625,-25476,-9071,5025,6108,10914,-13843,18071,-13870,-11165,-20333,31742,-32534,21455,-11045,-20435,-4163,30056,27454,17357,13045,-24829,12174,-7614,17974,29034,27279,23717,-19429,19244,3147,-13286,26536,26845,24508,-123,4993,-22102,-14818,23892,-499,-2382,22867,-265,-13694,-20945,12069,14912,-23655,6756,-498,22159,14695,-21090,-18222,-98,-24822,-23709,-9147,-11482,28303,26769,8001,22073,20847,-258,-10816,-6926,10408,7135,-15801,-22858,-28014,-25701,9646,-8940,-13877,-11051,-26795,-4764,28474,5476,-15371,10402,17155,-825,-22462,25101,8234,1160,-19147,3771,-4838,21622,-6922,-16757,-11403,15030,9086,31773,-10602,26053,-23851,-5848,-32414,18564,17981,-13522,-25254,23954,14483,-29547,-3336,31880,13624,-18948,-1712,23931,-26613,-26244,-7675,-12992,10296,20256,-24137,-29393,-29267,-2772,18406,12587,-3765,-24963,5873,5152,1958,6228,-9050,-12827,25474,-1536,-21639,7190,1686,7793,6303,-17456,21613,-28175,-26291,27768,-21651,-1198,-17991,21414,-13709,-9360,24789,-10208,20637,10429,-30388,-15895,18235,8254,22026,-12573,-18285,-19791,7368,-25577,11442,18497,14381,-19638,-6477,-12082,-4326,-17630,-7488,2152,-22629,3629,-31813,-7851,-7723,-12754,15558,-15700,9807,3428,27497,12188,20301,12965,-12325,9560,-32375,2159,22537,7761,9350,1212,-6508,-9035,14342,19784,11652,-22750,-30613,-28603,12170,-20473,7795,13126,4444,-32695,-32394,-12765,-15626,10181,23431,-20896,-10398,10966,24837,10046,-12241,25231,-20562,-22470,226,21557,11510,26486,-20244,-6914,13504,24176,3105,15659,28342,-17491,27955,3370,28403,-368,3444,28777,19636,20586,6192,10301,32458,28563,-11500,24529,5842,9028,16994,18049,19326,-15547,6839,-1930,-21827,19364,23925,24445,10774,-5736,7338,6349,9541,2526,-23047,5178,-30608,13166,1189,21797,985,-25386,-669,677,-29590,20600,-7560,9020,-3139,-23333,-5697,-16579,-6111,-31624,14259,4830,20508,5418,-3491,-1485,32450,-28920,-27902,9224,6374,-18180,-18365,8534,27754,15592,-2435,-4027,22975,29664,29418,26153,17498,-10908,2407,-18407,-1472,29478,-2218,25185,30622,-20725,-2751,18363,17461,26526,-15888,17144,30375,-11021,-6399,3983,3567,8005,-20250,-1445,-9169,10084,27296,-18961,6981,23948,-25574,-8288,-19727,9601,6074,11569,6313,-28911,3988,4168,-16868,-31529,-10235,-32174,27766,6646,17738,25374,28394,-21427,-3410,-806,19347,9109,30517,-22589,-13574,25047,-8781,26176,16228,-1587,-14878,29270,-24752,23964,8073,14329,27821,-20706,-14269,-21813,-19466,8265,-21219,-24467,-17856,29288,-31860,-22229,-24905,-2501,9734,27210,-26159,7485,-28145,-6964,-235,-4157,-13555,-16773,27025,4335,-20270,-30493,-4468,20571,16604,-9413,32633,-30431,1542,-19599,10602,13092,-11298,25515,9614,-10389,-29481,17477,19878,13022,11921,26487,-12260,16545,-13243,20274,-20378,5970,-29266,-26120,-22461,-16768,-23845,5839,-28964,25528,29195,-29097,27866,-2029,-15928,5701,-21704,5542,-1551,20679,27921,1737,5389,15033,-18008,-15456,8753,2501,-31677,28279,-9992,-19287,1482,-6490,-12638,11789,9510,-3714,-15138,13315,-10952,-18710,16986,-15853,12030,-31708,22617,23094,6602,-11700,11006,1757,22805,-16371,-15977,-27969,942,25545,7300,2033,21057,30077,15514,-10227,-9180,-29891,-31205,-32436,-836,-13574,13647,20980,485,-2133,-27640,-20252,-1073,27745,-29925,-27237,-16722,13850,7289,-26683,30248,24081,-21884,-1577,16860,18185,-32311,5151,15496,15972,27692,-26451,18850,29256,-26118,-14753,-17085,20298,-26540,16168,-14601,-21411,28685,17095,-26432,31528,22626,-10386,12612,-2851,-4300,10093,-11536,6585,-24251,-27443,-7996,-23793,10477,-25267,24947,5402,-18950,11030,1892,-12299,29046,17576,-24768,-30261,978,-6600,-18904,-3104,-22272,-12568,-4342,-32412,9815,-24497,-2495,-27251,18365,18738,12102,26883,24063,-28661,-29676,1773,-21160,28039,-25591,-7341,6303,9070,13128,2582,-6121,21129,5090,27625,-18238,18955,-8245,-7741,-26379,20181,-7385,16204,28453,22889,21721,14052,8860,1057,8168,156,5164,11261,-30837,16772,6533,-23659,-23335,-19930,18179,22561,15420,-20708,10924,-12257,-25850,25455,-26069,-1326,-15053,-19680,-13912,10330,29293,-18225,452,18248,28595,-23455,-13462,3997,9470,24471,-17509,11402,8477,21793,20511,17910,-30904,5924,7705,17285,17984,-14138,-27738,24903,-21449,-21039,-9190,-3734,-7950,9667,-26170,-11423,24210,7051,-25941,20039,16364,-6635,-8731,-6932,-14931,6529,-28297,26314,-4444,24983,11458,-2580,-1860,-13604,-18061,-16642,5027,-13031,-24506,16346,-1302,-927,-20154,23517,-24027,-13556,-20672,-32583,26264,-13845,20224,9861,12289,-21273,-29837,30127,18025,-25365,23675,-19186,32386,2366,11003,-2240,21530,25710,13886,-6209,-20088,22149,-22630,11379,-11545,-10015,2130,-2803,9198,14226,-2618,2695,-32386,-15160,-20210,12672,-3665,-17279,10032,-18406,-9876,940,-4824,-10256,-29461,-26587,20273,24838,31891,1392,-14138,-20963,-9225,-3999,23184,11998,18754,-7452,-23571,-4814,-25993,6579,30649,-25610,24187,-22327,19830,-12244,-6837,-2905,2119,16056,30803,30063,-26967,-31424,-29290,26074,26182,-30166,-5300,-20723,-18360,18243,8046,-27943,-2525,-5966,-2627,6672,21988,4149,-19515,19871,11308,-28094,30312,-1629,-7570,-9292,28235,27317,-26002,26272,24614,-20201,27616,28092,-26893,21031,30695,576,-32459,-20432,-13948,8356,-15606,16296,-30377,14536,-9798,24380,-14081,3455,11484,29995,8129,9030,-4400,-32207,32507,-8932,27879,-26262,-15426,19727,-13694,-20577,15052,-7819,-32313,12981,25526,-32003,25318,-21188,9121,-23054,27876,11513,24250,-14688,3127,-22597,21535,-18156,-25369,-3102,23643,2999,-2540,23384,26836,-7428,29890,-21357,-20468,-16570,-9165,27353,8380,-8709,7568,1139,-7944,119,12719,-31589,9834,7828,12693,1317,25909,-16947,11489,14677,-2335,18888,-21191,-11458,-10879,9037,-20841,-16809,-31158,-23717,-5397,-18857,-7519,18206,-24271,-31906,-23269,16065,2001,1555,-16582,-18047,2735,26020,22550,-17339,-5429,15692,-1518,-26707,-2397,28916,24950,9180,-15309,-18695,-14549,-3381,-2736,-12939,5670,24636,972,30920,10076,9470,31782,19575,-7232,1017,-11637,8955,15739,23866,2208,5523,-26239,29548,-11551,5011,-29926,18820,1160,27793,-4766,18620,-23669,13453,-17527,6363,-32252,20911,-1767,1489,19064,-24458,-21808,18080,27885,3728,-13670,-16518,-20083,-30697,-25418,14894,7594,-18889,11675,28811,18890,14518,14865,-12716,9544,-22667,-26862,18643,23555,-11621,-7760,24071,-23476,23241,-7207,28357,31551,3754,13671,26669,-25284,-32765,-22615,-12599,-30694,-15265,-30472,9669,-1386,13971,5713,-15262,-4278,-12188,4791,-27501,-2086,10698,23911,-11298,31845,-16616,-19993,-24397,-26141,5569,-28806,-27357,-23444,17633,32081,-15960,17636,-23301,4210,19710,-5797,6506,-3388,25585,-12289,-30441,-22443,16201,-9860,15116,21469,20823,-6952,12614,-23241,-7873,28766,-10466,498,-30141,27872,4460,-24730,-28338,-10673,-25415,-11529,-25804,-15947,25449,26675,11024,-811,-9479,3842,19668,-7152,14168,3103,15757,-3482,-8195,3813,22334,-28347,13340,-18306,-32347,-29892,14960,-29720,30749,-13346,-21682,-30356,8749,-14328,-9116,15714,2493,-16433,9622,-19250,15524,-32624,17361,2426,-7007,-1238,-27238,-24016,28048,-2664,12565,17615,1757,-6861,32077,2178,-3985,14271,5226,-6003,-31841,16313,-3590,9677,-30781,20062,-7376,4480,-29137,-30520,17999,19156,-30375,2593,-11185,-4614,-31411,-5655,4138,29405,24450,-16063,14254,-6560,9844,13564,28387,-26908,-4931,847,-142,-4004,-15606,29036,-27093,-13619,16332,-1701,23630,19964,547,8862,6353,2941,-21311,27936,31095,-19954,-10485,2467,-23315,-18802,19172,23707,7407,-3750,4505,3028,2110,32342,-28891,-30798,-4428,-11729,31007,1247,7421,14572,32315,-1715,1770,96,-25619,-24644,-29730,-14162,-29474,-31401,-1347,-7191,3834,8106,6776,-9760,-954,-18583,19258,-29216,17214,-11398,-29640,21091,-9427,-1299,-23404,-11187,32717,16785,-29381,32265,-17697,5157,-405,-10547,13281,2633,8059,16575,4001,-26055,-23382,-24932,14819,16162,-1923,-18901,30348,-15431,-15348,14795,5940,-12219,3119,29281,19250,12484,-14673,19200,-3498,-11286,18699,11574,26639,-14473,-31740,7154,20929,9088,-9037,-7837,15801,349,0,-2146,-16255,30846,11722,-18674,-17352,29142,28889,21357,-15844,-758,17871,-29360,-21041,-29569,22609,8230,-8086,8542,-12962,-14213,26837,-11933,25710,15000,29923,-16094,-25603,12958,17023,7166,-21954,-31999,5245,22536,-17904,20662,18912,-21782,9252,-29698,10229,-5644,-26290,21957,-2444,29088,-2580,22238,4863,17226,-24741,-1066,-27474,-31798,-18833,-30317,-15124,-11667,15409,-30867,28267,26224,-30098,745,15993,-15233,-11360,2138,-4247,30661,5209,-26784,-7750,11687,27941,22575,8008,-7406,12046,-19896,-22946,20074,11806,-17651,21044,25742,-15200,-26846,-18692,-32557,-24945,-23192,26435,-22274,10322,9662,-4739,31731,-20966,23783,29625,17011,29767,-10891,-4068,24941,-21083,-28826,-15231,23732,-15953,-5408,11040,28622,9709,-683,21597,27278,5240,-29861,27490,13063,-20284,21159,23557,22807,-1946,-13948,21771,9857,-22932,18630,-5898,-25931,-25027,22802,31779,-13341,26744,-16219,-22375,-21975,11142,21433,-26120,-11916,-12017,28246,-17404,25991,31153,-22681,6288,-21897,31246,-2921,-31857,-3466,15899,22683,-26376,25736,8546,494,32573,16288,-9470,31586,-29820,-15492,-17400,-19427,-4699,26510,-30761,1949,-18172,-10009,-2572,-2808,-16784,-4186,7280,22272,6686,5759,-13415,7597,-30474,-30283,-2487,-24081,28222,-26707,9181,28029,22349,32479,26848,25298,-15779,-23318,-26896,12290,-29574,-24888,-18528,-14978,-2129,11669,14983,13855,-25283,-10504,3361,14171,28023,22714,-10999,30318,25200,19282,-26530,20655,25344,15420,15918,14926,15133,9999,7457,32122,19449,13330,11645,22643,21210,25886,-25101,-13685,4788,22650,-32597,12273,-20621,3533,-6322,-25364,-6519,15447,-27812,-14086,1963,-21574,-26197,-5460,26614,22489,-23300,8981,-278,16926,8336,-13596,-2511,-12785,-23719,-14067,-19666,-16052,5016,17891,-26169,5188,-2602,-14021,-24046,23844,-6616,2203,6524,-1660,20886,-24279,9535,27458,3030,3383,17180,12499,-20403,-15864,-3342,20702,3308,26916,-24850,12357,-19918,-11747,29074,17867,-26622,-29861,-9712,3544,-11113,-989,-5378,15039,-31552,-31620,-19387,22102,-23131,22916,16793,12668,-6468,1207,-7600,5898,18111,21826,-6167,-11347,15976,1752,-31756,28826,22774,30086,13927,28920,-32542,-28552,-302,-10887,3227,27088,-28614,4443,28236,-15233,-6221,-27661,-25083,-22194,17775,1218,11781,-22592,-25651,-2874,32003,951,18547,15212,-30063,19560,11272,25479,16879,-7568,21633,17106,-3351,-11436,-26548,32645,-17114,-22393,4322,-21644,-4858,30869,-16536,2828,-24092,-31528,-28721,20458,-21351,-21603,-15182,-22114,12116,-29401,25866,14821,22927,4372,7533,7039,29573,-3600,-8622,-6545,17733,-2401,-6667,-32148,7974,30424,-21023,-29650,28526,-4791,5947,-28332,-3551,9994,24895,7867,21159,-23054,18521,509,-19687,11621,-17437,-29526,-16773,22865,10281,-19967,-13502,-31107,6257,-28536,-739,32358,-27915,-25532,30015,-16170,-22413,25775,11807,16302,30212,-24510,-6470,22340,16125,-18078,32054,1880,15199,-20399,-19265,30531,-17156,-3270,20629,25893,9531,-25639,27555,-16979,-21407,-5951,-17387,-16553,1286,-20138,45,11642,-27129,-20914,-4823,-29684,-12656,21475,25424,-29297,-29369,24712,5352,18598,-28453,18855,16362,-12841,-17181,4225,-19714,25118,11354,-24925,-24627,22716,1892,-9245,-26603,-29588,3386,6210,14822,9025,18065,-22767,12110,-27357,31476,4768,-23886,-30659,-3287,14235,20707,1029,324,4303,20956,15911,-24238,-31524,8263,19885,-23681,16405,9834,10980,-25607,15999,14161,10548,-10557,-3784,-13193,-25259,6217,31685,-19848,4927,3686,-10965,7037,-32367,-29496,-5022,1430,3596,32049,-10380,-13259,-24955,-9136,27772,27698,-48,11411,4766,-21835,18573,-12001,25094,-3646,10210,-11456,15929,17720,27530,14848,30641,-309,-14233,-13090,-26039,-13832,-9818,1707,20367,26547,990,-22780,-19479,8803,853,-24473,3735,-31962,19706,-24266,-21029,5512,-3499,-28701,-30901,-26055,-7389,17797,24433,-12625,-122,22308,19834,18413,-23549,26563,-28185,-598,-4496,24950,-6817,29262,-30596,6472,5299,3025,14768,-23733,3831,1707,-15231,15571,-25548,14039,19638,-23680,20752,-20517,26885,12418,-373,-6003,1960,-13306,-20356,11179,-19509,-15772,-22185,8763,-23588,3766,5259,-21416,-22528,-22209,14377,25008,-13173,-14558,-6052,4365,-31754,1169,-14363,20653,10258,-26378,-32630,4377,18809,-235,31142,-11998,19228,-21980,31950,32487,-4984,-23001,8484,4196,13533,-19024,15548,23774,-8464,-2841,16015,11132,15370,-22803,-17270,16385,11135,1135,4271,-11374,7526,4410,25771,-6431,-28592,24147,14340,23404,-30600,13524,23125,-2816,23291,-1158,-31386,4058,12587,16931,-4935,-28643,-18676,-21686,15257,29462,-11721,30755,13080,32183,-876,-15415,-11958,-26116,21763,-18953,221,25940,-27573,-18205,16577,-25404,28087,6936,4549,18612,-26988,5931,-10096,18367,-9905,17738,22493,4188,28821,4983,883,-15666,2971,-18803,-16250,-30671,-1450,4560,-24019,-12454,18375,8971,-19281,23571,23535,30065,30935,18856,4235,2718,4701,10015,-24118,27374,-4384,-1254,12346,-14658,-29833,8400,23093,3819,25502,-6702,17784,-23515,-4605,-16433,13814,4145,3882,-577,-19650,17370,-9772,-28882,14668,-11603,22742,-13864,23883,-5323,28920,32533,-10716,-8231,-1487,-31137,9879,1449,10032,205,-27499,2768,26272,23053,12022,-11100,-26146,-6931,25814,10504,25261,-26603,-4892,-17278,-22717,-22991,3887,-32742,-4086,-4996,-5297,-7933,-5230,16756,16604,26052,18388,-6283,-5266,-4347,26690,3,31189,20196,-9710,10444,-23671,-3087,-29253,-30623,-25349,28777,-24458,2527,-21267,-14406,12304,15389,-14380,-24548,-22374,13092,287,5165,-2919,-15875,-1550,-17298,10610,25953,11124,4534,-6811,9547,-8037,16248,-12775,1061,-19606,-9259,3206,-12187,-13249,11517,23108,-1748,29879,2646,-19126,-17267,10866,-8731,28593,-21613,29202,-7092,-4720,-5114,8379,-26876,-11928,-13264,10426,14029,29052,-30377,-2489,-16490,3452,10673,7019,-26108,31255,26539,18177,21597,-7976,15290,-8524,5667,30791,-30424,29704,26617,-19269,26140,-13242,8780,-11741,27905,14672,9099,-18125,-7668,-9638,-21840,-5276,20641,-5562,30944,-1452,-31309,-27930,-2963,27998,23015,-14133,-12744,5538,10111,25692,3562,12455,22630,-2587,25954,16003,16939,1968,-28505,12078,-16126,13363,26721,8975,-29042,-27886,-29068,24368,-679,-30891,-9850,781,-26053,19955,-3987,29731,-26945,16038,2503,15935,8963,-26702,-4377,-1174,3480,-11189,-17937,-12348,23548,-13673,32499,-25345,32458,26453,16398,-29350,31336,20098,27787,-2110,21976,-14830,31440,28692,-27641,-5314,25657,-21817,-22043,-4607,26886,19688,1460,-10257,-14252,-27827,11322,580,-7406,2103,19675,-7674,9527,19367,-13988,-6842,22786,-15418,-19510,17806,15240,-30301,-29790,13913,31160,-24662,-24167,24050,-13711,-13442,-13324,-19592,-26520,20904,2919,-8004,25846,-18525,25345,-14327,16347,12253,10767,-6893,-1146,29548,19034,-11127,-18637,32293,-26087,29372,-30775,-23108,10519,-32381,-15002,19120,24437,4056,-27088,-21653,17233,-20840,32020,-12614,3925,25099,1629,-3497,-21994,-14790,-24011,21542,11086,7612,18324,-2646,29253,32455,-3120,-29600,29061,-1126,-19940,6814,-739,-2173,-6833,-9068,-30884,-1153,2047,19117,10775,1301,-26264,-18066,-6367,8134,11205,4407,26113,19963,-6817,4432,-5192,-21260,-30980,-8705,-21571,-1332,-5537,-25277,30310,7292,14305,-3195,-27648,-25294,20505,-25763,6322,-10214,26122,-15669,23855,32627,-967,-15279,7995,-22529,21897,1341,30202,-17686,-26993,-7757,-6178,-25205,16306,5019,6231,-21997,12511,3775,18063,-5950,-32187,23184,1524,21087,30189,-24921,-21894,23545,-7821,-30806,23405,23980,-13316,-1366,-31316,-24185,32744,31655,-9103,-27016,-8868,17488,-19452,-25328,-10260,19548,-14557,-30515,-9444,-29260,-3697,-8862,26692,30595,-20541,24114,-27092,-9667,14893,-2145,-7704,5532,-10931,11749,-28601,-9478,20332,-28624,-10590,-21537,-22871,13311,28720,-9555,20751,-14307,-22773,-26573,-12053,552,-23064,17018,24458,-29139,14846,-28850,27744,20523,-5748,9870,-14388,19316,-17365,7449,-1702,-13197,30740,-14136,-9053,-12617,-2904,845,-32073,-6951,24059,21447,11511,-31481,27642,32226,1839,-28188,16477,-6469,-24559,-1443,-2550,-29581,-13686,24471,13058,4694,11020,28462,-20623,-23448,-17502,-22650,-4815,6214,-2499,25049,-25708,-1803,-14668,31119,-13123,29611,32407,-18247,29070,1479,-13667,12781,27779,-5457,-21429,-7537,-2269,-2347,-15833,-21978,-30419,27955,-26283,-18274,-28259,-11016,-8156,-305,27966,22114,-8023,-30508,-12455,10077,-32156,7191,6922,-32515,21712,3226,1732,-24721,-16760,-3255,2591,-5420,21976,-32445,25002,-26624,-21654,27351,-31435,-15169,-23689,-26925,6584,923,5538,1783,-9729,30284,4043,10584,7594,4656,-14992,-18250,4909,-26046,17744,-26125,-17999,-31782,3389,17361,-4434,-7402,17684,-12198,-1258,28799,-17613,76,-19136,-8534,5919,20216,25158,-21310,-10768,-17338,-23793,26044,26015,16570,-2066,-21744,31089,-29923,-15021,16066,-23280,-251,17053,12877,-15657,-20147,-27291,-30739,423,4220,30828,15578,-28471,-21075,-25722,10217,31909,32204,21676,-11625,-17901,30651,-18347,-24653,14455,12355,-13628,12777,15200,4119,-3923,24689,-28899,-19637,4800,-11788,-7016,10278,-9759,26176,-18269,-11697,8988,-13971,-4,16034,29014,-861,15471,17923,20282,30339,15808,-30831,-27080,-2503,14292,-7940,-22493,-3274,28947,6353,-11351,-32718,19485,26217,-11737,-20297,3728,11272,-26887,18228,32344,14869,-28510,-427,-1864,-32263,31480,-19159,18429,18996,-21586,1470,20933,-15898,31735,2459,8930,-23524,31953,5111,15598,-12165,5161,2316,-18714,26192,14788,17783,4698,20669,3244,4276,2771,7502,-28918,-31859,8008,-30204,-18249,-6330,21561,-7067,27909,9728,9803,26878,-20580,-14033,-29413,-21393,23847,18954,-789,-3758,-11496,13266,-10332,-29475,-1718,27134,23962,-31240,-1357,-6033,9031,2494,-5123,-15727,5059,9396,10711,-6147,-30437,5854,-29185,12134,-35,-16997,30870,3321,-5621,21950,-10492,26358,-14575,10780,6857,7861,14074,-27627,2229,5269,-26098,-31894,32005,15701,3368,-5885,32742,-24339,-29255,10687,2283,-26924,-16225,5866,17979,16508,21638,16082,-12938,-16750,5266,9339,-23158,23459,-12647,16468,-1447,-31340,21609,-31984,6698,28280,-31110,5937,11214,5027,-32714,11190,13456,-29201,-10889,-17027,-23356,5654,21607,27391,-10605,10478,10707,9226,26496,-16794,-14201,-29428,-26101,5920,19808,5221,7349,8651,6005,-18720,4164,7664,19986,-17388,-20076,20040,26570,26149,23607,-17085,-23645,-32516,21337,30731,27644,-22034,8443,5585,19961,2172,21559,-27007,5513,28226,11682,-7446,681,-13736,-31562,-26081,313,5370,14351,-12468,20750,27044,-25195,14554,20427,31181,30237,29551,31434,18808,27515,26311,29542,3191,-870,16736,-27403,-12078,22498,10878,-16618,1413,-29335,16831,20446,-28128,23519,-12007,10011,5104,8294,-2005,-618,15868,-20218,-12958,14282,-22747,-16174,12950,28829,-21425,6495,25605,14534,-27142,9574,19900,-6451,-694,-1988,9699,-32047,1446,-6236,21168,6086,-15483,-23606,-16670,22390,17457,14093,-10995,558,26644,8815,-17926,-28870,25410,27792,32728,-28782,1520,25566,18521,7147,2374,5655,-32071,-31086,-29100,10397,-30365,5114,-28605,23571,-21566,-11320,32734,-5467,-21697,17424,-24141,76,-14785,-30263,-23875,58,-26364,-31231,-4916,-26403,-27245,29373,31932,24045,3753,1539,-3066,4450,3222,602,-17920,5625,-27050,-13757,-3571,-15848,7692,-3603,11454,18763,-18946,20081,-13927,-962,22587,-5033,31864,28991,-3496,-5819,-30178,2027,-9213,-31013,-6694,27309,3295,23008,-1008,-26250,-9156,13841,12143,-3437,-32682,-24194,13483,7779,4971,-7830,-6224,18794,-20515,12617,-14934,-30694,-25183,-15836,31065,4089,11114,-31880,-26650,-30865,-30125,-575,29212,5939,-10333,-4562,12457,13279,-23487,-8166,-22925,-23400,408,23327,17147,-27387,-17269,-21844,24176,-5015,23542,-23525,-2941,31128,-6593,-4642,2450,-28245,-3754,8569,-26342,-1110,-24772,-29897,-27938,-2337,-1691,17288,-21824,7591,-23645,-11980,16959,9532,-21420,1339,14914,-5920,12264,6323,21834,3039,15567,-13873,1401,-23792,14253,-28915,-19269,-22267,12422,-12843,9392,20418,-9971,14223,-14685,21107,-1255,-3741,-4069,7868,17047,-19877,-15366,28396,14231,32316,-10290,-6271,5873,-21223,29537,-11326,-2327,-1829,-2350,-20840,2024,11150,-10338,-18321,31076,31822,-30669,-11662,13279,-12586,-23321,-20743,16442,5378,19894,722,18270,-28239,-3648,-265,-28690,18830,26232,9952,30376,23002,31394,-4717,-11594,-3723,7211,23198,-25339,29641,-27889,-27030,28697,-25789,-5923,9209,-5606,3524,21235,-21931,-23864,8362,11560,27175,12892,-24855,-5857,16971,26744,-12391,-5844,24354,-22155,-7217,-13130,-980,21829,26849,-10548,29258,23724,-5669,-30539,19654,1310,-3693,-3903,28473,32599,-15435,-26225,-24031,25696,18103,-29623,5822,26017,-2711,-9974,19995,17667,16950,11582,28281,-23034,31220,-5466,31563,25303,16754,28054,16260,-21681,30284,3148,12398,-6175,32013,8104,-6342,-16188,14647,2395,-23258,-16,5541,15332,-6765,-29936,-27409,-19537,20500,22309,24813,16014,32044,23267,-22219,30840,15804,27304,26128,-702,-27144,23646,-30321,18023,-15296,-31074,-6640,11131,-14493,-24759,-19241,-4983,7994,19069,-22417,-31538,21902,-17058,-18307,9635,-27515,-26260,-7118,-28238,29776,3432,-30164,12813,-2030,28733,-20655,3595,19613,-18208,-11149,-28449,-16514,14980,15450,1761,22989,28978,29547,-1784,15280,-25637,-553,4415,-9926,13908,-18716,-4672,20417,6934,-141,17427,-22400,2463,-2527,8338,-1570,9586,-20834,-14723,24147,786,-10404,-25133,-17001,-27720,9397,-26778,-31509,6177,4206,16540,13309,-29114,-11811,-29384,17563,2241,-1287,5214,-23591,31340,-10126,-13223,1037,20116,27884,32235,-3064,-25716,-15254,-11684,7838,7110,-4048,23606,12158,-27418,29596,13418,11528,1036,-2809,-7930,4691,18148,-4545,-10513,-12378,26936,27470,-3201,25509,-15423,16345,-6220,-28074,11462,-6751,1631,18515,10763,22716,-6413,-14894,-14099,-15574,30033,-8749,-18745,10684,-29988,15060,-24891,-5149,-13016,26025,23074,9239,-19119,17244,3943,10449,9986,21288,-5973,-29000,25983,-27277,-2983,-5153,24006,-24987,-15204,-15174,-7112,3466,2021,-9846,27485,16045,-31928,30266,-1662,-24050,-7650,18090,-30791,-17342,-5437,-17142,32670,31274,26075,9890,19796,-12664,13658,13012,-7173,-22092,-24907,-15933,-14311,-7342,1662,11345,28892,-29084,-31267,23611,19729,-30426,21110,-14699,-21708,-19306,-29376,-19731,-3880,-2045,-4104,-3976,-3537,-10795,-26853,-16508,9309,19573,29273,-30630,30250,-28400,-13795,-16828,-2973,20635,27286,-6847,24320,28788,-16003,11283,31131,-27659,29352,-23343,-14196,32744,-10306,14692,-2067,18359,-22051,27165,-25203,-16135,-22109,16874,-29329,-25603,19012,-31845,-21234,-27549,-15905,8561,25855,-21385,-31052,17408,-25363,-14287,-4076,-26999,-9177,-7491,-17574,9395,-7513,4889,-8679,23189,-9519,2039,17587,-1953,18672,28246,-17845,22112,-30123,-31600,23035,-18588,-26380,-25636,22742,32243,-14253,24458,16884,-6847,-22595,-19958,-1078,996,5320,14117,-22375,30576,-13761,1714,20998,9489,-29014,5819,-25230,22427,1298,-10307,11772,3944,-9139,2040,18124,-2750,9172,8099,-3274,27688,-210,-19156,-11926,9964,-6345,19765,-21807,31743,1115,-11413,29553,20123,23069,17784,-3155,26824,-9163,4384,16485,24904,26845,-4510,-3919,-15060,30299,-18561,14958,6704,22306,-21083,1626,-10670,-7470,22468,32063,18953,9466,-22511,17930,-22186,-1155,14716,30705,-10853,-266,-5216,-16795,23339,31936,32458,15476,26014,-4818,-21210,-21812,-7286,-7002,25914,32187,-17462,-27935,1046,4637,-2637,-9253,3933,-16451,-32553,14191,-31288,-21971,-19731,16196,-24032,2184,-16837,3521,18158,-26264,2691,17850,21980,-4061,-19734,-31996,6895,5748,-6230,42,5168,9076,4875,-26553,-19053,-30528,-3037,17648,-14211,-2822,-928,-12730,7976,12109,-29300,16713,-18473,-13368,-12533,32453,-6864,22926,17537,-17650,-13901,30571,-16878,25762,3553,9661,-6962,-24046,-14029,30681,-17830,-314,-32613,11902,-15433,-14055,-23687,16407,5983,17058,-4251,9452,1004,10045,28852,21239,9732,-10778,11399,-5498,4340,30267,-7693,20231,23262,28628,-2875,-16467,-28184,15865,-18552,-13245,-17216,-18396,31425,120,317,-25028,-16239,-26467,24799,12279,15753,-6964,-10443,11839,-18491,32057,-31706,25677,-6207,5403,23177,18868,-7133,13673,14730,22761,29974,19315,5860,-21344,-26696,21412,-6972,-28037,-11234,26113,-20296,5295,32415,-28264,-15193,15402,-2460,7133,-5526,11817,6424,-4463,4728,-32550,-31826,-4862,19087,-6190,-23956,1051,-16196,-26748,-12401,22432,-15323,-6329,11078,10473,-1597,32613,3820,10875,5142,3468,15379,22718,-13896,-19848,-2916,13346,24738,-29259,-23883,-3301,-29041,-22941,24606,22815,3637,-32117,-8901,20210,-26096,11466,9876,-8651,-27629,-11812,-30944,3542,-11966,5644,-18349,25944,-23654,29798,15895,-4782,-22816,-19787,-24202,-30844,-16278,-15316,-1376,-12550,-5489,-9537,-22502,30917,-8885,1366,18361,-2213,-19935,-4529,21905,-14795,16427,23729,21516,-28305,-3394,-29600,30408,5721,-32568,13537,-31828,-22616,26518,-23262,-20692,-22526,-5810,10701,-2307,21470,-31603,7960,19621,-7719,-23441,5216,22837,-10608,-32080,11975,7366,17116,2937,-3885,21579,32312,-716,19221,5266,-516,-9,6206,9636,-6257,15713,21713,3986,-22863,-353,-31088,31376,813,9640,18230,25862,18967,-9320,15933,-24407,-8632,-4859,15728,-24283,30847,-20923,30065,30392,11129,16519,2892,-22153,-16256,-23668,20252,10255,24813,9198,-18526,-30816,-23921,-16845,-32207,9661,25563,18792,2757,11764,-23295,-14077,20126,842,13833,3087,9327,11913,14932,6626,9539,-6705,-9622,-20336,3910,6890,-11235,-8605,-15621,-19189,-32174,-1378,-17236,-23326,14545,-16674,19103,7342,-30648,-10906,-13661,-21175,7785,-26301,12435,-11149,9554,-11004,-32002,-8280,28390,10305,17783,-13998,22738,-11074,25661,-21264,13089,-22727,-7684,13684,8664,7849,23126,-9558,23943,9463,30553,26063,31325,-15874,-27878,6344,-9407,17326,27963,-32620,-26445,28729,-8131,-30821,6268,-23115,-12051,-3760,-1421,-19157,7745,-21099,-9115,-32706,25354,32317,7911,15713,-10007,-912,-7590,-12221,-7616,-9031,4674,-2726,30081,28035,-18166,25277,28184,-11843,21240,-12714,-9895,-5258,-3061,10823,23751,28287,24435,-1271,-25579,-17447,-1209,32543,-17896,-26064,15490,4866,5792,-24866,25413,30945,-1129,-2680,-4547,-3815,-7411,10055,-11304,-11994,30981,-22830,8060,-11681,4680,-27767,31911,-4336,-32247,23579,27161,-25057,-26635,-6814,-25280,-11762,-109,22979,25872,-27083,30881,18519,-28905,-3015,-16927,-683,25939,8430,-23395,-18132,29205,-25180,-8194,4499,-4092,29255,9500,-4948,-7847,10022,-14136,-13452,17734,-8002,12503,25222,13004,-20373,15434,6109,-14688,13548,-8138,-10824,-22233,7703,21261,-29061,-16633,30635,-14424,-20194,-27312,10150,17073,1364,6639,-6193,29185,31560,-28937,-17718,-14658,21565,7048,30613,14020,-12715,-22527,-3312,26163,-4446,-22530,-14741,17499,-11995,25731,5994,-8287,-23669,3863,10057,-11094,9319,-12559,-26788,-22083,26848,-212,-25664,25642,3619,-10614,-21783,-7582,29202,-23937,-26329,-16279,-13695,3127,-22883,14628,13366,-4856,-639,-31396,-11891,-27412,-6915,-2791,9219,-29624,18883,-14228,-9415,24864,-3542,-15333,-8115,3562,-22458,28273,25716,-11472,-12076,22152,-2640,-5636,-26894,16433,30260,-17008,-1705,10859,10905,30424,12232,31782,-29755,-27449,-3776,12233,-24305,-17660,30774,-951,-25563,-5535,16485,-909,30796,26795,-5402,23745,-17443,15291,13131,12685,-23112,19005,-3648,-25618,-30769,27415,18010,12904,25072,-2525,11919,28086,2794,-24623,7553,11258,-9514,5560,-22459,-2309,-32742,26794,29551,30823,20822,-8617,21801,-29387,-26093,2166,16066,-16436,-11596,-20349,-9286,-9596,-25701,-24042,-29459,32140,6201,15229,27460,-23771,23374,2246,20256,-18907,-24960,30565,11553,-24933,24592,8338,-26877,12648,32489,27693,16029,-26370,-2908,-672,-10038,18265,11748,13445,-24098,18816,22171,-20788,18190,-4394,27209,12883,4603,17817,-17637,-7908,31679,-9829,-10110,10466,-1993,-18284,-13962,3898,27132,-14240,-1176,10394,-7841,28685,-23044,14889,14183,21472,-4432,22854,7521,-15028,-30701,-7056,13347,29277,-26939,-14817,14327,-11807,10044,13240,11133,32703,-9060,-23627,-18348,9746,13039,-23982,28275,-20903,19180,-12333,-24985,28905,-30211,21967,17610,-1874,12054,-7635,15866,14121,18078,-3553,10631,23907,14398,-7808,-20667,-8324,-27334,23234,-8387,-3626,32376,6034,-26647,12648,14820,-31139,24514,1234,-10703,32297,-2628,-8145,21498,-17784,22749,785,7349,5849,-17860,-7340,-30471,25539,-16199,16696,-15035,-4097,-24395,-9601,-13630,-13,19541,-14020,-26746,25663,31396,20842,27293,23144,-10691,-16177,22675,19449,8446,11406,-31101,-1572,-20576,9016,-28490,-5668,-31090,-26192,-12895,-14521,23272,4839,14151,31645,28006,-32246,-1134,14781,-13497,4888,7678,-14868,-7037,2204,-24490,15040,18795,30953,1723,-5525,9592,3390,25671,21785,-20360,29950,-16649,-18682,-29009,3225,-434,27032,-24703,-19050,25911,-29463,-18527,-7990,18087,744,29666,-7002,18645,-10138,27971,26924,-27864,14000,25110,6628,-24292,1936,-22748,-31387,-9045,-10340,31332,7074,3747,-30443,-22467,-29453,29357,-14402,-15734,22501,-11096,-1492,-18256,-25775,32021,-21357,-9,17900,1274,-4804,12057,6178,-23571,4400,-19960,-15094,-26430,-9940,-13712,-2707,12488,-15147,-28399,-16531,-12821,-18098,-13216,-16231,269,3818,-26497,21941,-30440,-11984,28934,-31186,-572,-3841,19482,-32065,24124,-1228,6882,-32214,-29594,19691,-14539,-23256,-23016,4517,6806,22241,22139,11175,-27057,-23449,25846,-7504,-6911,-6652,29083,-640,-17477,31411,20145,-21309,-32541,-13194,7619,19709,-12490,-1024,-14285,27161,-469,-11111,14085,17761,-1598,23838,-10489,-27559,13312,-21116,16385,19023,-11797,9465,-21247,14060,-29953,-24931,-19346,-14662,-26286,-31967,-3202,-26059,-12392,-28349,26418,7887,3395,-20634,2281,-29840,1024,-16400,20689,32195,-25329,-22566,-28130,20751,-10913,21023,7008,10059,-2278,18529,-8647,537,26367,4776,18643,-32686,5577,-17325,-25977,25953,-12906,-32325,1073,23258,-20190,-29412,26187,13602,-13044,14110,13030,-5605,24313,17668,-17620,-19367,5925,22156,23460,-29120,7919,-17954,4186,1519,19590,-9937,1602,-7599,5506,8393,-14412,25369,8836,19430,15860,21415,22786,9280,2250,-23024,-9376,-17486,4140,-17830,-32584,19288,-4429,6110,8678,-13735,9759,-16170,1080,-18822,18118,-12096,4009,-13047,13074,-23251,28115,31430,-30649,4185,18093,17979,-7167,8113,-5507,27852,17857,17886,-22401,-10769,-32711,-22216,-24248,-4371,16662,17198,14663,-6345,-31738,-17023,7601,19149,3649,-21156,-26665,-16044],"b":[-11639,-31316,-17380,-9520,5637,-32053,-24307,31239,8828,2955,26324,-6081,-11926,-28843,15918,-11868,-18290,24438,16529,31140,8870,-1575,-7972,9901,14170,32398,-3717,-14947,-21525,2387,1778,-396,3839,17166,22853,-23290,17881,31314,-24818,-6057,1502,-31260,20630,22345,-27334,3782,-22290,-12856,-4546,27007,-14483,-28442,-7334,10314,14227,-25930,9946,-22257,-8108,21190,12898,26438,-11973,-16030,10838,-21887,-6551,-4047,-23339,1399,22664,10931,2908,10528,509,8342,-18456,10987,28254,9766,5228,-18995,14092,30663,24088,-4448,-28034,1267,6064,-3373,-10310,-13805,-9702,10486,2934,-31630,21368,29151,-2909,30797,-2216,-13011,8962,-32075,30286,-23296,9035,-20936,20460,4523,21598,-7078,18296,2923,-9182,9617,31244,-4447,-21882,4541,24948,576,23505,-17520,-21704,-6327,-16381,32432,-9942,13479,30462,20610,-32298,6657,21304,30756,16130,-2427,-22947,3824,-30671,31420,29514,20393,1577,-12434,-2756,55,15887,8130,-28170,8069,-24060,28103,23318,-12996,-10990,-25830,-13331,11836,20417,-15635,-320,20887,23791,-11783,18877,7155,18559,28699,-21788,20657,27353,-25040,8283,-3837,-4706,-27239,28986,-21585,13659,-31951,19253,22367,28921,9804,-23395,-14836,16743,-3957,29769,4394,13176,-3318,-7485,4201,17668,-21374,-21411,3461,-25442,-10431,-8649,-30855,-2703,32403,-1923,25360,-27603,-5704,-28992,18825,-4886,23029,8426,-8731,67,17799,9202,-15957,-18925,6204,21205,27020,-29880,-19047,-1546,20557,-7653,9811,-8749,-326,32148,15370,1588,-3321,15006,32433,-10728,20172,-6037,-6951,6230,21845,-16689,-18111,-19652,16147,32457,22318,-32577,-19235,-4244,21397,-24982,-1356,-30416,6241,-13566,-5300,-16715,10454,27143,-17333,-6943,-4036,12115,-24703,-4370,-31380,28238,22361,-5563,1701,11440,10517,16359,24556,-6103,16050,14108,-5911,29583,-22903,-17280,-28165,8509,-14928,10845,27712,12540,26898,5399,6916,-23201,31225,-29886,21682,-26244,-1488,23071,-30773,-11894,-15258,3697,32314,28028,-12711,24104,-10841,-29427,5445,16016,-32611,15310,31504,-28007,-8947,-16190,15607,-14001,29119,9738,24167,3268,19306,22625,6151,8222,29150,-28104,-1473,31145,-7229,16037,2075,-7681,11299,22133,-16344,-32309,25474,21870,16476,25632,4414,15214,30394,28235,31792,13234,-18532,28144,-9794,-27132,-1354,-23254,28262,-27970,17736,24645,-23305,-16504,23023,2234,32302,-7668,27321,10834,-18302,-21789,11294,-25594,-32686,-4997,-32728,4496,-22549,30434,-35,-23524,10902,14201,-28146,-31659,19837,3269,-22145,15332,8068,28360,7211,17531,-20911,-2533,-13002,-21375,22568,-18447,22228,-28500,-7468,755,-21326,-7386,28527,-21285,29879,-26788,-23617,-2923,-17544,20053,-21489,-12921,21163,31117,23116,31787,13683,-1582,27381,-11873,-16818,-26296,18363,2948,-14903,8164,17270,-25442,12432,-22965,8082,23875,2418,3843,-30176,-470,9823,-21025,29375,25048,31797,-24880,-20639,20193,-26530,-30289,19214,19922,897,13828,-24718,16847,20300,26414,-12971,-27369,1811,-28468,-20042,-18523,-18665,20809,-27414,16522,-8115,-24822,-16715,-31058,-13079,-20106,26759,-14049,-12218,-26647,-26622,-5979,-24167,25361,-18823,9498,6422,-10773,-6422,-6044,-17126,13376,-645,17454,17676,12082,31700,31780,124,-28481,15536,24778,-20535,31589,26488,-845,-21283,20481,17875,-732,26602,24022,26058,-30332,16616,-25532,11935,-9729,-3536,-27253,16996,12107,18891,-16416,-3206,3801,28434,-4272,2815,-4208,15,-14416,-12197,12249,-15593,-18476,-21362,-4107,-30761,29281,27929,28609,20536,21220,31046,4385,28457,10215,27425,-7846,15730,11654,-28506,1855,28007,1057,-27111,23675,29553,8473,-13300,-3199,26826,7271,-23716,-21533,21564,-12310,7128,23571,-15795,2290,19414,-28025,-9256,17694,9129,-13566,-4858,3787,11357,-21895,-17325,15619,12728,-22085,-16091,18386,-31177,-19305,-5907,-11708,10265,-11848,28331,19318,-612,17129,-25758,-26251,7933,-8785,8808,-5420,-4041,32321,-20493,-27679,-14011,7418,8877,30114,18291,24321,12966,-1747,-30531,29644,-16127,-28939,-22427,10735,-7878,20607,31656,-12314,7158,-1723,-27952,14168,4795,12750,-27383,-19164,-25436,1344,-19609,-13160,6434,-852,27026,-17455,-3504,12551,-25901,-23304,-21963,-23663,-26427,-5321,-19833,-16085,-27353,5057,-28245,-28464,25512,11681,2581,30329,-6917,-25390,10312,-1532,-11786,17644,32581,1374,-28283,6249,-32245,31511,21562,-2980,11296,28430,6484,22101,-27999,12825,-15986,-15064,29508,-10571,22762,-31503,-6266,15507,12946,29084,13069,-26737,-29073,-9386,4499,-8090,-24508,4314,26052,-20022,-22203,26576,-21277,32128,-9170,22787,27791,30082,12121,32561,10141,28904,-15270,6882,-14433,-25275,8148,12069,23000,-11673,8387,3303,-5642,12083,26686,31626,-28774,-30589,3174,30047,-17843,13740,23857,-6352,13101,-18080,-16332,8126,-20765,28558,7920,22145,24696,25419,-3739,-22504,-32623,-28358,22334,23146,-7263,-2046,-6318,19864,-22730,-12398,18724,-18735,-10219,-10868,-21454,4707,-29895,-30364,31124,15974,-15675,-17974,-8666,-3671,-22182,32022,-14293,-30253,24675,14736,-19989,24820,19146,-30421,15200,-20883,301,-23884,31750,10340,-3514,17707,24374,19035,-25927,-29847,-9024,-23054,-27442,-10667,25689,-10348,4128,-15744,18749,14714,-16488,-28310,17229,-24580,19195,30009,-32526,5574,32356,15442,17460,-109,24326,16443,-22535,-11954,1384,-30928,-25685,8225,-28006,-1941,17940,-22680,20161,10862,-260,-8478,27886,-14277,-26531,-21368,-9819,23466,-13180,-23391,20709,-12938,14952,20298,-30262,-354,-12578,26833,-16678,-2345,-17888,17475,-504,-10805,-7066,4258,20023,-21893,14347,7417,21737,-18680,31707,16856,-188,-27590,28257,22761,28645,-17690,32139,16587,2141,14325,4119,4647,-18796,24309,-1286,-2706,-10802,13594,-17997,21463,-29977,7705,-7046,22814,18580,-25466,-2536,7550,-11377,-3595,-8360,21203,1584,-12870,11198,-2538,2209,10571,-18717,-28416,-7871,18170,9000,6101,9713,-25053,-29371,31680,21309,-14599,20376,24101,25874,-19436,14148,11688,-12133,-21154,-13528,9258,8020,10880,-2305,-23163,30779,-23873,7068,222,19467,21119,4574,-21171,6522,-19193,17699,-16532,-11478,21097,-17619,-22935,-26269,-30010,-31601,32374,-16677,15316,11295,3958,26930,30535,-19550,2184,8649,10914,11789,6662,19809,-13909,-25883,6510,-25557,11459,18108,13733,25035,3040,29969,-19210,-8629,-20416,-9376,-2129,-17657,-8208,-2521,-1566,-25659,-23992,-30375,-31495,-26223,-17157,3457,15194,26525,-17520,-10910,13568,1339,-4025,-12688,8551,-25332,-27347,-10483,32471,8462,-13280,-19505,32601,-928,3887,-2294,14183,28447,27953,-20149,-29978,-28806,-17756,-28705,-22261,-2144,7521,25702,-8385,22770,-17975,-27583,-8657,10769,-7503,32662,18205,-2082,-10587,17909,-26387,8902,31173,-26552,-24793,2293,3922,22159,-2026,-891,-30756,764,3072,-15744,4828,13579,14881,-20417,6515,-26271,-30414,21308,-21085,-6302,-689,4180,-6406,-15251,-30668,15775,-30108,-24286,-8089,-31702,-18070,-113,3360,18621,-10720,-31433,-15037,-8708,2100,20803,8316,-25839,1616,-9569,-13488,-24635,-3071,-11133,29442,8612,15333,-4014,-19975,-23839,13503,-17874,24705,16164,-9392,-16151,17231,5306,16504,-12176,-8839,-26983,-10840,8893,-2923,24028,-3070,-27373,30958,31314,-4174,-15297,-26088,25523,6338,-29412,1369,-11095,-658,14163,-2166,-19921,29057,-10228,29011,-13102,6390,13475,24973,-9873,-31467,-16633,-4088,-9538,25028,25758,-18277,-10809,31153,-20086,-12261,-5787,-2614,-5580,-13030,-29042,-2224,21107,-7369,29887,2504,23234,-22801,-1206,-19760,-26557,18461,19398,19687,10667,-23241,20989,26803,5440,-21316,19065,-1569,-6824,-24510,-3182,5858,-4003,23800,-29522,23186,-21997,-25796,-11804,31879,-396,-14684,1616,-9929,-4717,-32356,3080,1495,18873,-10288,-11584,-3226,-761,-23361,-9190,-28087,-11909,-22892,3112,14035,-14634,32698,-12873,14132,23732,-9627,4552,-31032,-2654,25516,-31919,29718,-21934,2466,-12977,6118,2878,22871,-25154,-11015,-20183,-3969,18527,11825,5438,-23429,16506,26298,-13553,-13149,7566,4582,-13217,27462,-14052,-22252,-14931,23268,-20515,15183,16018,-19665,12134,26852,15569,31926,203,-14319,22031,7818,7435,-30919,-28918,-6805,13675,9289,2534,-2586,2820,21750,17034,-22381,-6435,-28949,-27685,12281,-18432,-9848,2783,-6178,-27431,-13966,6925,17472,-19880,-10272,16631,13091,8177,5895,-11858,-17154,7745,-8007,8809,-11347,-31485,-21423,18836,4103,-32439,3103,14491,-6105,6922,19574,-26590,21259,-23040,8961,-17686,-17703,27763,22007,32538,-24883,-21032,16402,20976,19914,-10469,-23648,-30007,30045,1114,11571,-14069,2397,22917,-28000,-26266,23246,7872,20994,-15626,-17972,7801,-9448,-29480,17530,32282,-14398,32596,27278,-25158,32367,-30371,-13421,16003,23373,-26273,-27233,32494,-23511,-29955,841,20829,-11255,-29528,10979,-6486,-23026,1459,-31380,30736,18601,-16584,5771,-23613,-13296,-9465,-24098,5075,-9636,-29586,12686,-10035,-27189,32034,-26799,28952,-27006,-21263,28680,-17749,-18449,-3246,-29686,3065,-6,14061,29348,9737,-17247,30736,7707,-31412,-18614,-19288,-22257,858,4015,-13587,-26833,27148,-10404,18621,-15653,-4825,17888,-9684,-8639,23650,1822,-12726,-26865,16142,16797,-23782,-13560,-15975,23047,-16979,26530,-26966,-19009,1471,-25610,-4855,14952,-15098,28772,-13800,4084,-30828,-19418,26448,20561,-2303,-11144,5683,20782,12986,-3433,-10162,-32507,2471,-26787,17059,11457,-7578,-31683,1737,8211,27616,7540,21971,-3680,14698,-15651,-21495,32369,-19645,-2526,3686,-17705,10825,-2633,-29910,-24244,18992,8541,29306,-789,-27659,-13622,-527,7580,-7641,-16235,-13730,17549,-15150,20776,-7006,-20300,-4451,-17801,8789,-22519,-684,20062,-22917,12439,-15230,13537,27503,28364,-21862,30361,-28647,29898,6136,-32107,-3657,11245,-12961,28584,-13941,12167,-20417,5098,-3050,-2798,-6893,22713,9670,21425,-27855,-14308,31674,4229,-27012,-24009,-16098,-9473,22296,-21361,-13876,-32333,-23766,-9755,30334,15138,-9093,-6090,-6383,10714,-10272,12445,-9885,2079,-15224,19833,32049,10652,9779,8952,-689,14693,27412,-1781,-13844,-32366,6978,2826,-9071,-3492,14234,9821,-3056,23236,-32700,-5489,5607,-9025,21190,31993,-31077,-21849,11671,-8194,12998,29215,-21127,12280,7101,21421,-11534,-26355,3347,-16888,4632,22271,-16486,-21157,-7669,7211,8119,-26202,-15734,-27703,29803,-15666,-424,2644,8078,-12001,1870,9769,-1082,-19226,-31191,-20850,-22777,-19550,24198,17093,-30895,-20102,23506,5220,-4222,-4629,-5275,12060,6983,19824,-13495,-17664,26391,3539,-12599,23427,20642,19746,-6696,-4047,-25021,27943,-27045,6666,-24049,-25468,18584,-14058,-12249,10016,-29731,-10376,22682,26543,27613,-14307,-10852,-10428,30521,28900,-23371,-15740,-21530,-29746,20568,-1360,26450,8443,-14381,-13012,-28371,-6633,-17836,-22647,-32734,-9117,-15346,18618,9594,5174,-4133,12631,27566,-14218,6408,22413,4243,28324,-20782,1998,24458,-11384,19027,-29839,-8362,6828,1569,-14678,-17496,19957,5078,-13098,-19443,20010,-2976,-19409,-21873,14446,31977,20490,-13147,-4922,355,-18347,13628,-26004,-28701,-14895,-30446,-16714,19872,26780,4670,6132,29710,29077,-19806,-1488,-18368,-4534,-14298,19479,15137,-973,6722,-20606,12387,17618,26609,11598,5342,-19305,-26091,-27070,-4884,20306,-20305,-816,-27355,-17982,15239,25285,-23968,-12857,-1349,-27025,-16546,11613,4256,-2145,-25687,22726,-15433,22218,-11013,24058,-31154,-31393,8909,28223,12973,-18515,-23849,19651,-12817,4036,7190,-353,-29546,12603,14433,18462,5122,23233,-27162,-28994,28977,-10940,15387,466,19683,22468,-9574,-28517,11920,12181,28310,13534,13557,4453,8990,-6236,18706,17910,-19352,-26877,-10820,20606,5538,-7598,443,-12795,-21903,-27202,-22328,-16296,-23427,-26118,5532,24728,7116,-7551,14430,30310,-3299,-6417,9725,-7756,-25649,-9485,29465,16109,17047,15404,1253,30464,21296,23201,18304,-5933,-17163,-14020,14041,-6298,-8453,24481,10174,888,31131,-17060,-7150,5480,8158,-25486,3024,-27908,865,-20018,-2895,7985,3266,-6197,-8672,-12453,-23559,25349,-14756,30506,15783,-29219,-8193,31388,-10470,-26919,-7676,13846,30330,-30268,-18033,28694,-14559,7586,1408,26367,14868,-28335,31227,-17033,-15584,-4434,23720,20450,22138,-17718,-24770,31347,-25136,-6758,29087,23416,-3208,-11873,22038,19090,-6024,-18405,170,-8461,-15904,14905,-12533,2305,-10275,21644,-4095,-28174,26078,-5634,-12438,-22273,22700,-21484,30946,12071,-6434,-26591,10652,1198,-580,6973,-8152,28981,27868,-18881,15305,-10923,-4517,-17292,13385,12347,30382,-31915,-18114,-12660,22498,10560,-8065,15809,-27841,12265,26304,27628,23550,24483,6933,-15651,30661,-15181,18316,-2685,24560,-22603,-6471,19662,-8715,-23933,-24028,19536,-8457,22126,-883,-10842,22980,13771,9267,12711,-8436,-31565,-4247,-3508,13469,-10710,-8646,4252,-18993,31055,21370,-21099,-16892,6919,8985,-25098,17085,-30253,27332,-24397,-21417,-29462,27908,2895,25432,-5742,24822,15645,-24738,1322,-4411,-405,2526,24111,28856,-16772,-19365,-12557,20249,-5590,-14268,8852,6080,1608,-16995,-17702,9279,-32677,-15186,3844,-24305,-3835,7150,-29164,31828,-185,-2138,23883,-17306,5893,-7562,11052,-27278,27732,2396,-31189,-21806,15799,-10978,31211,-22557,7522,7297,16291,-23636,23070,31358,18411,23161,-16594,-10511,31625,12339,29407,-30306,11400,-3544,325,2517,11918,-26549,27724,-9797,-21058,22690,25368,-19479,-31883,8400,2312,32097,18611,-22932,6627,2136,-13799,-3069,728,-28155,-12674,16902,-5897,-13816,-3526,-9257,-11354,-24892,19968,21740,10394,-881,27959,5351,22091,-25866,-4725,14692,-12576,-3840,-9674,22504,-4509,-23830,32341,-30648,11075,-14225,-948,-20964,-9612,19146,28706,17259,-27436,-7586,-24764,-6022,290,27972,-17049,-22082,-5675,-21856,16037,-16350,-14953,-21455,31110,5240,7474,-11331,-5023,-29801,-2392,-5449,-27680,-24084,13094,4140,-12279,-29284,-9481,-16340,20744,-4149,8842,28749,22598,-23634,23955,-27217,-12948,-14487,-16304,-29677,1931,1512,-18363,275,-26015,21879,21713,1731,24847,-13445,29051,29935,-4760,9378,1308,15729,12863,24596,32158,841,-12319,8234,-3177,-22488,17368,-11989,-16936,-28346,6293,-472,-25254,-24542,-31726,-10849,8502,-24973,-21736,-2552,9526,-29656,16772,5810,-32487,-20755,-17578,1589,27742,28054,-6581,27133,-3872,13868,2600,25720,24149,-12798,-19035,-25554,-8375,20027,6743,-860,28253,7785,21059,3988,15581,32092,-31330,-7660,-30330,18210,30918,-30049,30223,-19426,4309,25199,-24139,30496,19566,4757,11598,-10601,-2289,2980,9370,11444,10195,-31771,-1296,-15828,137,-5809,24725,-11570,30948,7539,-12245,32386,32648,-9806,17830,30800,-7087,15287,-21393,29990,7719,-12764,27720,-5482,24762,6551,16686,-10293,-23235,-6710,-31615,19728,-5713,-142,-28867,27193,26817,28627,-17144,24999,3400,3380,24618,3281,26342,9682,1314,-13511,-7798,12690,-16287,32690,32695,-21334,-5558,24691,17986,-21639,-18369,27519,4420,-17216,14481,31475,15410,18382,25902,9461,14242,-24008,1693,-15124,12140,-6455,20925,5716,-29540,-10527,24974,-4569,-30603,-24080,-4646,-30675,-12645,22564,26784,-27426,-31841,-24351,-32673,5347,-8799,14576,4056,-26155,192,-2809,16074,-18332,5951,-14999,-688,-14675,11314,-12529,23810,14543,9713,16017,-22793,11878,24705,5329,13972,-20706,-4873,7989,-15364,-3945,16406,-15268,-31365,-25159,32077,5459,-18546,-497,-30116,30297,13939,8604,-17469,-19515,26698,26614,725,17741,8390,-22329,992,18365,22318,-7069,-9072,3523,4993,18824,-21254,22398,-17888,27921,-25636,-16485,-30005,-26326,21743,-15782,5946,24396,-18252,-12882,234,-2952,372,-5835,-9105,-31669,-20860,32053,-21230,12901,17652,-31678,-26935,-24187,4613,10826,27406,16128,457,-23249,11282,7589,-6966,14046,14032,-17989,31033,-12789,-26359,-19986,7098,6643,9831,-25296,-31959,-32041,-24197,-20050,-32754,-12658,25619,17666,-11568,31452,26248,25814,9512,20887,9175,-22797,30407,-12309,17561,-9325,-31029,-1174,5454,-32763,18806,11863,-19980,-6862,-14260,22619,610,-13450,23347,9181,-732,23362,29292,-7879,8262,-15043,-9193,1743,-21996,-32448,-10136,19948,-22477,-12496,-25127,27852,10947,-23388,-6088,-16365,-23383,-20048,28267,-10594,5858,-18760,-20742,-26299,558,-30161,15651,32595,25969,12176,-8051,1464,29902,15524,-29559,-24860,15845,-6926,27856,26137,13346,-30037,21223,-8473,-20656,-17632,7931,-11270,-4911,3431,10904,-31820,17440,22930,-25350,-14768,25538,23069,-14940,18741,2479,9778,-12562,-386,-7464,-9352,7522,-24385,16490,2612,-31015,-2930,5343,22976,21366,17455,-27422,-3470,-26582,435,32730,17090,1383,17403,7254,8802,-30131,26,-896,-12303,-14000,-31184,30244,6206,1199,-9986,29623,-24046,-1603,13346,11334,151,-22350,-16089,-9640,31784,-31400,-4293,-4452,-25214,28910,-4489,24645,-2473,-19852,-867,-26438,-17215,31927,5435,3251,-14840,7020,729,24135,-24548,23511,20992,-15825,-10858,1571,28277,22061,11990,-20578,-20345,11008,-19210,8130,-26211,-11655,4274,2069,-19777,-30966,14985,12125,-24635,30539,11285,13569,1024,29214,-12178,-31013,20583,-3957,25267,8808,12986,-18358,-22387,8497,-29063,22371,20687,-16640,612,-31290,24258,7170,-10176,-4235,-23528,2815,-2432,24226,-17827,5702,21999,26227,-13496,-9743,22675,7095,-7988,10491,-29629,-15488,-13467,16125,-1078,-3086,-8145,2628,-13481,-20224,18756,19900,-18745,10248,-5697,3847,-26753,3543,-26104,3584,-4997,-11163,-23481,-15765,-17702,-4208,7260,-27794,-29879,32041,15466,-26740,-16214,-30768,22154,15477,-1086,-18757,-14662,18202,-6213,-28672,5335,7811,14344,32406,-21109,20359,3183,-14445,-8824,30954,7161,464,-17577,22227,29024,22452,27202,31913,21726,9901,-27593,-27255,11902,27330,20991,-21950,-24194,-26438,29020,2362,-22341,1588,-22594,24771,1227,-10935,12363,-28357,7389,-29228,-30169,-18217,4005,-14978,-28756,262,-25292,31215,-591,29202,8350,4585,-30819,-12514,-852,22940,-1696,7722,29271,-5443,-22682,-25837,28913,-12508,31703,-2626,9326,11299,1786,-16051,14840,4385,-1499,-13922,22176,2514,19109,29652,962,-14249,26088,-23454,23105,28037,-3200,-10514,18211,27872,29976,14715,-10337,-25472,21647,-14191,-5212,20583,15952,-28652,-884,-15029,-11935,-18810,22125,19334,36,11534,-10919,-13621,8420,22812,4899,1741,32126,-4763,-2989,-3841,17491,-17545,-8735,14701,29939,13696,21997,18820,32274,-15981,6637,15459,-11865,-27014,-32337,8968,-13056,22557,-4464,19749,1324,17385,-26639,-23023,7431,11028,11486,6790,-26502,-24269,-29817,23758,-9045,-5783,5692,-11873,-24854,-5077,-25819,-25347,11710,13586,22881,32613,19340,23313,8815,-26482,13103,-28416,26036,-18340,21738,32165,-8594,-3598,10427,-29874,-29574,16694,-21374,-26623,7685,2349,362,-19389,23245,8277,8302,30194,15699,-12755,11013,5813,-12908,-2413,-3641,28675,3874,-23305,-32507,-2857,-8876,21999,-3459,15299,-14365,-25799,18194,-11171,23663,29588,-5025,-1418,-830,28106,11961,-10352,3616,-12503,-12925,-13452,7510,30857,25130,27371,-4323,-11278,23279,32319,-1814,23541,-3305,22078,12774,26005,4611,31177,-32560,-9962,-12760,23872,-13141,14984,-10313,18797,10323,-31118,-24322,-18827,-10853,-4478,490,29426,-6388,-7147,24030,22057,14344,14543,21610,-20237,5317,-14461,-30925,-14676,-21223,6454,-16265,-21015,29260,3744,-29909,-16647,-14039,-7454,-30617,29053,-5803,-22170,-22540,16112,6121,10719,12772,32501,-29195,4035,21792,17918,-14189,10636,30449,23897,28943,32292,-23545,-25046,5980,-7041,-13292,2474,29471,-10433,18595,-17334,14882,20747,-21047,-23688,31346,-10818,25193,4701,32669,5198,4435,-29292,-23534,-6539,21394,-4954,-28670,19076,-13823,-32493,18602,-4600,-24771,-8184,21128,-5295,27058,17832,17040,12887,-32268,-844,868,-20546,8236,-552,1404,662,-28618,1306,-26906,8586,4782,-17671,-30719,-6591,10143,-26620,-20281,29089,-26345,31089,-8278,-18347,-9861,-19917,9126,-15570,30684,-6600,30086,31185,25324,-1812,-22128,794,30404,12045,-31310,-30980,-19416,-25448,10375,18135,-10351,12424,-21223,32561,18572,-8735,28883,24995,-10412,-12161,-26119,12495,691,15776,29694,-1391,-23590,27013,-2973,-31033,-7565,7668,2530,-9928,-13054,3988,-8139,299,11308,-30531,-14333,-31809,14661,-2787,-32014,467,21246,29638,-7304,-21932,-15290,-654,23331,18170,-17644,20258,-15988,-8466,14505,13808,-6730,-25827,-11291,28568,-2986,8424,-211,21643,-24044,-21669,23881,-5608,-20709,5776,24373,-19955,-26524,12853,-23084,-1060,23690,-5605,31055,14254,-20202,-19356,1745,-3422,4946,-16517,-22381,30984,-9576,-903,26786,20207,-25246,-6192,9083,-16521,4908,197,10639,16968,-26794,2246,29781,-20549,-17667,-26069,11160,-26744,1095,9448,20278,13661,22860,-10743,-22527,-4960,5509,-12140,-6742,28701,19726,-12723,16142,27248,13854,-7542,-22040,-14004,25424,21367,-29803,31399,-9153,32747,-21917,5948,-26089,22011,11972,7774,-1307,-516,-11331,-11213,21509,-1090,16595,-5749,19539,-22914,-9814,6498,-2868,-26439,980,-21781,-1212,11708,-3017,-8555,309,-52,-9922,23924,-72,929,-2894,6608,-9826,-23688,-18384,21635,8564,3053,-22344,-2694,-30804,27019,24326,21504,-28661,-18255,-4765,1240,-11925,28983,12227,19631,7925,-23556,-21690,-24532,9161,1156,32160,-23677,-30681,-3500,15699,-7739,5580,30083,-18870,-18622,370,-8446,11452,2335,-14193,3012,-8928,-10085,17526,19075,23923,-27166,15292,3384,25234,-9550,12596,-29223,-1314,-11010,4702,-1920,-1919,6789,27349,-18986,31818,162,-21669,-19818,14308,11469,4504,-7006,-18963,23080,28774,4878,-19772,13533,-8813,-28615,19136,-26288,7537,11603,-3070,-12633,15149,28385,9126,-12916,-6302,-25560,26641,-11720,-11777,25693,21211,-678,-26892,2753,-21975,10381,28515,-8169,695,24523,29477,13691,5290,-12103,17845,-8340,-5623,-7384,-29504,24076,12751,18414,19695,-10890,-27269,-19373,-3681,32141,1676,17310,25067,-9880,-16134,30943,25642,-5341,8558,21390,19259,-23514,13147,15969,22946,-14330,-28900,8024,10098,-1754,-32127,13363,-10444,13393,-990,-23516,-30264,4510,-10121,-1176,3884,24324,-16632,-3816,-18323,2,-5639,-25448,27430,-29848,28711,13923,-20593,9091,-2874,-30414,27530,994,10379,4862,32009,11021,-14542,-11202,-8353,17237,-1949,-5848,-11020,20698,25744,25632,12256,-23655,-10950,26701,9116,16179,-31513,3780,19099,29967,-15064,31275,6291,14830,-31906,1055,-16943,11242,-26850,-17701,-10504,-8623,3866,13912,-24153,-30850,-24702,-2404,22617,-31725,-9538,2106,-22611,12280,-3959,19273,-4308,-2703,-9713,-17975,-5503,7991,-19467,-31978,-9946,-18604,1845,5879,25406,7764,20947,-17864,31910,-7953,28817,-25009,-6034,-28652,5355,-16184,-27608,28585,18691,-17451,8098,-18034,-30944,-28977,12031,-7889,-14183,-26239,-32665,-882,-25449,-9842,13283,9165,28806,5922,-15837,16987,20827,-16694,-23733,16878,-8935,3001,20994,29189,19586,26154,25007,5510,-24063,339,20244,-22238,4131,-491,2641,22716,6038,2745,-10932,13358,25671,-30416,-10243,21711,8275,6688,5931,-3664,22762,14966,-19553,-18939,-14799,-31326,-22517,-27980,27597,-30276,10299,-29233,2832,-2223,-18703,-25804,30054,16707,29681,3326,-13314,-14018,-16083,-20409,-11665,6442,-31465,29378,-19636,7234,-7053,-29640,-10566,6163,-15811,7403,7605,-5559,12192,2435,-3066,-10276,5971,32534,20270,20037,-26036,17558,3978,-29122,-11883,23433,-10371,4803,-29743,10732,-21521,-28440,7344,-8389,11563,-32475,-5260,-31770,6456,11697,8401,-18705,-26628,-12174,16499,3074,10319,-10296,2842,-2178,-23026,9574,-17386,13721,13221,3499,4387,-29917,-24464,7412,13584,-13216,11741,-11838,11164,-9463,-11544,-26863,-8464,27680,17603,32705,-23792,23743,-12235,25476,-5949,30852,-17587,29661,-4092,-7845,6469,11290,-26890,-13077,-17977,10265,-10225,-9672,-15089,-29407,9880,29420,-8477,-11723,-12809,12747,-5818,11495,7661,-20981,11434,16638,-30005,31967,9347,-3185,30053,24528,-6290,-6805,-16083,-32588,-28281,-10205,-12896,-13490,-32706,9647,9606,-15027,13008,-13280,-18373,-28235,7765,1586,17281,-30819,-19685,-7825,-19032,24517,-23953,-16268,23718,18162,13315,21005,9924,-25741,-18567,26610,-25560,-14079,-16361,-5688,5200,-16299,-28807,-17960,1443,16970,1528,15838,21503,-23474,-15343,6018,-21524,-2260,30961,-7787,-10509,-25759,8713,-19557,25172,-10738,-31319,2330,-3711,-17117,-3827,3498,1572,12581,30578,-25995,29051,-30996,-11187,-2273,18742,23109,-19202,7479,32404,-1776,-19270,-21886,28733,-21075,3095,-14542,-14065,-20958,-1331,-21659,1072,118,13439,30130,15770,-23154,861,-15425,22195,-1328,-8651,18479,445,12931,-16561,-13579,3273,-2994,26669,2911,27998,-25367,13794,23965,-13673,-15878,-23344,5030,-4068,8093,16139,29773,-24555,-3188,27136,23983,6426,-4769,-24208,-4146,26672,-91,-18433,-5649,-19927,-2226,13540,16115,27549,7443,-13740,22781,14844,-32712,13979,-31596,-15822,23404,6203,12879,-1269,-10424,9886,6944,19156,4256,-1839,-7185,32255,6721,21438,26160,-26136,-29762,-12255,-13294,781,-31482,-29945,-4436,8730,-10916,-14422,-9192,-10860,32325,-8020,6087,22963,30952,-13800,-11073,-12239,28854,28639,-25850,343,-5966,-266,-169,-32012,-11594,-6775,-25379,-8587,13738,-5905,24963,15025,-3081,-12240,-9012,18771,6106,14564,-24855,5665,-26222,14000,-4139,-28036,-32567,17556,-7507,29055,13429,-588,-3368,-25304,31914,29232,-24547,-12446,-10309,-17158,11735,-29338,9706,3932,18456,-26142,24460,-23322,25398,-2200,24011,-32224,-29302,30558,14545,-672,-30245,14746,-15883,-4984,11035,30315,27196,-25100,-27756,26344,-28634,-19534,-18868,-6175,-3924,25636,-2744,-26984,-3199,-17055,-20357,-11505,-7608,-27725,19063,-16364,-27181,22529,-18573,20132,-10910,-16049,2112,5976,11735,-19619,3524,6165,-11950,8537,-257,-7816,21772,13643,18777,-14918,6513,-16733,-9134,-29453,-1020,3278,-8190,24141,8321,-21894,-24990,13909,-32131,-10794,1275,-10273,5926,-29380,28472,-15106,-16230,-770,23828,4588,-24999,-9195,29541,29541,-28318,15551,-18144,10963,31586,5490,14279,-2200,-23998,-26678,-10826,17091,-15803,-3047,-1767,-15165,18928,32276,7331,-7913,-29870,3036,9750,-13332,-30501,811,24025,-22732,24385,20799,-25957,28835,3584,-11333,7031,2404,26926,-11457,-32563,-29839,-5366,-10620,20020,11600,19102,-14513,29203,5263,-15003,3767,30119,-12104,-25963,7102,7332,-23695,-24853,-1409,-13658,32300,-13377,-6847,28369,22975,14588,2634,-7388,8748,23946,-7182,11677,-14187,14967,-1069,30182,1302,17187,26619,-26201,-30583,-2380,-28849,-9919,4425,11022,30182,13498,18938,-3994,32609,18472,15397,-7005,14074,5606,-25183,-16059,30986,16333,-24880,-8963,-4756,-6298,-26762,26943,-8882,7308,11364,-15030,13876,13549,15358,17795,-29136,-12983,-3949,-31721,-32251,-17777,-2946,-32409,-32072,-20315,-6646,14770,18059,940,31480,16278,-15494,-26166,-25451,12519,304,-19445,6696,24190,20632,-14707,-23606,1741,31611,24520,-13230,-30292,-21229,15589,-29244,-20712,30580,579,-20353,31277,13032,5770,13281,-1676,-26057,11994,-18165,-8782,18596,-10847,-29029,-13866,2476,10435,-22443,-9659,28496,-13281,24851,27340,-21527,-21146,29817,-9988,27212,-32193,2069,25025,1154,14485,23536,-18581,-12512,4050,12511,-5800,-16723,27115,18187,-30893,-16499,21926,-11991,18746,-406,-1666,-23679,-4676,17822,-31595,-10102,29064,-19973,-13052,-13690,-25528,-12476,21147,32266,21446,2865,23035,-29902,23121,-5681,15378,-15445,10364,9726,-30024,12239,25996,24670,-32518,11975,-8502,-1416,21064,19590,-16360,22238,-23279,-20063,-30501,-3562,-985,-23260,16730,-12605,-23761,5410,23029,32043,8277,13384,-6404,-9112,30707,-28807,-32152,-32084,16201,26612,25355,16451,5820,-15914,-17731,-5882,-29090,-1323,-16410,-19600,11383,-14143,9606,-22369,-4635,-6430,-2205,4373,31749,-11943,3650,7259,-31326,30014,30916,32150,-31559,31532,-32700,17411,25377,25423,1095,-1569,-23257,16133,25318,-19579,-17957,-23859,-6411,26195,-5234,-29571,-28940,22900,-3233,1623,-5493,-4251,22449,30925,-29758,23892,28173,-31609,23276,29382,32691,23344,14026,25302,16000,-17645,-9034,25511,31256,-16483,-26834,-19467,-7573,-477,-26039,19961,2720,-22211,10095,32256,12181,-28165,-4761,1864,-30006,-1751,-7010,30935,-591,-16501,27551,-667,-25924,8810,-8132,22845,23934,15603,15590,22423,31889,21524,-29810,-8451,-11720,-23081,-21256,23769,-12523,21607,23258,32427,26210,-14269,1525,28972,16748,27283,27141,-16609,-21985,21925,15492,-15141,-2031,-25406,-25063,-10864,22966,23295,-21208,22088,12053,-18249,-19130,-32434,-8561,-7618,24104,11684,-18777,14595,11345,-25334,-32440,-19897,-29128,17077,-25381,30782,-32299,-14597,19940,15961,3030,-14858,23324,10736,7047,13524,1265,18608,2845,-19449,-32408,16483,-19114,-8201,-23901,-27777,-29283,-9910,19587,14830,-2475,19915,27702,1166,4225,-30445,-819,4694,-12274,-13645,-12111,23524,4266,-21553,1494,-21454,24739,-30008,29922,-5183,-16689,30282,-21466,-3034,-10685,-12598,1957,-7200,10260,-11223,-25136,-24981,-24074,-30201,8953,12919,-27878,-24632,-15153,-7384,-5509,5505,-16626,31525,16720,17637,-22696,8693,20397,-25540,-29256,-29058,-28024,-17954,676,-5941,2216,-30133,19627,-20290,-8587,27259,-12503,107,29827,29219,-19740,-30818,-28180,-2125,-5433,-921,-29386,10710,-2162,20102,-4420,7911,-3971,-16789,15139,-459,-13078,19883,14356,20366,-18824,-16194,23002,-31964,-3716,-18352,28064,16550,14523,25124,13002,27551,27075,17590,-7340,-11124,-16097,-3958,32354,14509,-16622,-4832,-10347,12175,11147,-27974,-21050,30837,24677,26074,18437,-26913,-22887,8672,-26109,6165,23089,-30811,-10051,4845,27082,-29816,-370,21390,20543,25059,-22500,-28320,-11665,-22913,18957,4482,5023,-24156,-16109,-16596,-19362,-4391,-18525,-27451,-11084,32680,-21596,-1203,8586,-14936,-27804,-1092,-12978,-5087,-29013,-18663,-2134,3386,-30039,-14357,-4321,-19771,-9909,16782,-9915,-23718,-11503,27877,-15105,5157,-21486,-1699,-32001,-7242,3619,-10316,-7329,14792,21249,-31509,32625,26214,168,-13120,-11639,3923,985,18996,-25457,3715,-28128,2990,16712,-5268,-12995,-25969,3782,8271,-30859,21445,-19338,-19576,-13020,-18571,5950,23368,3881,31390,5393,-7636,32650,5251,-14188,51,24900,6941,-28792,-6881,-6829,-21481,29602,-2189,14277,13548,25311,-31484,20347,-3673,9556,22257,-14995,22986,-30085,4753,-28351,8633,-4645,8299,7257,-32019,-32103,7140,6001,-13523,-25576,-1865,26187,-21600,24022,-13409,-10312,20857,17170,-28801,1639,9715,-27517,-10780,-26725,14808,-21289,-8952,5027,-18606,28570,9445,22795,-8841,-15023,-2714,-8092,-14358,-28341,30678,4887,-21148,-3954,-1692,-9979,-12699,17667,12477,-24608,2071,16444,9800,-20981,21696,31788,-14937,3737,-22268,8880,-24002,-8106,4684,18212,-18077,28611,-29578,11978,-12248,-11167,16406,-14336,26488,28026,14478,-7970,-14719,-30987,-23070,30527,-22826,11769,14205,19742,23557,3134,18764,-24147,-25895,29264,17501,-17128,-11608,-10581,-31683,3084,-14737,-28492,-17705,5783,-6891,31469,24216,-13169,26729,5928,11629,-20756,7709,21327,-22996,17651,330,23977,4627,-8879,-5656,-9376,-257,1218,-12878,-15522,16858,8282,6665,17943,-21400,24696,22219,-6337,-2287,-17438,-7634,-10838,2161,-13671,27858,-18977,-1659,2801,-30416,8113,-12314,2683,-676,25081,26572,26436,-17062,-6451,-5112,2828,10795,-21021,-21656,-15306,29691,-10288,-23377,19144,16144,7105,-31061,-24256,29036,3868,-5159,24127,17659,25951,-5838,20012,1298,14616,-10072,-32145,6930,-16266,27060,22637,10051,-10819,-7302,-11920,929,3810,5542,-2147,26291,14933,-15769,9668,-10728,-14062,18180,-14459,22575,-19745,-23098,7468,-26560,3832,-5287,7506,-14319,17409,8129,25380,-31623,2422,15250,11196,24372,-24818,32044,-7466,11760,4819,23155,5285,-13014,-25380,-17814,9026,-6674,-32400,27335,-16865,-19376,-28529,23371,-13168,8071,-14682,27106,26521,-30039,2469,19135,-28894,-27875,1618,15070,29265,9568,14347,-10968,-11438,-13600,-20579,26615,6154,-13191,-23965,-17586,12904,-23597,-23017,28807,-10205,-18778,19412,9395,22062,-28037,3735,15817,-25308,-26563,2185,-21434,-21670,-28963,26405,-25171,13374,7986,-3371,-30831,27154,8819,28553,542,28397,-28179,15725,8534,-19007,25476,4575,3557,-26068,-8780,-19814,28762,-4048,16689,11812,3413,22895,-18770,14747,-31541,-14964,8385,-23944,31178,-16396,5454,-32420,-22008,-18494,28902,11303,-22864,-32043,-5739,18439,-18282,-13029,-9752,18044,-6329,14236,30998,-10333,-22578,14921,-31288,13603,5050,-17289,-4416,6277,515,-28797,15101,-1074,-12424,-12212,-725,-1664,2063,-4590,-23127,11968,-3864,3902,-2360,10622,23641,20656,-4100,-15454,2126,-5869,6981,12317,-23714,8461,-6847,14104,23941,21506,-12386,-8310,25477],"expected":[-11203,7580,3360,5136,20192,-16954,-21616,27295,1812,28656,-18248,26179,-21356,1585,17720,-5528,7382,960,-14417,25380,-29560,-1755,4188,27737,-6530,10346,8035,22194,9704,29773,-1362,-18484,24107,31984,-5559,-26550,-9142,-24596,30300,-29926,10064,352,18424,19082,406,-2852,11284,16672,-4854,-31238,-23013,-17846,26696,21456,-28801,-24864,10962,-4896,4636,-22172,10142,1884,-28494,-1910,-4990,685,-27819,-8130,-24807,-24551,-9296,-11318,-25888,5216,17704,970,13656,-32059,-20938,-32756,328,-6375,-12808,32333,15480,-17920,25414,25065,30976,29144,-924,-28912,-280,-7466,-24636,29840,31880,4877,9848,1188,-11936,30272,-4988,8700,-29656,15360,-29825,-14240,-21572,-19887,-26156,-8286,-19328,23563,15394,167,344,24575,-14334,13527,-16236,-25216,26388,-8112,-32248,-8717,-12891,16512,-4768,-28512,13414,-16022,-19520,30865,11888,29524,-24004,-14432,3770,6208,-14636,-14372,6388,24612,23379,13272,21716,-13438,-3299,-14900,7948,-21007,-1096,16312,-17742,32616,-13542,-8664,28595,29676,-24124,26876,25152,18579,-14814,3550,-8761,9850,10130,-27246,15912,-29372,1680,-11152,-29992,30340,24508,-27075,32606,-7350,15935,24383,-11932,-5307,-18625,-18356,-25190,1116,-989,23179,-17909,9700,-9976,22262,27123,-2937,23352,31688,29241,-21322,-19606,1961,27438,-28685,-3272,-32239,13973,30112,21629,-6376,14720,-19977,31464,2760,20782,6129,-30978,29618,26168,-12112,-2605,30980,11159,-26164,-18048,-379,2230,-5965,24262,-12784,-6201,492,30984,31232,-1540,-12603,-3706,-31835,13136,-2432,-16839,-27566,23018,4261,-11818,-32645,11268,20674,-16054,-24390,14330,-6673,-7984,-17665,-10718,-26000,-23808,-9712,32536,18992,-20800,16562,-14754,-24791,-8275,20996,16317,-3301,-20122,-25964,-2616,-2711,29797,-30516,10080,-31375,-9407,-1128,-17445,24630,8648,25850,-12895,-5325,8832,6991,25032,28832,17273,6464,5876,-27140,-16914,-13608,26710,15383,31114,5830,-19120,-29680,-9434,-13768,-3038,5352,4021,-5830,-28584,1134,27936,-29829,-28406,-7585,15600,12730,-302,-18096,20544,25541,-56,26498,-735,19161,15404,30846,7416,-14300,-3965,32227,32372,-254,-28232,11007,-9055,29837,-8778,-29888,-16626,28408,-22805,-25832,-6062,-7132,21402,2696,29312,23082,-30074,8642,-31668,-3360,-13432,-29620,4576,18234,-29412,4844,30498,-9028,-4880,16360,6247,27670,-5968,18346,-14082,-27386,27784,-11762,-31926,-14292,4015,-20234,-10512,29028,-30868,31112,22496,10142,-6428,17383,-11188,3408,5192,-9968,23724,-13296,-19545,-20363,18032,9620,-9728,-7832,-31648,-29465,3573,27518,6956,19440,1659,1052,-13316,-15980,23136,-9876,6264,-23046,-281,2542,-10240,-1465,20686,-22448,-30331,17745,-25936,20175,19133,-27428,22568,-27913,-5308,22541,31258,2314,-22656,-12649,-12160,7237,11092,11528,-22066,8496,-22998,18356,-25495,23670,30483,26880,28102,526,-8801,-3181,20592,30479,-13472,24282,-11038,17024,26392,-27782,10730,-28101,29524,-9254,25906,9416,12008,-1221,26620,-10293,-20400,-25154,-26791,14765,32280,-25798,19414,23221,32298,18110,-24632,-13132,-8082,-1238,-7240,-19944,11250,-26410,-31623,13178,25975,9819,21276,31208,-32765,23004,15788,27388,-2752,25821,-10944,-32104,-22580,-16604,-29512,-10556,-1871,-28768,32196,12146,-20503,3408,32642,19388,17662,14912,-2112,23850,-16142,10652,23092,-18888,5928,-27923,-24208,11712,9731,24144,1294,-8688,-18336,10820,-25189,-31896,4176,-4306,21056,-7234,-16464,13770,12413,-13455,7096,-20266,32756,12355,-10147,31270,920,25904,-16236,-12834,926,-29727,5718,26224,-15700,25210,4702,-29002,29354,6613,-5307,-11686,-13912,-8456,11484,2268,-3237,2230,-25205,28380,-24984,-13836,-16148,-29792,-21986,24569,7222,-13268,-712,-16464,24816,-7722,17912,22674,9010,-25982,-9816,-18809,16847,4168,-31584,1490,11426,-13482,11772,3163,26788,28736,-14000,10866,-15434,2632,9987,15842,-29833,-24991,15106,-22144,9568,3553,-21581,-2829,-13905,26731,5474,5998,1174,-3555,17252,25536,29187,-13839,28560,13850,-15328,-16107,-21393,-9692,-17585,25064,18502,-27592,27496,28352,-9496,9639,-28676,32294,-27496,31592,23936,15910,-22088,14620,31352,25814,-7259,23184,-5803,-20466,-31672,-15345,-21952,10228,-9717,32302,2674,-10960,9884,-22141,-30128,14472,26590,2943,19443,-30158,-2078,14376,-3148,14720,6112,-5956,-2870,7187,-31181,-20926,6822,27994,-23060,-10784,-2264,-16412,7615,7469,-24573,-8338,-28584,19912,-30081,11256,-28245,30504,-18719,21762,8476,-32690,-7393,-16138,-1512,26234,22050,-17992,8478,-22628,-27790,-31810,-22944,-18797,-10624,29960,-17693,13963,4452,3446,9394,26038,2240,29582,11520,25349,6347,-3536,12696,3144,-23807,10766,-17115,15920,6847,14224,28028,-1542,3541,16582,24983,-14615,-16052,-28376,3584,-14947,1760,7580,25938,-3096,31934,6496,-602,-25616,-31537,28158,21456,-32322,31662,-21616,228,-30566,-5082,16220,18784,-20026,7372,14952,-18420,-10538,-24100,-32230,12039,6047,-30308,24216,28694,-1644,27946,-27738,15493,-2012,-5602,6668,26695,-911,-22848,-876,13896,-6570,22524,31968,-21041,3432,-22448,10970,32228,-28830,-6135,-13644,-16578,23921,14029,-512,-7918,-31176,-20893,-10884,-24524,-14048,-29312,13416,-88,3616,13474,-29766,14048,15390,-27097,26966,25916,-10032,-25904,1580,-25497,29518,9181,-11584,11824,-11824,26272,5228,12413,-29368,4751,6848,8744,-25851,-28138,-18192,-2754,2134,26815,-20793,-21040,13346,28316,32656,-17131,24206,11632,12800,31150,26036,-22896,9904,6624,-5632,-19240,9536,27948,-31560,-9819,486,29498,-101,24326,22530,30699,14615,23896,28956,1272,-19616,-9066,-663,28299,-2245,-16172,24,32626,2139,27677,-5810,-11649,-17368,-6521,-13762,-24374,-4570,6818,837,-13100,15459,2369,-19606,-19784,-7632,17734,-4672,-1848,-30572,17953,-21304,18380,-6416,11074,-13298,-11452,-16157,6827,4404,-9216,428,-18362,2800,-19365,22907,-6474,15807,-18432,-31480,-9334,-27720,-18453,29640,12704,8332,-4952,18734,-11098,12720,-5434,21468,-5888,-9757,32549,-219,-8566,2016,4408,-18669,6395,11136,12686,-27876,-9231,24197,17196,-30140,-1926,20618,-4357,-12910,-14586,7054,7186,14921,12236,19860,18606,17338,12660,3706,-27512,-29329,12244,-27052,-24694,20354,-28508,-26580,-22904,14929,9082,-588,24093,-25214,15552,-25718,-18122,-23678,-6336,29920,24884,-30016,-11152,-20184,-11146,-13568,-152,14681,18607,-18653,-6507,-12311,21406,13423,4576,-26684,-10752,-12583,-27968,-18592,-27070,-28440,-6253,15336,8115,1132,12896,3529,1337,-10560,-16285,2380,-17986,-25350,32471,3562,-25680,12972,-18944,18545,17035,-12800,-19494,-12024,-17580,-4144,-1168,-23637,1227,19521,24870,-5342,-21072,9652,30385,5731,8653,11104,-298,-13680,11452,18897,-6140,17017,-25246,20253,-16024,-2284,27648,9984,-560,24889,24455,-9863,9384,12915,22190,6812,6080,-29332,-8122,-4360,-22268,24412,30372,-25416,-3028,23196,-2737,28094,-1100,-30829,4608,-30380,21664,-1965,-21603,30544,-15000,-6856,19188,-23730,-8128,24213,-8304,10406,-6496,-21646,-18642,-1152,32044,10710,-8465,-28665,-21056,-18042,-14288,-11632,32576,1050,-25384,-27338,-25152,24928,-12452,-30105,-31144,22124,11783,26332,-372,-13968,398,19046,-7816,-22311,9712,22490,-12962,-16328,10567,-16212,-32442,-11131,-1902,-9622,-20867,-19768,-22924,-31214,9868,-23252,7717,-17242,27424,24193,-29224,-11006,18256,4754,6614,-32323,-26489,31432,8776,20388,18136,2920,15854,20136,20448,16617,24479,-25532,16152,1824,-18083,12208,7856,-5939,-25201,-15364,-30836,-1145,-3085,-13727,-425,-21184,13932,-17831,-13000,-30568,13820,13970,-14342,-805,-22456,-16820,10214,32113,26980,18532,2258,-22476,-9160,14960,5239,-1533,18068,-20016,20567,-24713,20800,7296,-32130,2701,27572,-8748,-5547,-27823,-31472,-15760,-2476,29858,30698,-12611,-4548,15424,-20183,-11344,-26912,-23784,32352,-30692,17876,44,-28082,2112,-3914,-2390,9805,4170,-19094,416,-31763,16095,32684,-30850,-27743,-13724,488,7160,-21421,-14756,-11032,29845,19854,5116,-31716,-3916,17884,8597,-2433,-30608,-2134,16096,-6528,31101,6752,-22498,1818,-15037,3686,22994,13886,7844,23549,9929,-23645,25980,8580,-23740,-11080,-22320,-4049,-26998,-7247,28561,19907,-32768,-7496,5684,6478,-26895,186,-6349,-11648,-1688,-3488,-19228,6505,19737,-18817,-17492,-26046,-10504,-21667,-19578,2647,22515,-1278,28872,-3396,-29393,-7731,-16130,28102,-31994,-28588,32106,-504,-13824,6579,-26754,-21863,-5170,-31803,18168,1581,31064,-25136,-17984,-21234,31238,-10048,18035,-21118,26856,17923,9973,-25509,297,12192,-15512,-17496,-13376,-32594,-26736,-9784,-30465,744,14160,31820,20116,-9274,-9856,25064,24092,25810,8627,-20165,-14747,10916,3883,-9417,-1686,9616,-20351,23553,5562,17268,27264,-31992,-6506,-13386,31570,-4164,18000,2030,16920,-19660,-15878,-27056,8868,7456,-30664,-9108,356,-3260,11132,19119,30992,-18524,816,-20486,-23073,-13136,29082,-9956,-8672,-3542,30122,-23494,25058,27304,-11344,-22640,-26240,-23753,-1932,-2334,17784,11395,-31820,-8991,20947,17782,18588,-10716,5013,29918,-29893,22944,-31704,20272,-19712,-3454,31184,-18527,17304,-11115,2650,18296,-19350,-18661,6005,8340,-15166,11262,29823,-9420,-1696,-6368,10728,-24404,3424,-18652,-27988,4844,8384,-10710,-23188,40,1239,680,-3554,11778,25288,-21073,8978,19181,-30057,27009,-17728,19803,8446,21969,-28768,-27548,-25334,29312,-9426,6227,-3030,4745,21628,-21444,2628,6675,-6718,-6484,182,29748,24528,9449,14456,-3031,-12879,6308,14944,-8852,19876,-6090,-1052,-29114,-674,-1400,-17038,26568,30530,32200,5984,-12682,-3212,19276,27296,18834,-13324,-25288,6637,-548,21650,-27532,2949,-17470,-29832,10583,-28305,30067,6843,23352,-27057,-21849,-18441,-6290,-25494,11858,28475,28378,14504,-24845,-25726,-10836,1086,22204,13212,-18796,-12086,25804,-1672,25153,20044,-14858,-13272,4491,-5632,364,-5778,24658,-17770,966,31008,-18828,-3946,-4513,-9216,10139,31475,15804,4999,0,-28734,-21531,5080,29102,-16664,-28688,-5332,-17542,-4931,14864,24068,5683,5376,-10116,-11844,24383,8266,-30954,-5452,18542,-15239,-11021,-6043,30500,400,15741,17170,-28648,2214,7379,-11748,-19674,-14829,27112,-12096,-18960,22396,-23904,-5106,524,-11118,21982,1416,10302,7511,14680,-12544,-5776,4388,31713,-31092,1939,-26236,-5036,-10406,-23662,-22523,-24232,11022,-3147,21629,-26114,-10272,-21768,338,24083,6939,-31360,-12554,21232,24109,768,14752,32334,14879,239,32190,-12400,-20176,8622,6360,24146,-1106,-9940,12227,4816,-23472,-31296,-22994,17280,-14553,27656,16528,-29747,3398,-24246,5576,4148,-29157,28456,-21677,-8860,-31662,7714,-4040,27456,4074,-7993,31506,4908,16292,-24391,-11904,-3040,-9892,22183,-4442,29586,19884,-20144,11225,16462,-25662,-26024,-7112,25025,-26571,-2728,1608,-17446,-24438,28000,-11214,26262,-23602,-32004,-6318,-32450,-25096,4824,18670,-9242,30741,-2052,-18080,-23416,1996,7282,5190,-26584,1027,19174,9173,-22576,-26908,-5656,15077,29375,12876,12594,-32,-2272,-5904,-24728,-3324,-1151,-31936,1120,18560,3112,-7064,17592,-6467,-15393,7836,-3026,25015,-10936,8823,-11176,7408,5136,-31586,-2848,13312,-24676,-20271,2128,-1279,-28564,21875,30765,-2144,22578,-17057,2771,30438,16377,15200,17184,25250,19438,8518,-18080,-17930,-32476,4336,17504,-7706,9745,-6223,3643,4617,-7817,18824,-956,-18990,3817,-19204,-11757,-4178,2336,-348,-5410,22586,31232,892,-13768,28218,-25910,5709,-31676,24420,4035,-31200,27841,15714,8460,-8778,29663,-17078,26448,660,-17582,-4632,-7335,-19572,14436,-22184,-13854,27277,-5940,-17830,14314,14672,4808,-14852,-29636,21820,30112,11196,2026,-10492,22880,26580,-8769,-12333,5012,28803,16554,1132,-3144,-16667,4660,12500,31232,-9200,16722,-29184,-3336,4183,21776,22756,-9276,-28365,-12897,-22276,3664,-179,-13808,23254,-4024,15088,-22588,15968,20560,17060,29060,9141,10642,-27142,-13114,-15520,-22858,31875,29264,2464,4550,-11819,-15546,-6847,25856,-26472,15485,17752,2606,-32536,6692,16452,5160,-9065,18080,-18688,-28095,-25304,22969,20383,-13736,25344,-30760,15632,29484,1500,-15546,25616,-26234,-1664,9300,-217,424,2432,-4602,4050,-8360,13192,6113,16222,21695,-3520,-25673,4694,23301,4288,30748,-27450,-8234,27570,-29414,-4424,11887,5600,-12128,9518,-5015,-736,31905,23032,-16802,13744,19996,19656,-4386,-14332,-11362,23060,-20226,25335,6944,-27028,3980,-9520,-21317,29868,-32340,-9318,-20864,25954,-19884,8601,-13286,-22080,21716,3544,12135,-22933,-31791,-16976,15190,-12876,31567,13840,26937,18444,22676,13496,23587,-11656,31328,16239,-12966,-17596,30310,23976,10229,27457,-7695,-27304,31291,965,-12948,23281,-27330,19076,-15628,32127,-14937,10106,-6294,-8204,-27113,-19128,734,-25266,15599,-13296,23309,20666,-8930,5564,-28527,11728,-3512,-16532,29970,18168,18050,-15254,-5742,30288,-14223,10808,20100,-32559,11060,-22870,27250,-14892,23580,25024,6104,3097,17562,27519,23415,-22238,28184,31242,24033,9580,-25972,-1640,-25249,25544,-11216,8306,8336,32234,13620,9360,-17376,-3672,-2359,20734,29254,562,-20639,-13981,19260,-18146,25422,24196,-13306,17544,-31540,-17333,-314,31148,-3574,13606,-9382,-29922,26888,11432,3590,20767,2904,29920,25816,14735,11630,30742,24136,10125,24596,-30672,19168,-26681,-9130,-19248,-29195,7032,11623,-15297,15728,-8588,8846,13562,-14553,20896,-466,32264,-21974,-5356,15872,-16996,7216,-15311,-31254,-18995,2975,-17578,-26472,10312,-26816,19456,8790,-21216,15999,3986,-31088,25312,-18666,27440,-4188,27976,31748,322,22046,-30078,23720,10492,-8960,20266,26992,21160,22016,-20898,-15897,-22944,-12522,15794,-1720,12486,20610,30472,-30730,-11034,-1916,-24209,-19720,5059,32544,27188,2468,-9480,-29978,-28556,-27080,26268,21016,19833,-19270,-24185,-17826,-11826,16765,-21862,-26832,-25334,14864,-12231,-21535,-17320,-28974,8784,-5706,10793,-5714,-8588,-15560,-7423,-4501,-25776,-14984,13390,4532,31217,11757,-19440,-11342,486,13184,19616,-25811,-20280,-3152,15449,20472,16368,20350,-25760,14622,-16138,15112,-28663,-11406,25556,-3312,13912,4752,16384,17276,-28030,14896,-10577,-17556,17164,-16698,4132,-25477,31313,-14496,-20712,-32144,10416,-9395,-3854,16777,980,16562,-10380,31292,-17416,23531,-3128,-1483,17616,-27052,-6036,-28000,-18768,27188,11232,-19798,-3887,-19388,4396,-19663,-27690,-7755,30944,-9294,987,8316,-25814,-1946,-10612,-30886,14400,25449,10132,11584,25760,17780,15675,-26368,7162,10408,31442,-13922,8662,32664,27042,17358,-11328,6762,-8865,-20854,22314,26453,32608,-28808,18104,-24566,-21338,-22712,-4511,-28965,24418,24404,-11344,-467,5362,-10572,13247,11544,4191,10656,20108,-19688,19776,25942,7551,-17284,1098,-1992,14381,5414,-1386,20494,-2362,29131,-7940,10282,-19294,30624,-18875,-18650,-14151,2540,1856,20163,10717,27666,-8702,-31696,24839,-22020,-8616,-18429,-12744,-12696,-12832,-25550,-12536,968,3479,864,1043,-22169,-15840,7892,-2536,10343,-32660,-1696,852,8559,-27670,-22047,-14342,-8678,-26944,-32560,6204,448,15322,-27536,22860,-23285,11704,30608,-29100,1122,18399,-28738,15385,-16103,-11728,-19509,-1698,29392,18592,-12924,-21804,23100,-17162,-8116,6714,-31056,-5588,-1257,1220,11546,-17991,13870,-31295,3416,3962,25524,-27868,-27063,23898,2952,-10392,13332,-16700,-23426,12930,13152,18106,1418,-11937,20544,1462,-19764,-3640,9562,20234,-31200,19371,11580,12658,2517,994,32422,1440,14738,-272,-19536,-5460,-16664,4744,20836,-6995,-30541,486,-4936,16026,-21038,-13116,14712,14346,14819,11143,-21160,-21190,-20218,5632,28477,-21862,794,-14437,-11358,-24840,-17472,-32595,-3290,22062,-6667,18428,24418,19971,-9691,28000,29740,-23568,11490,-30182,16952,-10320,-6256,29556,-20336,-24944,-24520,-25766,-25232,12324,13991,26769,-28388,-21475,24883,-24429,-27713,-7824,29868,22916,12066,-24031,25120,-11888,26092,-31111,20152,-21948,-9948,12599,20772,13984,-7004,3931,20296,18802,-27184,-21028,13972,-10368,6912,2416,6825,-31456,2405,-12568,24821,-20980,-9152,6918,28375,-25792,23758,-24302,-12788,-30056,-25164,9295,14778,18768,-28203,7658,-1054,-18000,23917,32200,3652,28552,-21484,26304,-10851,-23974,17632,31301,30678,3921,-9125,9621,-21328,5824,-6115,-18810,22899,4766,-16600,1160,4864,9670,14182,-31424,10488,2331,21164,14283,-14826,-13158,-12028,-8628,6080,752,19510,6590,-29840,-4184,-1456,15128,32281,-896,-21178,13961,24618,-4494,-13572,-20936,10056,16670,15820,-27777,13180,-6648,106,-10858,384,-24154,-12240,-26288,-18192,5876,-8098,20084,17254,-16388,15208,25510,1612,3711,25072,31974,-10600,-6704,19416,-30710,8368,-17680,12464,9496,-19773,2020,-13448,4855,-31046,27337,-18035,10479,7293,-9576,16008,-20852,-21770,-8452,-811,-9728,15511,-23000,18043,-30996,-3317,-12926,-28940,25296,-22784,6544,-24480,5023,17225,-6736,-7516,-28474,27730,-2589,25289,-31245,3698,15042,-25803,-26624,-12508,-31032,-19556,-2202,-17545,-11483,-21376,-16960,26738,-23598,-19620,14510,-17097,4845,-3840,20944,32040,14398,-3074,-23744,-19069,-4616,-8552,27392,24802,26350,-6690,21849,14451,-2152,30063,28912,-6008,21104,-18156,-29251,-10880,-18820,-24093,-14370,-16788,-17724,-24124,14643,0,840,22364,-7349,-27248,-6810,24646,24501,-23175,10648,7680,-277,11847,-3143,-28093,-14350,-15712,-15336,-12686,-29429,-30578,-12402,-11432,17646,-22608,4158,-26133,29118,13429,10484,24066,5936,16384,-26167,7751,32056,-4228,13619,24741,-13642,14999,16224,-27560,-17062,18368,-32287,23608,5536,26228,31472,-20036,32096,16052,-400,-5812,7496,26246,8499,5432,-3432,27110,-11976,872,17585,17820,-30948,-7292,607,2005,23445,30840,-18516,3268,28643,13217,-14046,13096,-20416,-22068,-21428,30919,-2481,17248,-26938,-14937,1225,30794,30276,564,-18688,26640,-5258,-21278,238,6106,2158,-8832,-739,20968,-30460,24804,26440,1007,-16072,7834,-9569,-12200,-21248,-18250,8691,4896,26458,25649,424,-14826,15239,-30893,10368,24172,-7194,7456,-7840,-24145,23333,25728,24051,11178,-30036,-25210,28976,7208,-20728,-10108,-20882,11046,-4024,-21300,-28968,-27218,-20906,25695,17732,30768,14463,22052,-22686,-16495,31857,-22423,2043,-31998,-8473,14809,-14345,24704,24323,14764,20494,19481,20529,14613,1226,-17038,22749,27048,-31232,30409,23424,14644,-10604,-22674,8258,-32455,-15924,9716,7846,26712,2806,-21250,25707,-160,-15650,10852,-6140,24184,28346,18229,19620,30328,-18758,4084,-26624,14034,27284,-20603,-21295,21506,-17987,14336,-20484,13880,27078,1115,-17240,2278,-3256,22476,-5408,5536,5228,-13523,-16566,-240,-20066,3411,14738,1345,17358,9852,-8670,15492,12226,27278,-17300,-32695,-14572,8128,-30572,10985,-32040,16586,10664,27408,6702,-22163,22964,-6809,8980,10614,-5136,-1964,23491,578,-30972,3744,12445,21328,32672,3439,25447,-14140,-32098,10847,11352,17188,27314,-30462,-2429,14842,13050,-3863,-3756,18856,6826,-13297,-29391,-6211,16752,-18118,29816,-6912,675,19200,-11919,-12631,-4957,-5910,-15254,4544,8892,25904,-10052,10418,-29952,20831,4994,1916,9064,7364,5908,-19294,9583,13773,-30823,5880,6603,-14720,-15257,-28424,31468,31872,-25004,-31733,22950,-26426,1047,-3451,4762,30862,6932,30352,18319,-16528,-16608,2637,-14140,25864,15264,10940,29391,31904,8553,-10184,-18841,-23148,22380,-29044,8776,1211,28152,262,-13627,25502,24020,-28566,-25394,-5062,-12397,-29128,-16552,7348,-26928,-15308,-23813,-24724,-17849,3952,31912,-31633,124,-1924,22298,-3808,-19964,-4971,17532,-24632,10001,-14296,12288,-2373,11932,19040,18544,14893,18636,-7316,2536,23402,-17896,-11200,13240,-24040,1694,-15484,3636,20228,32400,-6629,-8081,-16633,-254,-6156,-4425,-32605,-8148,5863,28930,-4617,10922,-26675,-20956,20662,-460,9424,-26794,17915,-14552,6064,20576,27322,9584,17205,25306,-1512,-6328,30584,8851,13762,29962,23208,28237,23720,17828,-2266,21335,21963,7084,23701,26676,-28527,-9826,-3104,-20728,-17434,13524,9294,-9610,27006,-1727,27016,-24346,-7560,-15192,-3468,10148,-26973,18112,-24318,2920,-15610,10549,7254,22038,-7550,-21868,22368,29960,4364,-31698,4936,-10494,-26986,-24340,-9082,-12248,-9174,-1382,-30720,-25980,29771,4028,15240,17600,7936,12481,-1465,6620,32151,-31264,-20896,14416,30240,23588,-4988,21536,-3886,28580,11332,6686,16433,-5692,-14978,-5134,24176,20302,9430,32754,15779,16180,-24392,13976,2497,-27196,-2498,24468,-22448,16456,31386,-13740,-3875,-15962,-24008,30600,8404,25460,-2345,-27790,-31463,-16200,-9624,-16439,-20720,-30896,-32081,-19948,21142,9335,-10176,-10528,11684,-31372,-11110,14564,11678,2118,22512,-414,2476,-29440,23860,720,-4467,-5456,-16758,1685,12978,20596,1896,26574,-15090,-25004,26908,-17362,908,21331,-17939,-26599,17652,7438,9314,1012,-31002,-4828,-7432,-29468,-24311,-24712,-29812,-31040,17256,-14957,-32622,26314,15368,3294,-21788,5208,-5906,28136,-11984,-19892,4400,3168,-12880,-14880,12330,-15232,3532,-30004,-29799,12708,-29696,-21005,-1294,-12676,-18312,16225,-23370,12297,-27395,7338,-12064,16564,29788,4471,22592,30432,-29980,-21607,14324,-13241,9890,17200,1923,31480,25594,11894,-30598,-5616,-19277,14439,-17588,-20800,13910,-23260,14350,-29184,21202,14632,-23128,1386,25776,26224,-25883,22724,-11158,-20668,-20352,-12775,22582,-10473,5050,6832,-22050,-4792,-22418,29880,-17617,-11064,25238,-4910,32008,-20262,-30144,7232,29406,17012,-26167,-22208,-22288,25590,-32294,25942,31893,4815,-21974,19488,2040,-16998,12136,12362,6576,29791,-26860,20771,-19830,32008,-12936,4054,-4061,31513,-21417,-13820,21105,25487,-2534,-31686,-21465,-22795,12536,-2037,32704,20992,-22668,13301,-4698,18885,-14520,-28720,31243,-19510,-28193,-13916,-11312,15061,-12240,-10092,3061,12316,-22901,9004,-18868,18132,-6614,28394,-29569,-4374,-10960,-4864,27240,-19562,-24136,24511,-25868,-29424,-23637,-19260,16256,-27328,8570,5478,30616,-27500,-1988,29384,22912,3241,7706,-797,26360,13796,17800,-26928,-15354,8515,-1235,-494,-23178,-12678,16998,-26967,-18808,4687,22431,-25388,19752,10761,-25108,1194,-27352,29108,14154,-13680,16448,-11552,11235,-23148,17336,-30368,-24758,1938,18172,26508,-4462,-30984,-21210,-20211,-3852,-15918,5159,16730,-30252,30036,-602,-18672,-26879,-12928,-16664,-28094,5604,-28432,-3968,104,4910,-1988,27470,7934,25688,25347,8462,-22564,30905,25569,-19654,22169,30821,25217,-32154,-13860,-24496,-11953,-23037,-15248,-23608,-8200,-29048,14248,15239,-25969,-16603,-23664,18420,31588,-11632,7752,9383,19490,-2916,20650,-14898,28032,30166,14164,27189,7213,1478,3858,-19574,-25129,670,16165,30449,-3878,32610,31008,20749,-2317,-2580,18731,-12130,-11270,-25981,-32762,22286,24956,21978,-15334,-9800,-2394,17489,4556,-3292,23426,11732,18943,-48,2184,19326,3020,7254,26520,25824,7604,20345,26753,-32576,-29360,13936,7784,8130,-28944,-11605,-16769,4264,1687,20644,29110,30800,27217,731,-20608,-4996,-10200,27456,4684,14312,11902,12258,-30926,-14464,-14394,-12688,-16299,24894,15503,-14098,940,25844,-13785,-29624,-20052,-22134,23398,1727,4927,-5139,-18560,-30826,4652,9408,-20296,-19512,342,22746,1052,15734,14062,-23546,31328,-28021,1507,-18182,29124,3320,-18673,-20024,19040,-12631,15448,20592,-22468,5162,-4920,25370,-9580,-10532,18688,21490,-21790,25318,-1571,9216,-12506,-1218,29692,-23436,-4148,4718,-10863,14449,-25226,26004,-5040,14316,21376,-32,-24306,-27370,16156,-21026,-31392,-20787,5536,30624,29096,-25125,28432,-17465,-26762,26340,8260,2760,31173,22073,-1456,9188,-7337,10448,-32632,-15026,388,-21138,-20326,27264,-2774,-31426,-29552,3024,26110,-7512,-31852,-23667,-604,-13083,29972,3765,-12618,-31052,-24728,16626,30205,18475,28709,26448,-1192,6130,9422,-2764,11033,-5287,5600,7496,28378,-27506,27918,1442,9168,-8608,10205,-532,-7412,30056,-28603,24375,-25800,-25273,12368,20147,-8161,-31312,202,-17518,-8954,2312,-31508,-31576,-15865,-29770,27112,735,-4918,-21528,-24384,-11838,9848,9840,32719,30180,-11496,-27898,7352,11692,6562,-29412,32168,11064,32041,-27542,-9959,-20790,30862,21870,16860,-30500,-20364,-15920,-25510,30460,-8513,-10872,-28812,21551,-17886,14458,-17270,16556,8748,-17892,16798,-26137,27358,-15062,-16328,22096,-3128,20524,-22464,4905,-15512,-14954,-14456,32752,-10845,-23543,-16112,18136,-4573,-23974,-374,-23572,27458,27376,4167,-192,29311,25717,18110,579,20736,9988,-14555,-30262,22591,28395,-24144,24121,1944,-18104,11538,28584,17552,5546,-15316,-26935,30735,-8475,-13729,10744,-2560,-29965,12008,21893,-31712,-11094,-3632,7381,-7423,21017,-17708,-18432,-6380,-7037,-26556,-20181,716,3273,30360,-30936,29981,-4492,21218,11740,1579,-19655,29873,-23624,-23520,-9024,-3044,-1024,18277,29296,12293,-18332,-24296,-7872,26608,27482,17075,-20556,13668,9350,13611,-5448,26244,6640,17616,-2184,-14988,20784,596,12894,28722,-28824,-31760,-11899,-15662,6194,14510,32110,-25436,-2480,6142,-17080,4720,-32532,-12172,-23625,-1106,6800,-5134,24964,-12726,-28236,2640,4668,-1341,-32730,-14068,30307,-26735,30566,4592,-11048,-20020,17672,25252,-11616,-30949,5608,9316,-14672,10408,16184,-18672,10595,20508,28944,3892,-10605,6620,-16140,-11912,23136,14494,-11284,24732,1686,6672,-31438,-5728,18648,4478,19339,-17856,12768,1474,-21721,17920,19790,-17284,15624,17880,-5128,4320,26236,3436,18744,15963,-29768,-29788,13360,-16584,-18381,-773,20911,787,2680,32669,-8,2948,27223,-24764,-19360,-6368,-5738,-16497,11136,5056,-9467,25234,-6032,-1313,22772,4196,-2543,31328,19960,-16818,-19280,1608,31451,-22731,32022,-12736,17548,-18144,-3846,31538,11360,-13988,-25264,-3439,13660,20486,-25651,31544,-18270,14124,-3456,-27932,-2662,24548,-14084,12708,12354,31050,-29499,-13679,17628,9070,352,25051,-27532,-19924,17789,30000,17198,27834,-6906,-16507,19099,-5678,-25123,-12348,-1728,5828,29340,-29903,22856,-19544,-8806,30088,8380,-29463,-12805,-24980,29790,-26324,-19129,-17625,-20480,32739,-22472,9516,-21888,-804,-13171,23800,2914,-16656,19316,18960,16290,-12743,-27861,-16908,-20247,-32503,-5501,20728,-14818,-28634,-27740,-32277,-22077,22604,-29518,-9204,23542,41,2806,17869,26736,9792,32224,10288,-31320,-30394,23654,9877,-10872,-24259,28122,31504,-26667,-7378,32572,20805,-20856,9639,-18664,-22439,10896,26076,1132,1524,-15110,1170,-16160,-5145,10164,-12568,13690,15264,-15623,-26682,-7922,2896,27063,16284,-6648,8626,-2198,-856,-4508,21048,-6352,-28576,9324,-28740,7398,-2064,22173,-6015,-29991,-31249,31938,26946,27731,27112,9991,-32396,-20704,-29266,-22672,-31400,28706,-26920,-16576,30094,12942,11840,18321,-14912,4556,-880,-853,30900,-7840,-11273,-4560,-26552,312,19268,-20192,10600,-16792,-6260,13006,22971,-23505,-24080,-28742,-30725,-12300,-18183,-5254,-11961,-17178,10596,-10356,-24523,6356,-20352,-17832,-11379,1512,5456,468,6520,-22648,498,-30840,20722,30920,19164,16963,-11978,23373,10800,-19447,-8592,4965,11264,18554,-6288,7296,20091,-24638,-7308,-30917,4407,-28766,-4360,12744,-4942,8668,28668,-23452,-21436,30836,31510,27784,-22037,10312,-5466,-32584,11840,21808,17858,-26640,-3242,8930,-2690,-5352,-10157,-6174,21016,-27028,9504,-15208,-16463,-31044,32638,-4176,-30449,-890,-31840,-14472,-15616,21792,584,21503,-11763,11418,-5140,10592,1820,-12050,-26285,17587,14870,26760,23,-15868,-25528,-28428,-18384,-31426,-28351,-31720,-10092,-1007,25616,-32074,-32631,-29180,32412,-1456,4516,-21012,-12767,-22030,-12592,3101,20434,1204,3796,-18390,-4478,474,-20981,-10394,10504,-26548,-9231,-27342,23150,-16564,15650,-11493,-12264,-27376,250,-13144,11002,11783,16809,-31362,27162,-8524,-17743,24912,-11411,16269,-21324,8792,-22920,-2284,-11016,-31978,-3359,-10211,11549,-17121,-27527,-4996,-18808,12840,9031,-28568,-15966,21372,17040,-27910,-13058,22400,25908,23214,-3685,-16512,25991,-5446,26421,5959,22479,-8786,22202,18464,-9205,25615,-20992,32048,-6082,-11787,25088,-7174,7826,-27252,10071,11923,-4498,21091,10104,-18228,19120,-25560,-17611,-15852,14961,-24630,23137,6639,12540,8702,30401,6520,-13407,-1528,24152,30192,78,-7244,-8992,17660,-7409,5205,-6924,7520,3847,3965,12691,-6247,16952,-16488,23367,-31758,27640,11591,12416,-31642,-8103,10880,-26488,-31945,-12321,10106,-15962,7614,-27264,-2512,-28372,12341,-16592,-23867,29514,12152,-21151,2680,16917,-31817,29210,21510,-11281,10032,-16563,-11496,-19436,11540,-22592,-16271,27440,32236,-2768,4430,7544,6944,18962,-10796,26737,-30894,22324,8351,10084,-11753,18624,23132,2258,-19248,28578,-26217,7927,11391,-21926,31578,10872,-10818,27456,-19396,10271,6200,-23378,14541,-25912,30096,-31433,-2730,1772,32014,-18896,-9729,-4440,20425,-7200,32064,-26069,15776,-1238,-2606,-4995,22269,20197,16068,-19256,-22171,-16232,-26093,7082,-10590,-19499,-22336,2577,11520,-7908,-32576,4568,28712,9196,-21048,8956,14216,-3403,-18024,-1853,-28629,-7982,19393,23628,1702,4696,11523,13204,-21612,23976,26172,32635,-17323,20728,-2526,-10680,-26466,-26944,-7464,7773,-19047,31950,9106,-1179,16904,-32496,-20336,-2192,19072,-22264,-21484,6628,13616,-17152,-7840,16738,-27197,26208,-15408,-614,17423,-24198,-5888,-27156,-12335,-28632,-26452,30037,-27238,6432,19913,8509,5444,-28098,7140,-9163,-463,-23490,6263,-14381,23288,-11680,21824,6790,-15201,9939,-8078,-1464,-18592,-15464,-19118,-8972,-12394,-6317,-7652,6080,28362,5704,32129,5750,32294,-2328,16445,-30028,21908,22975,-30693,19913,4444,6000,-13752,-19364,-14072,-23304,-23896,-6928,-30662,11478,-26545,22188,5338,-11438,30692,-31241,-8078,27742,20064,28038,14464,18562,12849,17575,-4112,7450,-24010,6856,-17385,-12546,9591,-7016,13532,21248,22218,25267,23972,-5378,14768,8192,32499,-24540,25822,24440,-9529,19065,25952,-7938,31384,-21552,28547,-13419,-28532,-8770,29219,1508,-11164,-23344,-19600,13280,15152,10576,-22217,23046,-20036,12556,-2426,27552,32192,-14094,-28988,23964,-6376,-9840,13913,-15781,-6230,-5907,8723,12140,9540,26336,30735,9369,-4304,-5275,8132,19508,20181,-19342,11827,30545,-27676,15665,21967,-9803,-3531,16732,-31958,-20330,-11760,17963,-15298,-9056,28180,-2495,14856,30411,11868,24192,8899,3764,-6994,16072,9455,-19824,-10552,-14704,1115,11088,-20696,17713,-28842,-30818,31361,-32426,32112,29686,13374,9648,25307,-20572,-25498,-572,32556,18468,-18453,14071,-30496,-25592,31788,22968,-4665,-29888,-11944,-2427,17613,-16144,-2016,9538,-19688,-24712,-30444,7736,-23689,4970,19966,12008,-10178,21556,22528,-23776,-11712,-14064,-16940,-36,6630,7520,29087,-24742,13224,-9269,-10926,-10735,18100,29944,-11350,-23755,9264,20408,21968,31456,9601,32044,-29688,-1728,-12484,-10833,2637,-3641,-8168,-24368,-26711,3905,23232,30246,-4684,28590,-15103,24652,7178,7664,10537,1570,-32409,-15320,-26784,21814,9870,-12976,-19716,-9380,15074,-2154,8965,18912,-1344,32144,-662,-19420,-20808,31712,-3608,2453,-12237,-21000,20764,-4822,9587,-3856,-19155,8018,-9441,-29112,-32198,11644,5280,28536,1264,-31096,-15364,6833,-7419,3040,29884,-29228,17232,18238,-27864,-7424,4104,-9810,12928,2704,-19392,6245,28984,-28457,-30129,-26550,-412,-29316,-30464,31848,3747,-17804,-30070,-32700,-24776,3984,28526,-17428,2496,-29345,-25868,29402,-20788,23900,8458,13030,15384,-22520,-24902,-21344,-3464,-2741,29866,14086,-13276,4544,-4472,-19249,13516,-29264,10497,-6908,-5428,-11904,6962,15126,-31492,29852,2410,-15800,1794,-22992,-27262,13312,1247,27930,-24332,12634,-8630,17710,1760,-12718,15321,-4144,3072,-15956,-13168,-16215,-8094,-15150,-13159,31180,-29349,-18141,26780,20754,2116,12446,9950,31968,11144,29048,17412,19232,-4329,17770,12570,10224,-29696,-13536,-22808,-12103,-10663,-7178,18970,14778,-30804,-14419,11072,-22775,11350,-3799,13572,22517,5751,-1552,-29906,17098,1293,11031,-10062,-29710,-9778,6123,-27278,-15378,-30414,-16056,-4753,29306,10780,25108,-666,9964,17383,-3948,-23664,-23660,-22974,-21192,-4416,31296,19356,-842,24838,-3470,11042,29765,13848,-16623,22768,-8294,-23664,16030,-5264,6960,24296,14346,-6322,27648,-7150,14160,-96,-5556,-3932,11152,-22240,19816,-5612,-1260,-16526,-7522,-6953,-10960,11176,-23900,19978,4096,-1331,31003,12342,28537,16586,-22832,9492,-19469,-25728,-2699,-2542,217,21440,-10016,13246,-5776,17794,17431,-2256,-9440,-6256,13366,-9566,-2714,-13045,-5326,31310,-32063,-12392,21889,28802,25288,8934,-4956]} \ No newline at end of file diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c new file mode 100644 index 000000000000..2e9481478c8b --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c @@ -0,0 +1,335 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** +* Generate C test fixtures. +* +* ## Notes +* +* - Run this script from the directory in which fixtures should be written. +* +*/ + +#include +#include +#include + +/** +* Generates a linearly spaced numeric array of doubles. +* +* ## Notes +* +* - Assumes that the output array has at least 2 elements. +* - Output array is guaranteed to include both the start and end values. +* +* +* @param out output array +* @param len array length +* @param start first value +* @param end last value +*/ +void linspace_f64( double *out, const unsigned int len, const double start, const double end ) { + unsigned int i; + double incr; + + incr = (end-start) / (len-1); + for ( i = 0; i < len-1; i++ ) { + out[ i ] = start + (incr*i); + } + out[ i ] = end; +} + +/** +* Generates a linearly spaced numeric array of integers. +* +* ## Notes +* +* - Assumes that the output array has at least 2 elements. +* - Output array is guaranteed to include both the start and end values. +* +* +* @param out output array +* @param len array length +* @param start first value +* @param end last value +*/ +void linspace_i32( int *out, const unsigned int len, const int start, const int end ) { + unsigned int i; + int incr; + + incr = (end-start) / (len-1); + for ( i = 0; i < len-1; i++ ) { + out[ i ] = start + (incr*i); + } + out[ i ] = end; +} + +/** +* Generates a random number on the interval [0,1]. +* +* @return random number +*/ +double rand_double() { + int r = rand(); + return (double)r / ( (double)RAND_MAX + 1.0 ); +} + +/** +* Generates an array of pseudorandom doubles drawn from a uniform distribution. +* +* @param out output array +* @param len array length +* @param a lower bound (inclusive) +* @param b upper bound (exclusive) +*/ +void rand_array_f64( double *out, const unsigned int len, const double a, const double b ) { + unsigned int i; + double delta; + + delta = b - a; + + for ( i = 0; i < len; i++ ) { + out[ i ] = a + ( rand_double()*delta ); + } +} + +/** +* Generates an array of pseudorandom integers drawn from a uniform distribution. +* +* ## Notes +* +* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. +* +* +* @param out output array +* @param len array length +* @param a lower bound (inclusive) +* @param b upper bound (exclusive) +*/ +void rand_array_i16( int16_t *out, const unsigned int len, const int a, const int b ) { + unsigned int i; + unsigned int r; + double delta; + + delta = (double)b - (double)a; + + for ( i = 0; i < len; i++ ) { + r = (unsigned int)( delta * rand_double() ); // truncation + out[ i ] = (int)( a + r ); + } +} + +/** +* Casts an array of integers to an array of doubles. +* +* @param out output array +* @param x input array +* @param len array length +*/ +void i32_to_f64( double *out, const int *x, unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + out[ i ] = (double) x[ i ]; + } +} + +/** +* Casts an array of doubles to an array of integers. +* +* @param out output array +* @param x input array +* @param len array length +*/ +void f64_to_i32( int *out, const double *x, unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + out[ i ] = (int) x[ i ]; + } +} + +/** +* Writes an array of doubles to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of doubles +* @param len array length +*/ +void write_array_f64( FILE *f, const double *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%.17g", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes an array of integers to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of integers +* @param len array length +*/ +void write_array_i16( FILE *f, const int16_t *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%d", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes a named array of doubles to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_f64( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes a named array of integers to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_i16( FILE *f, const char *name, const int16_t *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_i16( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes data to a file as JSON. +* +* ## Notes +* +* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. +* +* +* @param f file to write to +* @param a domain +* @param b domain +* @param y results +* @param len array length +*/ +void write_data_as_json( FILE *f, const int16_t *a, const int16_t *b, const int16_t *y, const unsigned int len ) { + fprintf( f, "{" ); + write_named_array_i16( f, "a", a, len ); + fprintf( f, "," ); + write_named_array_i16( f, "b", b, len ); + fprintf( f, "," ); + write_named_array_i16( f, "expected", y, len ); + fprintf( f, "}" ); +} + + + + + + + + +/** +* Generates test fixtures. +* +* @param a domain +* @param b domain +* @param len number of values in the domain +* @param name output filename +*/ +void generate( const int16_t *a, const int16_t *b, const unsigned int len, const char *name ) { + unsigned int i; + int16_t *y; + FILE *f; + + // Allocate an output array: + y = (int16_t*) malloc( len * sizeof(int16_t) ); + if ( y == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + for ( i = 0; i < len; i++ ) { + y[ i ] = a[ i ] * b[ i ]; + } + // Open a new file: + f = fopen( name, "w" ); + if ( f == NULL ) { + printf( "Error opening file.\n" ); + exit( 1 ); + } + // Write data as JSON: + write_data_as_json( f, a, b, y, len ); + + // Close the file: + fclose( f ); + + // Free allocated memory: + free( y ); +} + +/** +* Main execution. +*/ +int main( void ) { + unsigned int len; + int16_t *a; + int16_t *b; + + // Define the array length: + len = 5000; + + // Allocate arrays: + a = (int16_t*) malloc( len * sizeof(int16_t) ); + if ( a == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + b = (int16_t*) malloc( len * sizeof(int16_t) ); + if ( b == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + rand_array_i16( a, len, -32768, 32767 ); + rand_array_i16( b, len, -32768, 32767 ); + generate( a, b, len, "data.json" ); + + // Free allocated memory: + free( a ); + free( b ); + + return 0; +} From 2dc5a2704fe4c374cc1bb4a4acd5f5d236ec4060 Mon Sep 17 00:00:00 2001 From: LokeshRanjan Date: Thu, 12 Feb 2026 20:25:35 +0530 Subject: [PATCH 4/6] docs: add README.md file --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: passed - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/number/int16/base/mul/README.md | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/README.md diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/README.md b/lib/node_modules/@stdlib/number/int16/base/mul/README.md new file mode 100644 index 000000000000..1ef2adc31d4f --- /dev/null +++ b/lib/node_modules/@stdlib/number/int16/base/mul/README.md @@ -0,0 +1,110 @@ + + +# mul + +> Perform C-like multiplication of two signed 16-bit integers. + +
+ +
+ + + +
+ +## Usage + +```javascript +var mul = require( '@stdlib/number/int16/base/mul' ); +``` + +#### mul( a, b ) + +Performs C-like multiplication of two signed 16-bit integers. + +```javascript +var v = mul( -10|0, 4|0 ); +// returns -40 +``` + +
+ + + + + +
+ +## Notes + +- The function emulates C-like multiplication of two signed 16-bit integers. + +
+ + + +
+ +## Examples + + + +```javascript +var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory; +var INT16_MIN = require( '@stdlib/constants/int16/min' ); +var INT16_MAX = require( '@stdlib/constants/int16/max' ); +var mul = require( '@stdlib/number/int16/base/mul' ); + +var randi; +var a; +var b; +var y; +var i; + +randi = discreteUniform( INT16_MIN, INT16_MAX ); + +for ( i = 0; i < 100; i++ ) { + a = randi()|0; + b = randi()|0; + y = mul( a, b ); + console.log( '%d x %d = %d', a, b, y ); +} +``` + +
+ + + + + + + + + + + + + + From 571942a9a71dcdcf9f70071b933241a74713ddfa Mon Sep 17 00:00:00 2001 From: LokeshRanjan Date: Sat, 14 Feb 2026 12:20:14 +0530 Subject: [PATCH 5/6] refactor: remove unused Math.mul builtin detection --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: passed - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../number/int16/base/mul/lib/index.js | 8 +----- .../@stdlib/number/int16/base/mul/lib/main.js | 28 ------------------- .../int16/base/mul/test/fixtures/c/runner.c | 7 ----- .../number/int16/base/mul/test/test.js | 22 --------------- 4 files changed, 1 insertion(+), 64 deletions(-) delete mode 100644 lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js b/lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js index 2deb4c3a18e5..addb9d37fc88 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js +++ b/lib/node_modules/@stdlib/number/int16/base/mul/lib/index.js @@ -32,18 +32,12 @@ // MODULES // -var builtin = require( './main.js' ); var polyfill = require( './polyfill.js' ); // MAIN // -var main; -if ( typeof builtin === 'function' ) { - main = builtin; -} else { - main = polyfill; -} +var main = polyfill; // EXPORTS // diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js b/lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js deleted file mode 100644 index 22d28ff7858e..000000000000 --- a/lib/node_modules/@stdlib/number/int16/base/mul/lib/main.js +++ /dev/null @@ -1,28 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MAIN // - -var mul = ( typeof Math.mul === 'function' ) ? Math.mul : null; // eslint-disable-line stdlib/no-builtin-math - - -// EXPORTS // - -module.exports = mul; diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c index 2e9481478c8b..fd4299dfa310 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c +++ b/lib/node_modules/@stdlib/number/int16/base/mul/test/fixtures/c/runner.c @@ -252,13 +252,6 @@ void write_data_as_json( FILE *f, const int16_t *a, const int16_t *b, const int1 fprintf( f, "}" ); } - - - - - - - /** * Generates test fixtures. * diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/test/test.js b/lib/node_modules/@stdlib/number/int16/base/mul/test/test.js index ae0d59b0cb9f..db8f1a448b0a 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/test/test.js +++ b/lib/node_modules/@stdlib/number/int16/base/mul/test/test.js @@ -21,8 +21,6 @@ // MODULES // var tape = require( 'tape' ); -var proxyquire = require( 'proxyquire' ); -var polyfill = require( './../lib/polyfill.js' ); var mul = require( './../lib' ); @@ -39,26 +37,6 @@ tape( 'main export is a function', function test( t ) { t.end(); }); -tape( 'if an environment supports `Math.mul` (ES2015+), the main export is the built-in method', function test( t ) { - var mul = proxyquire( './../lib', { - './main.js': foo - }); - t.strictEqual( mul, foo, 'returns expected value' ); - t.end(); - - function foo() { - // No-op... - } -}); - -tape( 'if an environment does not support `Math.mul` (non-ES2015+), the main export is a polyfill', function test( t ) { - var imul = proxyquire( './../lib', { - './main.js': false - }); - t.strictEqual( imul, polyfill, 'returns expected value' ); - t.end(); -}); - tape( 'the function emulates C-like multiplication of two signed 16-bit integers', function test( t ) { var expected; var actual; From 8e3ea407c5bce543f678b2c09a3a5111ec0760f8 Mon Sep 17 00:00:00 2001 From: LokeshRanjan Date: Sun, 1 Mar 2026 19:04:48 +0530 Subject: [PATCH 6/6] fix: implement suggested changes --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: passed - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/number/int16/base/mul/README.md | 19 +++++-------------- .../number/int16/base/mul/examples/index.js | 19 +++++-------------- .../number/int16/base/mul/lib/polyfill.js | 4 ++-- 3 files changed, 12 insertions(+), 30 deletions(-) diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/README.md b/lib/node_modules/@stdlib/number/int16/base/mul/README.md index 1ef2adc31d4f..88ae7dcbca51 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/README.md +++ b/lib/node_modules/@stdlib/number/int16/base/mul/README.md @@ -68,25 +68,16 @@ var v = mul( -10|0, 4|0 ); ```javascript -var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory; +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var logEachMap = require( '@stdlib/console/log-each-map' ); var INT16_MIN = require( '@stdlib/constants/int16/min' ); var INT16_MAX = require( '@stdlib/constants/int16/max' ); var mul = require( '@stdlib/number/int16/base/mul' ); -var randi; -var a; -var b; -var y; -var i; +var x = discreteUniform( 100, INT16_MIN, INT16_MAX ); +var y = discreteUniform( 100, INT16_MIN, INT16_MAX ); -randi = discreteUniform( INT16_MIN, INT16_MAX ); - -for ( i = 0; i < 100; i++ ) { - a = randi()|0; - b = randi()|0; - y = mul( a, b ); - console.log( '%d x %d = %d', a, b, y ); -} +logEachMap( '%d x %d = %d', x, y, mul ); ``` diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js b/lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js index da51df198e16..c18ae37d1649 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js +++ b/lib/node_modules/@stdlib/number/int16/base/mul/examples/index.js @@ -18,22 +18,13 @@ 'use strict'; -var discreteUniform = require( '@stdlib/random/base/discrete-uniform' ).factory; +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var logEachMap = require( '@stdlib/console/log-each-map' ); var INT16_MIN = require( '@stdlib/constants/int16/min' ); var INT16_MAX = require( '@stdlib/constants/int16/max' ); var mul = require( './../lib' ); -var randi; -var a; -var b; -var y; -var i; +var x = discreteUniform( 100, INT16_MIN, INT16_MAX ); +var y = discreteUniform( 100, INT16_MIN, INT16_MAX ); -randi = discreteUniform( INT16_MIN, INT16_MAX ); - -for ( i = 0; i < 100; i++ ) { - a = randi()|0; - b = randi()|0; - y = mul( a, b ); - console.log( '%d x %d = %d', a, b, y ); -} +logEachMap( '%d x %d = %d', x, y, mul ); diff --git a/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js b/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js index 604d2ebfbc83..b91b41ad8b89 100644 --- a/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js +++ b/lib/node_modules/@stdlib/number/int16/base/mul/lib/polyfill.js @@ -111,8 +111,8 @@ function mul( a, b ) { b |= 0; // asm type annotation // Isolate the most significant 8-bits: - hb = ( b>>>8 )>>>0; // asm type annotation - ha = ( a>>>8 )>>>0; // asm type annotation + ha = ( a << 16 ) >> 24; // asm type annotation + hb = ( b << 16 ) >> 24; // asm type annotation // Isolate the least significant 8 bits: la = ( a & LOW_WORD_MASK )>>>0; // asm type annotation